Kubernetes Architecture Explained: Control Plane and Nodes

Khimananda Oli 8 min read Virtualization
Kubernetes Architecture Explained: Control Plane and Nodes

By Khimananda Oli | Last reviewed: August 2026

Debugging cluster failures requires understanding exactly how Kubernetes architecture explained: control plane and nodes interact to maintain desired state. The system is not a monolith but a collection of specialized processes that communicate via REST APIs and watch loops to reconcile configuration with reality. Whether you are deploying on AWS EKS or bare metal in Kathmandu, grasping this separation between decision-making logic and execution machinery is fundamental for operating resilient infrastructure.

What Are the Core Components of Kubernetes Architecture Explained: Control Plane and Nodes?

The control plane acts as the cluster's brain, hosting the global state and decision-making logic. In production environments like those detailed in my Amazon EKS practical guide, these components often run as managed services, but understanding their individual roles remains critical for troubleshooting. The architecture follows a strict hub-and-spoke model where every component communicates exclusively through the API server; no component talks directly to another.

Control PlaneAPI ServeretcdSchedulerController MgrWorker Node 1Worker Node N
High-level view of Kubernetes architecture explained: control plane and nodes with API server as the central coordination point

The API server (kube-apiserver) is the single entry point for all cluster operations. It validates requests, authenticates users, and persists state changes to etcd. Crucially, it serves as a passive data store that other components watch for changes rather than actively pushing commands. This design enables horizontal scaling and loose coupling.

etcd is the distributed key-value store holding all cluster state. It uses Raft consensus to ensure consistency across multiple replicas. Never store application data here; etcd is strictly for Kubernetes metadata. Loss of etcd without backup means total cluster loss, which is why automated snapshots are non-negotiable in any compliance-ready environment.

The scheduler watches for newly created pods with no assigned node and selects optimal placement based on resource requests, affinity rules, taints, and tolerations. It does not create containers; it merely updates the pod object with a nodeName field. The actual binding happens asynchronously through the API server.

The controller manager runs dozens of independent controllers (replica-set, deployment, node, endpoint) that each implement a specific reconciliation loop. Each controller watches the API server for relevant objects and takes corrective action when observed state diverges from desired state. This eventual consistency model is what gives Kubernetes its self-healing properties.

How Do Worker Node Components Execute Workloads?

Worker nodes are the execution layer where containers actually run. Unlike the control plane, nodes can scale horizontally without shared state beyond what the API server provides. Understanding node internals helps explain why certain failures manifest as pending pods or network timeouts, topics I cover when discussing debugging CrashLoopBackOff errors.

  1. kubelet: The primary node agent that registers the node with the API server and ensures containers described in PodSpecs are running. It pulls images, mounts volumes, executes liveness probes, and reports node status. If the kubelet stops, the node becomes NotReady after the default grace period, triggering pod eviction elsewhere.
  2. Container Runtime: Since the dockershim removal, Kubernetes uses the Container Runtime Interface (CRI). Common runtimes include containerd and CRI-O. The runtime handles image pulling, container lifecycle management, and storage drivers. You interact with it indirectly through crictl for debugging.
  3. kube-proxy: Maintains network rules on each node to enable service abstraction. Depending on the mode (iptables, IPVS, or nftables), it creates routing entries so traffic to a ClusterIP reaches healthy backend pods. Modern clusters increasingly use eBPF-based solutions like Cilium for better performance, as noted in my Cilium eBPF networking guide.

A common mistake is assuming kube-proxy handles all networking. In reality, it only manages Service-to-Pod translation. Pod-to-Pod communication relies entirely on the CNI plugin (Calico, Flannel, Weave, etc.), which configures the underlying network fabric independently of kube-proxy.

How Does the Reconciliation Loop Drive State Management?

Kubernetes operates on a declarative model: you submit desired state, and the system continuously works to achieve it. This differs fundamentally from imperative scripting where you define exact steps. The reconciliation loop is the engine making this possible, involving tight feedback cycles between control plane and nodes.

User / GitOpsAPI Server + etcdController / SchedulerKubelet + RuntimeStatus Feedback Loop
Declarative reconciliation loop driving Kubernetes architecture explained: control plane and nodes state convergence

When you apply a Deployment manifest, the API server writes it to etcd. The Deployment controller detects this new object via a watch stream and creates ReplicaSet objects. The ReplicaSet controller then creates Pod objects with no nodeName. The scheduler picks up these unbound pods, evaluates constraints, and assigns them to nodes. Finally, the kubelet on the target node sees the assigned pod, pulls the image, starts the container, and reports Running status back to the API server.

This multi-stage indirection allows each component to fail independently. If the scheduler crashes, existing pods continue running because kubelets maintain local state. When the scheduler recovers, it resumes assigning pending pods. This resilience is why Kubernetes dominates orchestration despite its complexity.

# Verify the reconciliation chain in practice
kubectl get deploy nginx-deployment -o yaml | grep generation
kubectl get rs -l app=nginx --show-labels
kubectl get pods -l app=nginx -o wide
# Check if kubelet has acknowledged the pod assignment
kubectl describe pod <pod-name> | grep -A5 "Conditions"

How Do Control Plane and Node Architectures Differ Across Managed Services?

While the core components remain identical, managed Kubernetes services abstract different layers. Choosing between them depends on your team's operational capacity and compliance requirements. For teams in Nepal building SOC 2 compliant infrastructure, understanding these trade-offs prevents costly rearchitecture later.

