✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Node Runtime Boundary

Kubernetes Node Runtime Boundary defines the limits and constraints on a node's execution environment within a Kubernetes cluster.

Kubernetes Node Runtime Boundary is the conceptual line that separates what a node is responsible for deciding and executing locally from what the cluster's control plane is responsible for deciding centrally, and it is this boundary that explains why Kubernetes can scale to large clusters and tolerate control plane disruption without every node ceasing to function. Everything on the node side of this boundary — the kubelet, the container runtime, kube-proxy, and the local state they maintain — operates with a degree of autonomy, continuing to run already-placed workloads and enforce already-known policy even when communication with the control plane is temporarily lost.


What Lies on Each Side of the Boundary

Control Plane Responsibilities

Decisions requiring a cluster-wide view — which node a new Pod should be scheduled to, whether a Deployment needs more replicas, how a Service's endpoints should be computed from currently healthy Pods across all nodes — belong to the control plane, since only components with visibility into the entire cluster's state can make these decisions correctly.

Node-Local Responsibilities

Once a Pod has been assigned to a specific node, everything about actually running it — creating the sandbox, pulling images, starting containers, evaluating probes, enforcing resource limits, handling restarts — falls on the node side of the boundary and is carried out by the kubelet and container runtime without further control plane involvement for the ordinary course of that Pod's lifecycle.


Why the Boundary Exists

Fault Isolation

By keeping already-scheduled workload execution independent of continuous control plane availability, a control plane outage degrades a cluster's ability to make new placement or scaling decisions without immediately affecting Pods that are already running, which is a deliberate design choice that limits the blast radius of control plane failures.

Scalability Through Local Autonomy

Because each node reconciles its own assigned Pods against local runtime state independently, the control plane does not need to micromanage container-level execution details for every Pod across every node continuously; it only needs to communicate desired state changes and receive periodic status updates, which is far less demanding than driving execution directly and is a major reason the architecture scales to large node counts.


How the Boundary Is Crossed

The API Server as the Sole Crossing Point

All communication across the boundary passes through the API server: nodes never communicate directly with each other or with control plane components outside of it, and the kubelet's watches for assigned Pods, its status updates, and its heartbeats are the only channels through which node-local state and control-plane desired state stay synchronized.

Asynchronous, Eventually Consistent Synchronization

Because this communication is asynchronous — the kubelet observes changes via a watch rather than being directly invoked by the control plane — the node's actual state and the control plane's recorded desired state are never guaranteed to be instantaneously identical; the boundary is crossed continuously through this watch-and-reconcile pattern rather than through synchronous command execution.


Consequences of the Boundary for Failure Handling

Control Plane Outage Behavior

During a control plane outage, nodes continue running their existing Pods, kube-proxy continues enforcing already-programmed Service rules, and the kubelet continues restarting failed containers according to already-known restart policy, but no new Pods can be scheduled, no Deployment scaling can occur, and no Service endpoint changes can propagate, since all of those require control plane components that are unavailable.

Node Isolation Behavior

Conversely, when a single node loses connectivity to the control plane while the control plane itself remains healthy, that node's kubelet continues operating its existing Pods locally, while the control plane, unable to receive further status updates or heartbeats from that node, eventually marks it unreachable and, after appropriate grace periods, begins treating its Pods as needing replacement elsewhere, illustrating how the boundary allows the two sides of the system to reach independent, locally consistent conclusions during a partition before eventually reconciling once connectivity is restored.


Design Implications for Extending Kubernetes

Where Extensions Must Live

Understanding this boundary clarifies where a given piece of cluster functionality must be implemented: logic that needs a cluster-wide view, such as custom scheduling or autoscaling, belongs in control-plane-side controllers or scheduler plugins, while logic that needs to act on a specific node's real-time execution state, such as custom device management or node-local security enforcement, belongs in node-side agents like device plugins or CNI/CSI drivers operating within the kubelet's own extension points.