Docker containers have been taking my world by storm for the past several years, again changing the way I think about infrastructure and deploying applications. With containers, I can have one Linux instance run several web sites, a database server (or more) and a key-value store, all without worrying about conflicts or unsatisfied dependencies. Each container has all it needs. And when software is updated, I can build a new container, with exactly the same installed packages as production, test it locally or in a CI process, all before it even thinks about touching production.
With the ease of creating containers and best practices centering around only including one process per container, the number of containers in an environment can skyrocket. In the case where you need redundancy, in a typical or un-orchestrated container environment, that means multiple, identical hosts behind a load balancer.
To avoid these and other pitfalls of containers, orchestration is needed. There are several container orchestration platforms, including Kubernetes, Docker Swarm and Amazon ECS. Orchestration platforms basically manage a group of servers (physical or virtual) and make sure the correct number and type of containers you define are always running and accessible somewhere on that group of servers.
Kubernetes was originally based on what Google uses internally to accomplish the orchestration of their version of containers. They took the lessons learned from their years of doing it and created a new open source platform. Other large companies, such as Red Hat and CoreOS, along with hundreds or thousands of individual and corporations contributed to making Kubernetes what it is today at version 1.8. And they show no sign of slowing.
Kubernetes is part of the Cloud Native Computing Foundation, along with lots of other hand selected open source projects. They are all designed to work in a high scalable, highly dynamic cloud environment. All major cloud vendors, including Amazon, Google and Microsoft have joined this foundation. Azure and GCP both have a managed Kubernetes cluster available as one of their cloud offerings and AWS is anticipated to do the same at re:Invent this year.
Kubernetes is being designed to scale to thousands and thousands of nodes in data centers around the world. This could allow for Kubernetes clusters that span different cloud providers or a giant cluster within the same provider’s worldwide network. While Amazon ECS and Docker Swarm are good products that have their place in the world, I think Kubernetes is the de facto standard and it’d take a good argument for me to look at another product.
Want to talk about how we can work together?
Ryan can help