Cluster components
- Node - worker machine (virtual or physical) that runs containerized applications via Pods
- Control plane - manages Nodes and Pods
Control plane components
kube-apiserver
- exposes the API
- front end for the K8s control plane
- scales horizontally
cloud-controller-manager
- embeds cloud specific control logic
- links K8s cluster with cloud provider’s API
- runs controllers specific to the underlying cloud provider
- these controllers can have cloud provider dependencies: node controller, route controller, service controller
kube-controller-manager
- runs controller processes
- logically each controller is a separate process but they are all compiled into a single binary and run in a single process
- node controller, replication controller, endpoints controller, service account & token controllers
etcd
- consistent and highly-available key value store for all cluster data
kube-scheduler
- watches for newly created Pods and selects a node for them to run on
Node components
kubelet
- takes a set od PodSpecs and ensures that the containers described in those PodSpecs are running (in a Pod) and healthy
kube-proxy
- implements part of the Service concept by maintaining network rules on nodes (using OS packet filtering layer or forwarding traffic by itself)
container runtime
- software responsible for running containers
- e.g. Docker, containerd, CRI-O
Addons
- use K8s resources (DaemonSet, Deployment, etc) to implement cluster features
- namespaced addon resources belong within
kube-system
namespace
Selected addons:
- DNS - should be in all K8s clusters; containers automatically include this DNS server in their DNS searches (via
/etc/resolv.conf
) - WebUI (Dashboard) - web based UI
- Container Resource Monitoring - generic time-series metrics
- Cluster-level Logging