The definitive breakdown of how Kubernetes clusters work — Control Plane (brain), Worker Nodes (muscle), and the communication flows between them. Critical for the ~25% “Cluster Architecture” CKA domain.Source: CKA Day 25
The Two Halves of a Cluster
Half
Role
Analogy
Control Plane
Makes global decisions, detects & responds to cluster events
Validates all requests (auth, authz, admission), serves the REST API, is the only component that writes to etcd
Scaling
Can be horizontally scaled behind a load balancer for HA
CKA Exam Relevance
If API Server is down → cluster is frozen. You must know how to check its status and certificates.
Authentication & Authorization: Every request to the API server passes through TLS termination → Authentication → Authorization → Admission Control before reaching the resource. The API server supports multiple authentication plugins (X.509 client certificates, bearer tokens, OIDC, webhook) and authorization modules (Node, ABAC, RBAC, Webhook). See Kubernetes Authentication & Authorization for the full request pipeline. Source: CKA Day 22
Direct REST API Access: The API server is a standard HTTPS REST endpoint. Any client — kubectl, curl, or a custom SDK — can call it directly using a valid client certificate for mutual TLS. For example:
etcd peers and etcd clients communicate over mutual TLS (see TLS Fundamentals)
Consistency
Raft consensus algorithm — requires majority (quorum) for writes
CKA Exam Relevance
Backup (etcdctl snapshot save) and restore (etcdctl snapshot restore) are guaranteed exam tasks. Detailed commands and DR patterns are in Kubernetes ETCD Backup and Restore.
Watches for unscheduled pods and assigns them to the best node
Scheduling Factors
Resource requests/limits, taints/tolerations, node affinity/anti-affinity, node conditions, data locality
Extensibility
Custom schedulers can be written and specified per-pod via schedulerName
CKA Exam Relevance
You may need to configure PriorityClass, PodTopologySpread, or debug why a pod is stuck Pending.
The scheduler uses resource requests as part of node fitting. If a Pod requests more memory or CPU than any node has available, the Pod remains Pending and kubectl describe pod reports insufficient resources. Resource limits are enforced later at runtime by kubelet/container runtime; exceeding a memory limit produces OOMKilled. Source: CKA Day 16
4. kube-controller-manager
Attribute
Detail
Role
Runs continuous controller loops that reconcile actual state with desired state
If a pod dies → creates replacement. If a node fails → marks NotReady and reschedules pods. The Service Account & Token controller ensures every Namespace has a default ServiceAccount and manages token Secret lifecycle.
CKA Exam Relevance
Understand that controllers are the “automation” behind Kubernetes self-healing.
5. cloud-controller-manager
Attribute
Detail
Role
Bridges Kubernetes with cloud-provider APIs (AWS, GCP, Azure)
On-prem clusters often lack this. Managed clusters (EKS, GKE, AKS) rely on it heavily.
Worker Node Components (The Muscle)
1. kubelet
Attribute
Detail
Role
Node agent — registers the node, reports status, ensures pods are running
What It Does
Receives PodSpecs from API Server, instructs Container Runtime to create/maintain/destroy containers
Health
If kubelet stops → node becomes NotReady; existing pods keep running but no new ones scheduled
CKA Exam Relevance
Debugging NotReady nodes often starts with checking kubelet: systemctl status kubelet, journalctl -u kubelet
2. kube-proxy
Attribute
Detail
Role
Network proxy — maintains network rules for Service-to-Pod communication
Implementation
iptables mode (default) or IPVS mode (better performance at scale)
What It Does
Routes traffic hitting a Service IP to one of the healthy backend pods
CKA Exam Relevance
If Services aren’t routing → check kube-proxy logs and iptables/IPVS rules.
3. Container Runtime
Attribute
Detail
Role
Actually creates and runs containers
CRI Standard
Kubernetes speaks to runtimes via the Container Runtime Interface
Common Runtimes
containerd (default in modern clusters), CRI-O (Red Hat), Docker (deprecated as direct runtime)
CKA Exam Relevance
Use crictl to inspect containers when docker CLI doesn’t work. crictl ps, crictl logs, crictl exec.
Communication Flows
Creating a New Pod (User Request)
1. User runs: kubectl apply -f pod.yaml
│
▼
2. kubectl sends YAML to kube-apiserver
│
▼
3. API Server validates, writes PodSpec to etcd
│
▼
4. kube-scheduler watches etcd, sees unscheduled pod
│
▼
5. Scheduler selects best node, writes node assignment back to etcd
│
▼
6. API Server notifies kubelet on selected node
│
▼
7. kubelet instructs Container Runtime to pull image and create container
│
▼
8. Container Runtime reports status back to kubelet → API Server → etcd
│
▼
9. kube-proxy updates iptables rules so Service can route to new pod
Self-Healing When a Pod Dies
1. kubelet detects container exited (via runtime health checks)
│
▼
2. kubelet reports pod status to API Server → etcd
│
▼
3. kube-controller-manager (Replication Controller) sees mismatch:
desired replicas = 3, actual running = 2
│
▼
4. Controller creates replacement pod spec, writes to etcd
│
▼
5. Scheduler assigns new pod to available node
│
▼
6. kubelet creates replacement container
│
▼
7. kube-proxy updates iptables rules so Service routes to new pod
│
▼
8. Cluster returns to desired state (3 replicas running)
Service Routing Note: When the replacement Pod gets a new IP, the Endpoints controller automatically updates the Service’s backend list. kube-proxy then programs new iptables rules so traffic to the Service IP is forwarded to the new Pod. Clients using the Service never notice the change. Source: CKA Day 9
Default Namespaces and Component Placement
Kubernetes automatically creates four Namespaces on cluster bootstrap. The Control Plane components themselves run as Pods (in most modern installations) inside the kube-system Namespace:
Exam Trap: When asked to “list all pods in the cluster,” remember that kubectl get pods only shows the default Namespace. Use kubectl get pods -A or kubectl get pods --all-namespaces to see system components in kube-system. Source: CKA Day 10
Static Pods and Control Plane Bootstrapping
Static Pods are Pods managed directly by the kubelet on a node, without any API server involvement. This is the mechanism that bootstraps the control plane itself. On a kubeadm cluster, the files in /etc/kubernetes/manifests on the control plane node define the kube-apiserver, kube-scheduler, and kube-controller-manager as Static Pods. The kubelet reads these manifest files and creates the containers before the API server is even online. Source: CKA Day 27
Key Insight: Because Static Pods are node-local, you cannot delete them with kubectl delete — the kubelet will recreate them instantly. To remove a Static Pod, you must delete its manifest file from the node filesystem. Source: CKA Day 13
Aspect
Static Pod
Regular Pod
Managed by
kubelet (node-local)
API server + scheduler
Manifest location
Node filesystem (/etc/kubernetes/manifests)
etcd (via API server)
Scheduler involved
❌ No
✅ Yes
kubectl delete
❌ Recreates immediately
✅ Deletes permanently
Use case
Control plane components
Application workloads
Pods vs. Containers
Aspect
Docker Container
Kubernetes Pod
Unit of Deployment
Single container
One or more containers
Networking
Isolated (by default)
Shared IP, shared port space; containers talk via localhost
Storage
Isolated volumes
Shared volumes between containers
Lifecycle
Managed by Docker daemon
Managed by kubelet + controllers
Scaling
Manual
Managed by ReplicaSet/Deployment
Key Insight: You almost never create bare Pods in production. You create Deployments that manage ReplicaSets that manage Pods.
High Availability (HA) Control Plane
For production clusters, the Control Plane must survive node failures:
Component
HA Strategy
kube-apiserver
Multiple instances behind a load balancer
etcd
3+ nodes in a Raft cluster (tolerates (n-1)/2 failures)
kube-scheduler
Multiple instances, only one active leader at a time (leader election)
kube-controller-manager
Multiple instances, only one active leader
CKA Tip: The exam typically uses a single control plane node, but you must understand HA concepts for real-world operations.
Exam-style hands-on tasks for this topic. Complete each task before reviewing the solution. Time yourself — CKA tasks average 5–7 minutes.
Task 1: List Control Plane Components and Ports
List all control plane components and their ports.
Requirements: Include kube-apiserver, etcd, scheduler, controller-manager.
Verification:kubectl get pods -n kube-system or node-local crictl psSolution:
# Control plane components and default ports# kube-apiserver: 6443# etcd: 2379 (client), 2380 (peer)# kube-scheduler: 10259# kube-controller-manager: 10257# kubelet: 10250# kube-proxy: 10256kubectl get pods -n kube-system# OR on control plane node:crictl ps | grep -E "apiserver|etcd|scheduler|controller"netstat -tlnp | grep -E "6443|2379|2380|10259|10257"
Task 2: Identify the Scheduler
Identify which component is responsible for scheduling and verify it’s running.
Requirements: Use kubectl and node-local tools.
Verification:kubectl get pods -n kube-system -l component=kube-schedulerSolution:
Task 3: Trace a Request Flow
Draw the request flow: kubectl → API server → etcd → scheduler → kubelet.
Requirements: Describe each hop and which component writes to etcd.
Verification: Conceptual / verbal explanation.
Solution:
# 1. kubectl apply -f pod.yaml# 2. API server validates auth/authz/admission, writes PodSpec to etcd# 3. kube-scheduler watches etcd, sees unscheduled Pod, selects node, writes node assignment to etcd# 4. API server notifies kubelet on selected node# 5. kubelet instructs container runtime to create the container# 6. kubelet reports status back to API server → etcd# 7. kube-proxy updates iptables rules for Service routing