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 next logical step, i this article we looking at alternative Contaner Managers. But let's first recap why we need container orchestration...
Why container orchestration
As long you have to mange a handfull of contaners on one host you may ask this question as soon your application start to use severla Databes, Loadbalancer, serviceworkers, caches, or let's say a lot of contianer you quckly start to think about challenges like:
- Service Discovery
- Load Balancing
- Auto-[scaling/restart/healing] of containers and nodes
- Storage management
- Health checks
- Zero-downtime deploys
Here is the list of Contaner Orchestration systmes that my provide solutons to all/some of these challenges.
Container Orchestrators list
- kubernetes - an open-source system for management of containerized applications. Build from scratch with learnings from Borg1. Kubernetes seems to have most advanced integrated feature set (End of 2016). Scheduling, Service Discovery, Proxy & Load Balancing as well as a lot of other small things are build in. And of course Google Container Cloud (GCC) is Kubernetes driven.
- Docker Swarm Mode starts to step on kubernetes feets from version 1.12.2. The build-in swarm mode allows managing of cluster and services comparably to kubernetes. Still it don't has feature set of kubernetes, but native to Docker and very comprehensive.
- Nomad HashiCorp's Docker orchestrator. Not tried yet.
- 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
- Docker Cloud (with AWS) can be seen as logical extension of the existing Docker cloud product - docker hub. Similar to Empire but the Contaner are managed from the Docker Cloud, still Containers running on you (AWS) machines. I guess behind the scene Docker Cloud runs latest docker in swarm mode and provisions your machines with Docker machine and InfraKit. In that case Docker Cloud is kind of nice UI wrap-up for console tools and kind logical integration to Docker universe.
- 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 Contaner managing part.
- Dokku not sure if it has a right feature set for beeing CaaS
- ECS + Custom Service Discovery + Custom Proxy Details below
Please give me a hint if you think i missed out a good one...
ECS + Custom Service Discovery + Custom Proxy
In my case this is would be 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 excerpt of tools that are on my mind grouped roughly by purpose
- 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)
Please give me a hint to other good tools of this categories if you miss something
I've already have my favorites, that are kubernetes and newest Docker in Swarm Mode. They are absolutely worth to get 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.