If you’re managing a large number of containers, or expecting to do so in the near future, the options for container orchestration tools — from major players such as Amazon and IBM to startups and open-source solutions such as Kubernetes and Docker — may seem overwhelming. The common feature sets for these tools include container provisioning, launching and discovery; system monitoring and crash recovery; declarative system configuration; and mechanisms for defining rules and constraints about container placement and performance.
Not all orchestrators are created equal, and some have particular strengths and functionalities that are worth considering. We’ve evaluated several here to help you find the Docker orchestrator that’s right for you.
Docker Swarm is Docker’s own tool for cluster management and orchestration, and was recently introduced into Docker Engine as “swarm mode” with the Docker 1.12 update, which added support to the Docker Engine for multi-host and multi-container orchestration. Administrators and software developers can create and manage a virtual system known as a “swarm” that is composed of one or more Docker nodes. You can connect directly with the Docker API, giving you access to native tools such as Docker Compose. Container deployments are typically handled via Docker Compose or the Docker command line. Docker claims that the software can handle up to 30,000 containers and clusters of up to 1,000 nodes, without suffering any dip in performance.
The Google-designed Kubernetes is an open-source system for Docker container management and orchestration. Kubernetes uses a single master server that manages multiple nodes using the command-line interface kubectl. In Kubernetes, the basic unit of scheduling is a “pod,” a group of typically one to five containers that are deployed together on a single node in order to execute a particular task. Pods are temporary – they may be generated and deleted at will while the system is running. Higher level concepts such as Deployments can be constructed as a set of pods. Users can set up custom health checks, including HTTP checks and container execution checks, on each pod in order to ensure that applications are operating correctly.
Marathon is a production-grade open-source framework for container management and orchestration that is based on Apache Mesos and intended to work with applications or services that will run over a long period of time. Marathon is a fully REST-based solution and can also be operated using a web user interface. In order to guard against failure, Marathon can run multiple schedulers at once so that the system can continue if one scheduler crashes. Like Kubernetes, Marathon allows you to run regular health checks, so you stay up to date on the status of your applications. Another benefit of Marathon is its maturity; the software is stable and has a variety of useful features such as health checks, event subscriptions, and metrics.
Amazon EC2 Container Service is a container management service for Docker containers. Importantly, any containers managed by Amazon ECS will be run only on instances of Amazon Web Services EC2; so far, there is no support for external infrastructure. However, as a positive, this also means that you have access to AWS features such as elastic load balancing, which redistributes application traffic to provide better performance under pressure, and CloudTrail, a logging and monitoring application. Tasks are the basic unit of Amazon ECS and are grouped into services by the task scheduler. Persistent data storage can be accomplished via data volumes or Amazon Elastic File System.
Azure Container Service
Microsoft’s container orchestration solution for its Azure cloud computing platform, Azure Container Service, has only reached general availability as of April 2016. ACS is based on the open-source Apache Mesos cluster manager and lets users to choose between three container orchestration tools: Apache Mesos, Docker Swarm, and Kubernetes. The standard API endpoints for their orchestrator is exposed, so the software is then capable of speaking to those endpoints. Azure allows for portability by only using open-source components in its orchestration layers.
Nomad, a free and open-source solution from software company HashiCorp, is a cluster manager and scheduler. Whereas offerings like Kubernetes are intended specifically for Docker containers, Nomad is a more general-purpose solution that supports Docker as well as other applications that are virtualized, containerized, and standalone. In addition, rather than the container-centric abstraction of Docker Swarm, Nomad uses a higher-level abstraction in which tasks are grouped together and assigned to jobs. Nomad was designed to be simple, lightweight, and self-reliant, and can interface with other HashiCorp open-source software, such as Consul, a tool for service discovery and configuration, and Vault, used for storing and encrypting sensitive data.
With so many container orchestrators to choose from, perhaps one of the final factors to consider is whether you want to use an orchestrator that is bound to a single infrastructure or technology, or whether you need a more independent solution. Choosing an orchestration tool that’s bundled with your container management platform (like Docker) simplifies your workflow and allows you to work with a single vendor. If you prefer a “small scope” tool that only provides cluster management and scheduling, you may want to consider an independent solution like HashiCorp Nomad. Based on the many possible orchestration options, be prepared to reevaluate your wants and needs at regular intervals, and be open to change as new, and better, options become available.