Kubernetes (also known as K8s) is an open-source container orchestration system for scheduling and automating deployment, scaling, and management of containerized applications. Originally designed by Google, the Cloud Native Computing Foundation (CNCF) now maintains this project.
According to CNCF, Kubernetes is a mainstream technology for running distributed applications in the cloud with 96% of organizations either using or evaluating it in its 2021 survey. Organizations benefit from improved scalability and availability through autoscaling resources, portability across infrastructure hosted on-premises or on public or hybrid private clouds, resiliency by ensuring that clusters always function, and much more.
To deliver these benefits, Kubernetes runs workloads by placing containers into pods that run on nodes in a cluster.
A container is a lightweight, ready-to-run software package, that includes everything needed to run an application: the code and any runtime it requires, application and system libraries, and other application dependencies. Containers are similar to virtual machines (VMs) with one very important difference. VMs virtualize at the hardware level while containers virtualize at the operating system level. This is what allows containers to be portable across clouds as well as operating system distributions.
Container(s) run in a pod, the smallest execution unit in Kubernetes. Pods are ephemeral (temporary) by nature, if a pod (or the node it executes on) fails, Kubernetes can automatically create a new replica of that pod to continue operations.
A Kubernetes node is the physical or virtual machines in a cluster (a set of nodes) that executes workloads for one or more containers. Its purpose is to expose compute, networking and storage resources.
Each Kubernetes node includes a container runtime, a Kubelet and a Kube-Proxy:
- A container runtime such as Docker, rkt, and runC manages the container lifecycle, creating, running and destroying containers as needed.
- The Kubelet is the Kubernetes agent that interacts with the container runtime to perform operations such as starting, stopping and maintaining containers.
- Kube-Proxy is a network proxy and load balance that orchestrates the network to route requests to the appropriate pods.