Kubernetes - Component Overview
What is Kubernetes?
Kubernetes is at its core a container orchestrator. Kubernetes, or K8S, is used to control containers across various nodes (workers), and offers features such as load balancing, automated scaling for increases/decreases in demand, and node fault monitoring (taking faulty nodes out of load), amongst other features.
Kubernetes Components
Kubernetes runs from a master node, also known as a control plane. The control plane is made up of various components that Kubernetes uses to perform its job;
API Server
The API server is the front end for K8S. Users, admins, devices and more, all interact with K8S via the API server.
etcd
etcd is a key-value store that's used by Kubernetes to store all data used to manage the cluster.
Scheduler
The Kubernetes scheduler's main job is to distribute pods to the available workers (nodes) based on the resources they need and the constraints or rules in place. It doesn't manage node creation or deletion, only where to place pods within the existing cluster.
Controller
The Kubernetes controller is responsible for managing the overall state of the cluster by monitoring the desired state (as defined in specs like deployments) and making adjustments to ensure the actual state matches, such as ensuring the correct number of pods are running, scaling applications, or handling node failures.
Container Runtime
The container runtime is the underlying software that's used to run containers - ie docker, CRI-O, RKT
Kubelet
The kubelet is a Kubernetes agent that runs on each node and ensures containers in pods are running and healthy, based on the instructions it receives from the control plane. Kubelet communicates with the API server on the master node to report data about the pods on its worker, which is then used by the Controller for its operations.
PODs
A pod is the smallest deployable unit in Kubernetes, serving as an environment where one or more containers run together and share resources like network and storage. Although pods can contain multiple containers, it's usually best to have one container per pod to allow for better scalability, fault isolation, and resource management. For example, in a WordPress setup, you might have an Nginx/PHP container in one pod and a MySQL container in another pod. This separation ensures that if MySQL crashes or Nginx/PHP encounters a limit (like reaching php_max_children), Kubernetes can manage, restart, or scale each component independently without affecting the other.
No Comments