There’s a wide and growing acceptance that containers are replacing operating systems as the deployment target for application components. While application modules were previously designed to be installed upon a specific version of an operating system on a particular hardware platform, they are now increasingly being designed to run within a virtualized representation of an operating system—most frequently within a Docker container.
The containerization of applications allows for a reduction in operating system dependencies and allows distributed applications to be managed more effectively across the multiple physical machines in a cluster.
However, containers offer only part of the solution for distributed systems; we also need a way to schedule, load balance, monitor, and coordinate all the containers that comprise a complex distributed application. This is the role of container orchestration solutions.
Orchestration allows containerized applications to run across multiple nodes—it coordinates the launching and provisioning of containers and performs load balancing to ensure optimal utilization of cluster resources. It manages rolling upgrades, elastic scaling, directory services, authentication and authorization services, and so on.
Container-based cloud platforms seem destined to compete with—if not entirely supplant—the platform- and infrastructure-based cloud services in use today. IaaS (infrastructure-as-a-service) clouds such as Amazon AWS provide the user with virtual machine images that can be used as the building blocks for cloud applications, while PaaS (platform-as-a-service) clouds provide an integrated application platform. IaaS enables maximum flexibility at the cost of high administrative overhead. PaaS offers low administrative overhead at the cost of lock-in to the vendor’s application stack. Containers-as-a-service (CaaS)—enabled by container orchestration—offers a best-of-both-worlds solution: flexibility but with built-in elasticity and automated administration.
Kubernetes is arguably the most well-known and popular container orchestration framework. It was originally developed by Google for managing its internal Linux containers and was then modified to work with Docker and open sourced in 2015.
Docker Swarm is Docker’s own solution for provisioning a cluster of Docker engines. It presents resources from the cluster as a single virtualized Docker engine. Docker Datacenter provides a fuller featured orchestration solution with attributes comparable to Kubernetes. The Docker solution has the advantage of being API-compatible with base Docker, and many applications will require little or no migration to a Docker Datacenter deployment. However, it is not as proven at scale as Kubernetes.
Mesos—originally part of the Berkeley Data Analytic Stack that developed Apache Spark—provides some similar capabilities, though it was originally designed as a cluster manager to support big data-type workloads such as might be required by Hadoop. However, it supports the orchestration of Docker images, as well as integration with Kubernetes. Mesosphere—a Bay Area startup—offers a certified version of Mesos-branded DC/OS (Datacenter Operating System).
Amazon’s EC2 container service (ECS) supports orchestration of Docker containers in an Amazon AWS context. It’s tightly coupled with Amazon AWS, implying a high degree of vendor lock-in. However, it’s otherwise very functional.
While Amazon provides a proprietary container service, Microsoft—the other big cloud provider—provides a container service that abstracts the underlying orchestration engine. Azure container services support Kubernetes, Docker Swarm, or Mesosphere DC/OS.
In the mainframe and client-server eras, operating systems were of incredible significance—Windows versus Unix versus Linux defined some of the great struggles for dominance during the 1990s and early 2000s. However, in the modern era of distributed systems, the operating system that runs an individual server is not that much more significant than the BIOS that runs the motherboard inside that server. It’s the layer that coordinates the activities of software running across the cluster that is the real “operating system” of our era. As with operating systems, it is unlikely that there will be one and only one winner of this battle, although for now, Kubernetes seems to have the most traction.
Guy Harrison,a software professional with more than 20 years of experience, is a partner at Toba Capital and the author of Next Generation Databases (Apress). Contact him at firstname.lastname@example.org.