Containerization of application workloads has revolutionized the way in which applications are run. Instead of “snowflake” servers, we’re moving to self-contained application containers which include their full dependency tree, making them portable in ways never seen before. It’s definitely here to stay!
However, once you embrace containers and start building non-trivial applications, you quickly notice that you need something to manage their lifecycle. This is where container orchestration tools really shine – they handle running your containerized applications, along with other ancillary functions like scaling, self-healing, deployment, etc. There are several options available, and which you choose depends on what is important to your business.
In this article, we run through five container orchestrators to help you understand the facts:
The first (and arguably most obvious) option is Kubernetes. It is also the most flexible of the options we will discuss, with a myriad of deployment options. For example, if you don’t want to host the entire cluster yourself, you can go for a partially managed option (where the control plane is handled for you). Many cloud providers also provide a fully managed option, where you just need to bring the containers.
The biggest potential disadvantage of bare Kubernetes is its complexity. While there is excellent documentation available, becoming proficient with Kubernetes internals requires a steep learning curve. It’s quite easy to do something wrong if you’re not well versed, so it will need a large initial investment. There can also be high maintenance costs supporting, upgrading and managing a cluster.
2. RedHat Openshift
An alternative to vanilla Kubernetes is RedHat Openshift. This is a family of container orchestration technologies which use Kubernetes under the hood. RedHat discuss the main differences between the two technologies here. The main value proposition of RedHat is the addition of networking, monitoring and logging that makes it much more “pick up and play”.
Furthermore, you’re not locked into RedHat’s infrastructure – there are on-premises options as well as SaaS (Software as a Service) and private-clusters deployed into RedHat infrastructure. There is also a Community Distribution named OKD, which is perfect for testing before taking the plunge.
3. Amazon Web Services
Amazon Web Services have options for container orchestration: Amazon EKS (managed Kubernetes), Amazon ECS and AWS Fargate. The latter two are Amazon-specific orchestrators that, whilst similar under the hood, provide quite different user experiences. With ECS, you receive a managed Control Plane but need to bring your own “Container Runtime”. This equates to EC2 instances, but it can also (confusingly) use Fargate for this! Fargate is much simpler – everything is managed for you, and you just need to specify what to run.
Furthermore, there are different limitations for each service. As per the table below, ECS is more flexible and can handle larger workloads, however it requires more time to manage. It’s simpler to start with Fargate and move up to ECS if you start running into the limitations.
4. HashiCorp Nomad
Something completely different (and much newer) is HashiCorp Nomad. This consists of a CLI tool and a lightweight agent, which you install on your hosts. It is tightly integrated with other HashiCorp applications (like Consul for cluster auto-discovery and Vault for Secrets Management). The big feature with Nomad, however, is that it does not just support containers – you can use it to orchestrate a variety of other workloads, including Java applications and Virtual Machines (with further workload types built by the community).
If you are already using HashiCorp Infrastructure, Nomad may be an excellent fit. Though at this stage, given how new it is, it would be wise to test it heavily before using in a production environment.
5. Apache Mesos
Finally, there’s Apache Mesos, which is like a mix between Kubernetes and Nomad. It follows the Kubernetes paradigm of having a set of worker nodes managed by a Control Plane (“master” in Mesos) but, like Nomad, it can run a variety of different workload types (including Serverless and cron). Like Kubernetes, it allows for a great deal of flexibility but in doing so sacrifices some usability. Furthermore, you need to run and manage your own hosts.
The biggest potential issue with Mesos is the project itself, which has stagnated over the past year. There have been some indications that development may start again soon though, so watch this space!
Summary of container orchestrators
So, which container orchestrator will you use? Here is a quick summary of all five options:
As the above shows, there are a lot of pros and cons for each system and no single option will fit with everyone. Choosing the right orchestrator is an especially important decision, given how instrumental it is to serve your applications, so it’s important to take the time and do everything you can to get it right the first time around.
Just starting out?
If you’re just starting out with containerisation, or if you only have modest requirements, then some systems may not be a good fit. In these instances, there are lighter-weight options for container runtimes available, which will give similar advantages, without the extra costs of managing the orchestration system itself. You can read all about these in my Container Orchestration: Lightweight Container Runtimes article.
If you’re looking for assistance in choosing the right container orchestrator, we’re more than happy to help. Softwire has extensive experience in a variety of container platforms and architecting next-generation tailored systems. Please tell us about your project and let’s have a chat.