Now that we have learned the basics of container images, including how to build and store an image and run a container, we’ll talk about container orchestration so that we can better understand how to create complex environments of many running containers. Everyone’s container journey starts with one container. You started this way in our last module! But of course, things don’t stay this way for long. Over time, new applications are written and deployed, applications grow and take on new components that are deployed independently, and projects spread across the globe to increase availability. That one initial container inevitably becomes many containers. At first, that growth is easy to handle. But soon it is overwhelming. Chaos reigns! As your container footprint grows and evolves, a tool for managing the lifecycle of your containers becomes increasingly necessary. Container orchestration encompasses a variety of topics; here are six that are particularly important. Container orchestration aids in the provisioning and deployment of containers to make this a more automated, unified, and smooth process. Container orchestration also ensures that containers are redundant and available so that applications experience minimal downtime. It scales containers up and down to meet demand, and it load-balances requests across instances so that no one instance is overwhelmed. It handles the scheduling of containers to underlying infrastructure. Lastly, container orchestration tools can perform health checks to ensure that applications are running, and these tools can take necessary actions when checks fail. While these are just some of the aspects of the container lifecycle that are controlled or automated by container orchestration tools, they're the ones that we will focus on in the ensuing lessons and labs. Although several container orchestration tools exist, Kubernetes has established itself as the premier platform of choice. The official Kubernetes documentation describes Kubernetes as “a portable, extensible, open-source platform for managing containerized workloads and services that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.” This description highlights a few key points about Kubernetes. First, Kubernetes is open source software. Contributors from all over the world, from a variety of companies and industries, contribute to Kubernetes, and the code, roadmap, and much more can be found online. Kubernetes is designed specifically as a container orchestration platform. Kubernetes facilitates declarative management, a topic we will get into shortly. In brief, declarative management means that a desired state can be expressed–for example, the number of replicas of a specific application–and Kubernetes will actively work to ensure that the observed state matches the desired state. There is a large and growing ecosystem around Kubernetes. Many other open and proprietary projects exist to facilitate and further your use of Kubernetes. And finally, Kubernetes is widely available, and has positioned itself as the de facto choice for container orchestration. When some people hear the term “platform as a service,” or “PaaS,” they might think of an opinionated, all-inclusive platform. Such platforms can be quite capable and provide a lot of services out of the box. But their opinionated nature can also be more restrictive as it prevents users from adopting certain other solutions that they might want. In contrast, Kubernetes provides a flexible model that maintains choice for users wherever appropriate. For example, Kubernetes does not limit the types of applications that can run on it. Whatever languages and frameworks that you choose to use are suitable, as long as they can be containerized. If an application runs in containers, it can run on Kubernetes. Kubernetes also does not provide Continuous Integration/Continuous Deployment pipelines to build applications or deploy source code. Such tools can be chosen and leveraged by organizations as they desire. Similarly, logging, monitoring, and alerting solutions are not prescribed. Third-party or open source tools can be chosen and integrated. Now that we have learned about container orchestration, and specifically what Kubernetes is and isn’t, let’s dig into the specifics of the Kubernetes architecture. You should now understand why container orchestration is needed and recognize today’s most popular container orchestration tool, Kubernetes. You should also have a high-level understanding of what Kubernetes is and what it is not. With that information as a foundation, we’ll dig into the specifics of the Kubernetes architecture in the next video