Docker-Swarm, Kubernetes, Mesos & Core-OS Fleet

B_B picture B_B · Dec 24, 2014 · Viewed 31.6k times · Source

I am relatively new to all these, but I'm having troubles getting a clear picture among the listed technologies.

Though, all of these try to solve different problems, but do have things in common too. I would like to understand what are the things that are common and what is different. It is likely that the combination of few would be great fit, if so what are they?

I am listing a few of them along with questions, but it would be great if someone lists all of them in detail and answers the questions.

  1. Kubernetes vs Mesos:

    This link

    What's the difference between Apache's Mesos and Google's Kubernetes

    provides a good insight into the differences, but I'm unable to understand as to why Kubernetes should run on top of Mesos. Is it more to do with coming together of two opensource solutions?

  2. Kubernetes vs Core-OS Fleet:

    If I use kubernetes, is fleet required?

  3. How does Docker-Swarm fit into all the above?

Answer

brendan picture brendan · Mar 12, 2015

Disclosure: I'm a lead engineer on Kubernetes

I think that Mesos and Kubernetes are largely aimed at solving similar problems of running clustered applications, they have different histories and different approaches to solving the problem.

Mesos focuses its energy on very generic scheduling, and plugging in multiple different schedulers. This means that it enables systems like Hadoop and Marathon to co-exist in the same scheduling environment. Mesos is less focused on running containers. Mesos existed prior to widespread interest in containers and has been re-factored in parts to support containers.

In contrast, Kubernetes was designed from the ground up to be an environment for building distributed applications from containers. It includes primitives for replication and service discovery as core primitives, where-as such things are added via frameworks in Mesos. The primary goal of Kubernetes is a system for building, running and managing distributed systems.

Fleet is a lower-level task distributor. It is useful for bootstrapping a cluster system, for example CoreOS uses it to distribute the kubernetes agents and binaries out to the machines in a cluster in order to turn-up a kubernetes cluster. It is not really intended to solve the same distributed application development problems, think of it more like systemd/init.d/upstart for your cluster. It's not required if you run kubernetes, you can use other tools (e.g. Salt, Puppet, Ansible, Chef, ...) to accomplish the same binary distribution.

Swarm is an effort by Docker to extend the existing Docker API to make a cluster of machines look like a single Docker API. Fundamentally, our experience at Google and elsewhere indicates that the node API is insufficient for a cluster API. You can see a bunch of discussion on this here: https://github.com/docker/docker/pull/8859 and here: https://github.com/docker/docker/issues/8781

Hope that helps! Join us on IRC @ #google-containers if you want to talk more.