Reading 18m read

Kubernetes Architecture at a Glance

Understand the two-plane architecture of Kubernetes — the Control Plane and Worker Nodes — and how they work together to schedule and run your workloads.

The Big Picture

A Kubernetes cluster is a set of machines called nodes. Every node plays one of two roles: it’s either part of the Control Plane or it’s a Worker Node (also called a data plane node).

┌─────────────────────── Kubernetes Cluster ──────────────────────────┐
│                                                                      │
│  ┌──────────────────── Control Plane ───────────────────────┐        │
│  │  kube-apiserver  │  kube-scheduler  │  controller-manager │       │
│  │               etcd (distributed state store)              │       │
│  └───────────────────────────────────────────────────────────┘       │
│                              │                                        │
│          ┌───────────────────┼───────────────────┐                   │
│          ▼                   ▼                   ▼                   │
│   ┌────────────┐    ┌────────────┐    ┌────────────┐                 │
│   │  Worker 1  │    │  Worker 2  │    │  Worker 3  │                 │
│   │  kubelet   │    │  kubelet   │    │  kubelet   │                 │
│   │ kube-proxy │    │ kube-proxy │    │ kube-proxy │                 │
│   │  Pod  Pod  │    │  Pod  Pod  │    │  Pod  Pod  │                 │
│   └────────────┘    └────────────┘    └────────────┘                 │
└──────────────────────────────────────────────────────────────────────┘

The Control Plane is the brain — it makes decisions about the cluster. The Worker Nodes are the muscle — they run your application containers.

The Control Plane

kube-apiserver — The Front Door

The API Server is the single entry point to Kubernetes. Every operation — deploying an app, listing pods, updating a config — goes through the API Server.

# All these commands talk to kube-apiserver
kubectl get pods
kubectl apply -f deployment.yaml
kubectl delete service my-app

Key characteristics:

  • Exposes the Kubernetes REST API
  • Validates and processes every request
  • The only component that reads from and writes to etcd
  • Stateless and horizontally scalable — run 3+ replicas for HA

etcd — The Source of Truth

etcd is a distributed, strongly-consistent key-value store. It holds the entire desired and observed state of your cluster.

Every object you create in Kubernetes — Pods, Deployments, Services, Secrets — is ultimately stored as a key-value pair in etcd.

/registry/pods/default/my-pod       → Pod spec + status
/registry/deployments/default/api  → Deployment spec
/registry/secrets/default/db-pass  → Encrypted secret

Key characteristics:

  • Uses the Raft consensus algorithm for distributed consistency
  • Only the API Server communicates with etcd directly
  • Back up etcd regularly — it contains your entire cluster state
  • Run on 3 or 5 nodes for HA (odd numbers prevent split-brain scenarios)

kube-scheduler — The Placement Engine

The Scheduler watches for newly created Pods that don’t yet have a node assigned. For each such Pod, it selects the optimal node using a two-phase process:

Phase 1 — Filtering: Remove nodes that cannot run the Pod (insufficient CPU/memory, taint mismatches, etc.)

Phase 2 — Scoring: Rank remaining nodes (prefer nodes with the most available resources, respect affinity rules, etc.)

The highest-scoring node wins; the scheduler writes the node assignment to etcd via the API Server.

kube-controller-manager — The Reconciliation Engine

The Controller Manager runs a collection of controllers — control loops that continuously watch the cluster state and work to make the actual state match the desired state you declared.

Observe current state

Compare with desired state

Take corrective action (if needed)

Repeat forever

Key built-in controllers:

  • Node Controller — notices when nodes become unreachable and marks their pods for rescheduling
  • ReplicaSet Controller — ensures the right number of pod replicas are always running
  • Deployment Controller — manages rolling updates and rollbacks
  • Job Controller — creates Pods for batch jobs and cleans up when they finish
  • EndpointSlice Controller — keeps Service endpoints up to date

cloud-controller-manager

In cloud environments (AWS, GCP, Azure), this component interfaces with cloud provider APIs to manage cloud-specific resources like load balancers, node lifecycle, and cloud storage volumes.

Worker Nodes

Worker nodes are where your application Pods actually run. Each node runs three components:

kubelet — The Node Agent

The kubelet is an agent running on every worker node. It watches the API Server for Pods assigned to its node and ensures those containers are running and healthy.

Responsibilities:

  • Pulls container images from registries
  • Starts and stops containers via the container runtime (containerd, CRI-O)
  • Runs liveness and readiness health checks
  • Reports node capacity and Pod status back to the API Server

kube-proxy — The Network Rules Engine

kube-proxy maintains iptables/ipvs rules on each node that implement Kubernetes Services. When you send traffic to a Service IP, kube-proxy’s rules route it to one of the live Pods backing that Service.

Container Runtime

The software that actually executes containers. Kubernetes supports any runtime implementing the Container Runtime Interface (CRI):

RuntimeNotes
containerdMost common; default in EKS, GKE, AKS
CRI-OLightweight; used by OpenShift
DockerVia cri-dockerd shim (legacy path)

How a Pod Gets Scheduled: The Full Flow

Let’s trace exactly what happens when you run kubectl apply -f deployment.yaml:

1. kubectl  ──────►  kube-apiserver   (HTTP POST /apis/apps/v1/deployments)

2.                    Validates + stores Deployment in etcd

3.                    Deployment Controller notices new Deployment
                      Creates ReplicaSet → Creates Pod objects (unscheduled)

4.                    kube-scheduler notices unbound Pods
                      Filters + scores nodes → binds Pod to best node
                      Writes node binding to etcd via API Server

5.                    kubelet on target node notices Pod assigned to it
                      Pulls container image → Starts container

6.                    kubelet reports Pod status: Running
                      API Server updates etcd

This entire flow completes in 1–3 seconds for most workloads.

Key Concepts to Know

Node

A physical or virtual machine participating in the cluster. Can be a Control Plane node (runs cluster management components) or a Worker Node (runs your application Pods).

Cluster

The complete set of Control Plane and Worker nodes managed together by Kubernetes.

Namespace

A logical partition of cluster resources. Think of it as a folder that groups related objects.

kubectl get pods -n production   # Only pods in 'production' namespace
kubectl get pods -n staging      # Only pods in 'staging' namespace
kubectl get pods -A              # All pods in all namespaces

Use namespaces to separate: environments (dev/staging/prod), teams, or multi-tenant applications sharing a single cluster.

Pod

The smallest deployable unit in Kubernetes. A Pod wraps one or more containers that share a network namespace and storage. We’ll cover Pods in depth in Module 4.

Key Takeaways

  • Every K8s cluster has a Control Plane (brain) and Worker Nodes (where apps run)
  • Control Plane: API Server (front door), etcd (state store), Scheduler (placement), Controller Manager (reconciliation loops)
  • Worker Nodes: kubelet (agent), kube-proxy (network rules), container runtime (runs containers)
  • The universal K8s loop: observe current state → compare with desired → take action → repeat
  • Full scheduling flow: kubectl → API Server → etcd → Controller Manager → Scheduler → kubelet
  • Namespaces provide logical partitioning within a single cluster

You now have a solid mental model of Kubernetes architecture. Take the quiz to test your understanding, then we’ll dive deep into each component.

Next Lesson