In my last post I’ve complained about AWS native container management solution - ECS. Basically, it’s about lack of Service Discovery & Distributed Configuration as well limitations of Elastic Load Balancer and Cloud Watch (Logging). Doing the next logical step, in this article we look at alternative Container Managers. But let’s first recap why we need container orchestration…
Why container orchestration
As long you have to manage a handful of containers on one host you may ask this question as soon your application start to use several Databases, Loadbalancer, service workers, caches, or let’s say a lot of containers you quickly start to think about challenges like:
- Service Discovery
- Load Balancing
- Auto-[scaling/restart/healing] of containers and nodes
- Secrets
- Configuration
- Storage management
- Health checks
- zero-downtime deploys
Here is the list of Container Orchestration systems that provide solutions to all/some of these challenges.
Container Orchestrators list
Kubernetes
kubernetes - an open-source system for management of containerized applications. Build from scratch with learnings from Borg1. Kubernetes seems to have the most advanced integrated feature set (End of 2016). Scheduling, Service Discovery, Proxy & Load Balancing as well as a lot of other small things are built-in. And of course, Google Container Cloud (GCC) is Kubernetes driven.
Docker Swarm
Docker in Swarm Mode starts to step on Kubernetes feet from version 1.12.2. The build-in swarm mode allows the managing of clusters and services comparably to Kubernetes. Still, it doesn’t have a feature set of Kubernetes, but native to Docker and very comprehensive.
Nomad
HashiCorp’s do also offer a Docker orchestrator - Nomad I haven’t tried it yet.
Mesosphere
Mesosphere’s Datacenter Operating System (DCOS) advanced competitor of Kubernetes but it’s not a container orchestration tool per se, it is more than that, it is positioned like “Operation System for DataCenter. Where Marathon project is the Container managing part.
Docker Cloud
Docker Cloud (with AWS) can be seen as a logical extension of the existing Docker cloud product - docker hub. Similar to Empire but the Container is managed from the Docker Cloud, still Containers running on your (AWS) machines. I guess behind the scene Docker Cloud runs the latest docker in swarm mode and provisions your machines with Docker machine and InfraKit. In that case, Docker Cloud is a kind of nice UI wrap-up for console tools and a kind of logical integration to the Docker universe.
ECS + Custom Service Discovery + Custom Proxy
In my case this is would be a kind of evolutionary way to do it2. Still different topics that not solved (or not solved well) with ECS need to be configured and maintained by a set of other tools. Here is an excerpt of tools that are on my mind grouped roughly by purpose
Other options
- Empire - open-source, self-hosted PaaS that makes deployment and management of dockerized 12-factor apps easy. According to the Documentation, the project tries to rebuild the Heroku experience.
- Flynn Another PaaS for Containers.
- DAIS similar to Flynn?
- Shipyard Docker Swarm based Manager
- Dokku not sure if it has a right feature set for being CaaS
And to make it complete here some more Lists:
Distributed Storage
- Consul - brilliant distributed K/V storage, you can build a lot around this.
- Etcd - small, distributed K/V storage. Used by Kubernetes
- SkyDns - service for announcement and discovery via DNS (Build on top of etcd)
Registrators
- gliderlabs Registrator
- jwilder’s docker-register
- Nerve A service registration daemon
Smart Loadbalancers
Please give me a hint to other good tools of this categories if you miss something
Summing-up
I’ve already had my favorites, which are Kubernetes and the newest Docker in Swarm Mode. They are absolutely worth getting to know them in detail and having hands-on them independently of what path my team chooses.
Highly appreciate any feedback on the current listing.