AspectSelf-Managed (kubeadm/kubespray)AWS EKSGoogle GKEAzure AKS
Control PlaneYou manage HA, upgrades, etcd backupsFully managed, hidden from VPCManaged, optional autopilotFree tier available, managed
etcd AccessDirect access, full backup controlNo direct access, AWS-managed backupsNo direct access, snapshot APINo direct access, managed
Node ProvisioningManual or custom autoscalerEKS Managed Node Groups or KarpenterGKE Autopilot or NAPAKS Node Pools + Cluster Autoscaler
Upgrade ComplexityHigh, requires planning windowsModerate, version skew policies applyLowest, automated surge upgradesModerate, node pool rolling
Cost ModelOnly compute/storage costs$0.10/hr per cluster + compute$0.10/hr per cluster + computeFree control plane + compute
Best ForAir-gapped, extreme customizationAWS-native shops, enterprise complianceRapid iteration, AI/ML workloadsHybrid Azure/on-prem estates

In self-managed deployments using tools covered in my Kubespray deployment guide, you own every failure domain. This grants maximum flexibility for air-gapped government environments but demands deep expertise. Managed services shift control plane reliability to the vendor, letting your team focus on application delivery and node-level optimization.

Why Is Security Segmentation Critical Between Planes?

The boundary between control plane and nodes represents your most important security perimeter. Compromising a worker node should never grant control plane access. Implementing defense-in-depth here aligns with ISO 27001 controls and prevents lateral movement during incidents.

  • Network Policies: Restrict pod-to-pod communication so compromised applications cannot reach the API server directly unless explicitly allowed. Use default-deny policies with explicit allowlists.
  • RBAC Least Privilege: Service accounts mounted in pods should have minimal permissions. Avoid cluster-admin bindings; use namespace-scoped roles instead. Audit bindings regularly with kubectl auth can-i --list.
  • Node Isolation: Run control plane components on dedicated nodes tainted with node-role.kubernetes.io/control-plane:NoSchedule. This prevents user workloads from co-locating with sensitive processes.
  • Secret Encryption: Enable encryption at rest for etcd using AES-CBC or KMS providers. Without this, secrets stored in etcd are base64-encoded plaintext readable by anyone with etcd access.

For deeper implementation details, refer to my guide on securing clusters with RBAC. Remember that security is not a feature toggle but an architectural property baked into how components communicate and authenticate.

Operating Resilient Kubernetes Clusters in Production

Understanding Kubernetes architecture explained: control plane and nodes transforms troubleshooting from guesswork into systematic diagnosis. When pods stay pending, check scheduler logs and node resources. When services timeout, inspect kube-proxy rules and CNI health. When state drifts unexpectedly, verify controller manager leadership and etcd latency. Every symptom maps to a specific component interaction.

Start by validating your mental model against a live cluster using the commands provided above. Then audit your current setup against the security segmentation principles outlined here. If you need help designing or hardening a production-grade Kubernetes environment tailored to your compliance requirements, reach out to discuss your architecture.

Frequently Asked Questions

The control plane consists of kube-apiserver, etcd, kube-scheduler, and kube-controller-manager. These components manage cluster state, schedule pods, and maintain desired configuration across all nodes in the architecture.

Etcd stores all persistent cluster data as a distributed key-value store. It acts as the single source of truth for configuration, state, and metadata required by other control plane components to function correctly.

Kube-apiserver exposes a RESTful API that node agents like kubelet poll or watch. All communication is secured via TLS certificates, ensuring authenticated and encrypted traffic between the control plane and individual nodes.

No new pods get scheduled until recovery. Existing running workloads continue unaffected because nodes operate independently once assigned tasks, but scaling events and replacements halt until scheduler health restores.

Yes, single-node clusters often co-locate control plane and workloads using tools like k3s or minikube. Production environments should separate them to prevent resource contention and improve fault tolerance during high load.

Run at least three control plane nodes with an odd count to maintain etcd quorum. This ensures the cluster survives one node failure without losing consensus or becoming read-only during maintenance windows.

Kubelet manages pod lifecycle and reports node status to the API server. Kube-proxy maintains network rules and service routing on each node, enabling internal cluster networking and external access to services.

Use mutual TLS authentication with certificate rotation managed by cert-manager or kubeadm. Restrict API server access via RBAC policies and network policies to limit which nodes and users can interact with sensitive endpoints.

Slow disk I/O, insufficient memory, or excessive write operations cause latency. Monitor etcd metrics with Prometheus and use SSD storage with dedicated resources to maintain sub-millisecond response times under heavy API loads.

Node controller detects unresponsive nodes after grace period and marks them NotReady. Pod eviction triggers based on taints and tolerations, rescheduling affected workloads to healthy nodes automatically within configured timeouts.

Use kubectl get componentstatuses, Lens IDE, or k9s for real-time visualization. Grafana dashboards with kube-state-metrics provide architectural overviews showing control plane health and node resource utilization patterns.

Minimum 8GB RAM per control plane node for clusters under 100 nodes. Scale to 16GB or more for larger deployments, monitoring etcd and apiserver memory pressure to prevent OOM kills during peak operations.

Every cluster operation routes through kube-apiserver. Its failure halts all management actions including deployments, scaling, and node registration, making it the central bottleneck requiring redundancy and careful capacity planning.

Upgrade one node at a time using kubeadm upgrade apply followed by node drain and uncordon. Always backup etcd first and verify component compatibility matrices before proceeding with sequential rolling updates.

Configure structured JSON logging with log rotation for all control plane components. Ship logs to centralized systems like Loki or Elasticsearch with retention policies matching compliance requirements and troubleshooting needs.