Container orchestration is the automation of much of the operational effort required to run containerized workloads and services. This includes a wide range of things software teams need to manage a container’s lifecycle, including provisioning, deployment, scaling (up and down), networking, load balancing and more.
Containers are a method of building, packaging and deploying software. They are similar to but not the same thing as virtual machines (VMs). One of the primary differences is that containers are isolated or abstracted away from the underlying operating system and infrastructure that they run on. In the simplest terms, a container includes both an application’s code and everything that code needs to run properly.
Because of this, containers offer many benefits, including:
Because containers are lightweight and ephemeral by nature, running them in production can quickly become a massive effort. Particularly when paired with microservices—which typically each run in their own containers—a containerized application might translate into operating hundreds or thousands of containers, especially when building and operating any large-scale system.
This can introduce significant complexity if managed manually. Container orchestration is what makes that operational complexity manageable for development and operations—or DevOps—because it provides a declarative way of automating much of the work. This makes it a good fit for DevOps teams and culture, which typically strive to operate with much greater speed and agility than traditional software teams.
Container orchestration is key to working with containers, and it allows organizations to unlock their full benefits. It also offers its own benefits for a containerized environment, including:
Kubernetes is a popular open source platform for container orchestration. It enables developers to easily build containerized applications and services, as well as scale, schedule and monitor those containers. While there are other options for container orchestration, such as Apache Mesos or Docker Swarm, Kubernetes has become the industry standard. Kubernetes provides extensive container capabilities, a dynamic contributor community, the growth of cloud-native application development and the widespread availability of commercial and hosted Kubernetes tools. Kubernetes is also highly extensible and portable, meaning it can run in a wide range of environments and be used in conjunction with other technologies, such as service meshes.
In addition to enabling the automation fundamental to container orchestration, Kubernetes is considered highly declarative. This means that developers and administrators use it to essentially describe how they want a system to behave, and then Kubernetes executes that desired state in dynamic fashion.
In the most basic sense, the term “multi-cloud” refers to an IT strategy of using two or more cloud services from two or more providers. In the context of containers and orchestration, multi-cloud usually means the use of two or more cloud infrastructure platforms, including public and private clouds, for running applications. Multi-cloud container orchestration, then, refers to the use of an orchestration tool to operate containers across multi-cloud infrastructure environments—instead of running containers in a single cloud environment.
Software teams pursue multi-cloud strategies for different reasons, but the benefits can include infrastructure cost optimization, flexibility and portability (including reducing vendor lock-in), and scalability (such as dynamically scaling out a cloud from an on-premises environment when necessary.) Multi-cloud environments and containers go hand-in-hand because of the latter’s portable, “run anywhere” nature.
Docker is a specific platform for building containers, including the Docker Engine container runtime, whereas container orchestration is a broader term referring to automation of any container’s lifecycle. Docker also includes Docker Swarm, which is the platform’s own container orchestration tool that can automatically start Docker containers.