What is Kubernetes? Why is it called k8s? What makes it so popular? Let’s take a look. Kubernetes is an open-source
container orchestration platform. It automates the deployment, scaling, and
management of containerized applications. Kubernetes can be traced back to Google's
internal container orchestration system, Borg, which managed the deployment of
thousands of applications within Google. In 2014, Google open-sourced a version of Borg. That is Kubernetes. Why is it called k8s? This is a somewhat nerdy way
of abbreviating long words. The number 8 in k8s refers to the 8
letters between the first letter “k” and the last letter “s” in the word Kubernetes. Other examples are i18n for
internationalization, and l10n for localization. A Kubernetes cluster is a set of machines, called nodes, that are used to
run containerized applications. There are two core pieces in a Kubernetes cluster. The first is the control plane. It is responsible for managing
the state of the cluster. In production environments,
the control plane usually runs on multiple nodes that span
across several data center zones. The second is a set of worker nodes. These nodes run the containerized
application workloads. The containerized applications run in a Pod. Pods are the smallest
deployable units in Kubernetes. A pod hosts one or more containers and provides shared storage and
networking for those containers. Pods are created and managed by
the Kubernetes control plane. They are the basic building
blocks of Kubernetes applications. Now let’s dive a bit deeper
into the control plane. It consists of a number of core components. They are the API server, etcd,
scheduler, and the controller manager. The API server is the primary interface between
the control plane and the rest of the cluster. It exposes a RESTful API that allows
clients to interact with the control plane and submit requests to manage the cluster. etcd is a distributed key-value store. It stores the cluster's persistent state. It is used by the API server and
other components of the control plane to store and retrieve
information about the cluster. The scheduler is responsible for scheduling
pods onto the worker nodes in the cluster. It uses information about the resources
required by the pods and the available resources on the worker nodes
to make placement decisions. The controller manager is responsible for running
controllers that manage the state of the cluster. Some examples include the replication controller, which ensures that the desired number
of replicas of a pod are running, and the deployment controller, which manages
the rolling update and rollback of deployments. Next, let’s dive deeper into the worker nodes. The core components of Kubernetes that
run on the worker nodes include kubelet, container runtime, and kube proxy. The kubelet is a daemon that
runs on each worker node. It is responsible for communicating
with the control plane. It receives instructions from the control
plane about which pods to run on the node, and ensures that the desired
state of the pods is maintained. The container runtime runs the
containers on the worker nodes. It is responsible for pulling the
container images from a registry, starting and stopping the containers,
and managing the containers' resources. The kube-proxy is a network proxy
that runs on each worker node. It is responsible for routing
traffic to the correct pods. It also provides load balancing
for the pods and ensures that traffic is distributed evenly across the pods. So when should we use Kubernetes? As with many things in software
engineering, this is all about tradeoffs. Let’s look at the upsides first. Kubernetes is scalable and highly available. It provides features like self-healing,
automatic rollbacks, and horizontal scaling. It makes it easy to scale our
applications up and down as needed, allowing us to respond to
changes in demand quickly. Kubernetes is portable. It helps us deploy and manage
applications in a consistent and reliable way regardless of
the underlying infrastructure. It runs on-premise, in a public
cloud, or in a hybrid environment. It provides a uniform way to package,
deploy, and manage applications. Now how about the downsides? The number one drawback is complexity. Kubernetes is complex to set up and operate. The upfront cost is high, especially for
organizations new to container orchestration. It requires a high level of
expertise and resources to set up and manage a production Kubernetes environment. The second drawback is cost. Kubernetes requires a certain minimum level of resources to run in order to support
all the features we mentioned above. It is likely an overkill for
many smaller organizations. One popular option that strikes a
reasonable balance is to offload the management of the control plane
to a managed Kubernetes service. Managed Kubernetes services are
provided by cloud providers. Some popular ones are Amazon EKS, GKE
on Google Cloud, and AKS on Azure. These services allow organizations
to run the Kubernetes applications without having to worry about
the underlying infrastructure. They take care of tasks that require deep
expertise, like setting up and configuring the control plane, scaling the cluster, and
providing ongoing maintenance and support. This is a reasonable option for a mid-size
organization to test out Kubernetes. For a small organization, YAGNI - You ain’t
gonna need it - is our recommendation. If you would like to learn more about system
design, check out our books and weekly newsletter. Please subscribe if you learn something new. Thank you and we'll see you next time.