What Are Kubernetes Worker Nodes? Architecture, Components, and How They Run Workloads

Published: 2023-06-10
16 min read
Share:

Kubernetes worker nodes are the machines responsible for running your applications inside a Kubernetes cluster. Every Pod, container, and workload ultimately executes on one of these nodes after the control plane schedules it.

A modern worker node consists of several essential components:

  • kubelet for communicating with the Kubernetes API and managing Pods.
  • A CRI-compatible container runtime such as containerd or CRI-O.
  • Networking components including kube-proxy or modern eBPF-based implementations.
  • CNI plugins for Pod networking.
  • CSI drivers for persistent storage.

Whether deployed on physical servers, virtual machines, or managed cloud infrastructure, worker nodes provide the CPU, memory, networking, and storage resources that keep Kubernetes applications running. Understanding how worker nodes operate is fundamental to designing scalable, resilient, and production-ready Kubernetes environments.


Introduction

A Kubernetes cluster is divided into two primary layers:

  • The control plane, which makes scheduling and orchestration decisions.
  • Worker nodes, which execute those decisions by running application workloads.

The control plane decides what should run and where, while worker nodes are responsible for actually running containers and maintaining the desired state defined by Kubernetes resources.

Every Deployment, StatefulSet, Job, or DaemonSet eventually results in Pods being scheduled onto one or more worker nodes. These nodes continuously communicate with the control plane, report their health, manage containers, expose networking, and mount storage volumes.

In modern Kubernetes releases, worker nodes have become increasingly sophisticated. Many production clusters now use containerd instead of Docker, eBPF-powered networking instead of traditional kube-proxy implementations, and cloud-managed node pools that automatically scale based on workload demand.

This guide explains how Kubernetes worker nodes are structured, what software runs on them, and how they collaborate with the rest of the cluster to execute applications reliably.


What Is a Kubernetes Worker Node?

A worker node is a machine that contributes compute resources to a Kubernetes cluster and hosts one or more Pods.

A worker node can be:

  • A physical server
  • A virtual machine
  • A cloud instance
  • An edge device
  • A bare-metal host

Regardless of its infrastructure, every worker node provides resources such as:

  • CPU
  • Memory
  • Local storage
  • Network connectivity

The Kubernetes scheduler assigns Pods to suitable worker nodes based on available resources, scheduling rules, affinities, taints, tolerations, and other placement constraints.

Once assigned, the worker node is responsible for:

  • Pulling container images
  • Creating containers
  • Monitoring Pod health
  • Restarting failed containers
  • Reporting status back to the control plane
  • Managing attached storage
  • Providing network connectivity

Unlike the control plane, worker nodes do not make scheduling decisions. Instead, they continuously enforce the desired state defined by the Kubernetes API.

Note: The historical term "minion" is no longer used in Kubernetes documentation and should be avoided in modern technical content.


Worker Node vs Control Plane

Although both are essential components of a Kubernetes cluster, they serve very different purposes.

The control plane is responsible for cluster management, including:

  • Running the Kubernetes API Server
  • Scheduling Pods
  • Maintaining cluster state in etcd
  • Reconciling desired state
  • Managing controllers
  • Authenticating and authorizing requests

Worker nodes are responsible for workload execution, including:

  • Running Pods and containers
  • Monitoring application health
  • Executing lifecycle events
  • Managing local networking
  • Mounting storage volumes
  • Reporting node status
  • Enforcing Pod specifications

Think of the control plane as the brain of the cluster and worker nodes as the execution layer where applications actually run.


Worker Node Architecture

A Kubernetes worker node contains multiple software components working together to execute workloads.

A simplified architecture looks like this:

                Kubernetes API Server
                        │
                    kubelet
                        │
        ┌────────────────────────────────┐
        │        Worker Node             │
        │                                │
        │  containerd / CRI-O            │
        │                                │
        │  Pods                          │
        │     ├── Container A            │
        │     ├── Container B            │
        │     └── Container C            │
        │                                │
        │  CNI Plugin                    │
        │  CSI Driver                    │
        │  kube-proxy or eBPF            │
        └────────────────────────────────┘

Each component performs a specialized function while cooperating with the Kubernetes control plane to maintain application availability.


Core Components of a Worker Node

kubelet

The kubelet is the primary Kubernetes agent running on every worker node.

It continuously watches the Kubernetes API for Pods assigned to its node and ensures that those Pods are running exactly as specified.

Its responsibilities include:

  • Registering the node with the cluster
  • Receiving Pod specifications
  • Starting containers
  • Monitoring container health
  • Restarting failed containers
  • Executing liveness, readiness, and startup probes
  • Reporting node health and resource usage
  • Publishing Pod status back to the API server

The kubelet does not schedule Pods. Instead, it manages Pods after the scheduler assigns them to the node.

Because kubelet maintains the desired state locally, applications can recover automatically from many common failures without requiring manual intervention.


Container Runtime (containerd or CRI-O)

Worker nodes require a Container Runtime Interface (CRI) implementation to create and manage containers.

Modern Kubernetes deployments typically use:

  • containerd
  • CRI-O

These runtimes are lightweight, secure, and fully compatible with Kubernetes.

Their responsibilities include:

  • Pulling container images
  • Creating containers
  • Managing namespaces
  • Configuring Linux cgroups
  • Applying security isolation
  • Starting and stopping containers
  • Collecting runtime information

Older Kubernetes deployments frequently relied on Docker through the now-removed Dockershim layer. Today, Kubernetes communicates directly with CRI-compatible runtimes, making containerd and CRI-O the recommended choices for production environments.


kube-proxy and eBPF Alternatives

Networking between Pods and Services requires traffic routing inside the cluster.

Traditionally, this responsibility belonged to kube-proxy, which programs Linux networking rules using iptables or IPVS.

Its responsibilities include:

  • Implementing Kubernetes Services
  • Routing traffic to Pods
  • Supporting internal load balancing
  • Maintaining Service endpoints

Many modern Kubernetes platforms now replace or supplement kube-proxy with eBPF-based networking.

Popular implementations include:

  • Cilium
  • Managed cloud networking solutions
  • Native eBPF datapaths

Benefits of eBPF networking include:

  • Lower latency
  • Better observability
  • Reduced networking overhead
  • Improved scalability
  • Advanced security policies

While kube-proxy remains widely supported, many production clusters now adopt eBPF to simplify networking and improve performance.


CNI (Container Network Interface)

Kubernetes itself does not provide Pod networking.

Instead, networking is delegated to Container Network Interface (CNI) plugins.

Common CNI implementations include:

  • Calico
  • Cilium
  • Flannel
  • Weave Net
  • Antrea

A CNI plugin performs several critical tasks whenever a new Pod starts:

  • Assigns an IP address
  • Connects the Pod to the cluster network
  • Configures routing
  • Applies network policies
  • Enables Pod-to-Pod communication

Without a functioning CNI plugin, Pods may start successfully but remain unable to communicate with other workloads or external services.


CSI (Container Storage Interface)

Applications often require persistent storage that survives container restarts.

Kubernetes addresses this through the Container Storage Interface (CSI).

CSI drivers enable worker nodes to interact with storage systems such as:

  • Cloud block storage
  • Network-attached storage (NAS)
  • SAN solutions
  • Distributed storage platforms
  • Local persistent disks

When a Pod requests persistent storage, the CSI driver is responsible for:

  • Provisioning volumes
  • Attaching storage
  • Mounting volumes
  • Resizing supported volumes
  • Detaching storage when workloads terminate

This standardized interface allows Kubernetes to integrate with a wide range of storage providers without requiring storage-specific logic inside the core platform.


How Worker Nodes Process Workloads

The journey from a Deployment manifest to a running application involves several coordinated steps.

  1. A user submits a Deployment to the Kubernetes API.
  2. The API server stores the desired state.
  3. The scheduler selects the most appropriate worker node.
  4. The kubelet on that node detects the new Pod assignment.
  5. The container runtime downloads the required images.
  6. The CNI plugin configures networking.
  7. The CSI driver mounts any required storage volumes.
  8. Containers start running.
  9. The kubelet continuously monitors the Pod and reports status back to the control plane.

If a container crashes, kubelet follows the Pod's restart policy and attempts recovery automatically. If an entire worker node becomes unavailable, Kubernetes reschedules affected Pods onto healthy nodes, assuming sufficient cluster capacity exists.

This reconciliation process allows Kubernetes to maintain application availability while minimizing manual operational effort.


Viewing Worker Nodes with kubectl

One of the simplest ways to inspect the worker nodes in a cluster is with the following command:

kubectl get nodes

Example output:

NAME            STATUS   ROLES           AGE   VERSION
control-plane   Ready    control-plane   42d   v1.35.0
worker-01       Ready    <none>          42d   v1.35.0
worker-02       Ready    <none>          42d   v1.35.0

To view additional information about a specific node, use:

kubectl describe node worker-01

This command displays useful operational details, including resource capacity, allocatable CPU and memory, running Pods, labels, taints, conditions, and recent events—making it one of the most valuable commands for diagnosing node health and scheduling behavior.

Node Registration and Lifecycle

Before a worker node can run workloads, it must securely join the Kubernetes cluster and register with the control plane. During this process, the kubelet authenticates using certificates or another supported authentication mechanism and announces the node's available resources, operating system, architecture, and runtime information.

Once registration is complete, Kubernetes begins monitoring the node's health through regular heartbeat updates. If the node remains healthy, it is marked as Ready and becomes eligible for scheduling.

A worker node typically progresses through the following lifecycle:

  1. Provisioning

    • The server or virtual machine is created.
    • Kubernetes components and a supported container runtime are installed.
  2. Registration

    • The kubelet authenticates with the control plane.
    • The node joins the cluster.
  3. Ready

    • The scheduler can place Pods on the node.
    • Resource utilization is continuously monitored.
  4. Maintenance

    • Administrators may temporarily stop scheduling by cordoning the node.
    • Existing workloads are safely drained before upgrades or maintenance.
  5. Removal

    • The node is deleted from the cluster after workloads have been migrated elsewhere.

For planned maintenance, avoid powering off a node immediately. Instead, mark it unschedulable and safely evict workloads:

kubectl cordon worker-01
kubectl drain worker-01 --ignore-daemonsets

After maintenance is complete:

kubectl uncordon worker-01

Following this workflow minimizes application downtime and allows Kubernetes to reschedule Pods gracefully.


How the Scheduling Process Works

A worker node never decides which workloads it should run. That responsibility belongs to the Kubernetes scheduler.

The scheduling workflow is straightforward:

  1. A Deployment, StatefulSet, Job, or other workload is submitted.
  2. The API server stores the desired state.
  3. The scheduler evaluates all available worker nodes.
  4. Nodes that do not satisfy scheduling requirements are filtered out.
  5. Remaining candidates are scored based on available resources and scheduling preferences.
  6. The scheduler assigns the Pod to the most appropriate node.
  7. The kubelet on that node starts the workload.

The scheduler evaluates numerous placement rules, including:

  • Available CPU and memory
  • Resource requests and limits
  • Node labels
  • Node selectors
  • Node affinity and anti-affinity
  • Taints and tolerations
  • Topology spread constraints
  • Storage availability
  • Pod disruption constraints

This scheduling model enables Kubernetes to distribute workloads efficiently while maintaining high availability and balancing cluster utilization.


Node Resources and Capacity

Every worker node contributes compute capacity to the cluster.

The scheduler determines whether a node can host additional workloads based on its allocatable resources, not simply its total hardware capacity.

Common resources include:

  • CPU cores
  • Memory
  • Ephemeral storage
  • Persistent volumes
  • GPUs
  • HugePages
  • Extended resources provided by device plugins

Each Pod should define appropriate resource requests and limits.

Example:

resources:
  requests:
    cpu: "500m"
    memory: "512Mi"
  limits:
    cpu: "1"
    memory: "1Gi"

Proper resource requests allow the scheduler to make informed placement decisions, while limits help prevent individual workloads from monopolizing node resources.

Overcommitting CPU is often acceptable for many applications, whereas excessive memory overcommitment increases the risk of Pod eviction due to memory pressure.


Managed Kubernetes Worker Nodes

Most organizations now operate Kubernetes using managed cloud services, where the control plane is maintained by the cloud provider while customers manage worker nodes or node pools.

Major managed Kubernetes platforms include:

Amazon Elastic Kubernetes Service (EKS)

Amazon EKS supports:

  • Managed node groups
  • Self-managed nodes
  • AWS Auto Scaling integration
  • Spot Instances
  • Karpenter for dynamic node provisioning

Infrastructure updates and scaling can be largely automated while retaining control over worker node configuration.

Azure Kubernetes Service (AKS)

AKS organizes worker nodes into node pools, allowing different workload types to run on specialized infrastructure.

Common scenarios include:

  • Separate system and user node pools
  • GPU-enabled pools
  • Windows node pools
  • Autoscaling using the Cluster Autoscaler

Google Kubernetes Engine (GKE)

Google Kubernetes Engine offers several node management options:

  • Standard clusters with configurable node pools
  • Autopilot mode for fully managed infrastructure
  • Automatic upgrades
  • Automatic repairs
  • Integrated autoscaling

Although operational details vary between cloud providers, the underlying Kubernetes worker node concepts remain the same across all platforms.


Worker Node Security

Worker nodes represent part of the cluster's trusted computing base and should be secured accordingly.

Key security practices include:

Secure Authentication

Worker nodes authenticate using certificates issued by the cluster's certificate authority. Communication between kubelets and the API server is encrypted using TLS.

Keep Software Updated

Regularly update:

  • Kubernetes components
  • Linux packages
  • Container runtime
  • Kernel security patches

Many organizations use rolling node replacements instead of in-place upgrades to reduce operational risk.

Harden the Operating System

Reduce the attack surface by:

  • Disabling unnecessary services
  • Restricting SSH access
  • Enforcing firewall rules
  • Applying least-privilege permissions
  • Using secure boot where supported

Protect Container Images

Only deploy images from trusted registries and incorporate image scanning into CI/CD pipelines to detect vulnerabilities before deployment.

Enforce Network Policies

Network policies restrict communication between Pods, reducing the blast radius of compromised workloads.

Combined with admission policies, RBAC, and runtime security tools, these controls significantly improve cluster security.


Monitoring and Maintenance

Worker nodes require continuous monitoring to ensure application reliability.

Important metrics include:

  • CPU utilization
  • Memory utilization
  • Disk usage
  • Network throughput
  • Pod density
  • Node conditions
  • Filesystem availability
  • Container restart counts

Common monitoring tools include:

  • Prometheus
  • Grafana
  • kube-state-metrics
  • Metrics Server
  • OpenTelemetry
  • Cloud-native monitoring services

Routine maintenance tasks include:

  • Applying security patches
  • Rotating certificates
  • Updating Kubernetes versions
  • Cleaning unused container images
  • Verifying storage health
  • Monitoring disk pressure
  • Replacing unhealthy nodes

Production clusters should automate as much maintenance as possible through infrastructure-as-code, managed node pools, and rolling upgrades.


Common Pitfalls and Troubleshooting

Even well-managed clusters occasionally experience worker node issues.

Node Shows NotReady

Possible causes include:

  • kubelet failure
  • Network connectivity issues
  • Certificate problems
  • Resource exhaustion

Investigate using:

kubectl describe node worker-01
kubectl get events

Pods Remain Pending

Pending Pods often indicate scheduling constraints such as:

  • Insufficient CPU
  • Insufficient memory
  • Missing tolerations
  • Unsatisfied affinity rules
  • Storage provisioning failures

Review Pod events to identify the scheduling failure.


DiskPressure or MemoryPressure

Worker nodes monitor available resources.

When critical thresholds are exceeded, Kubernetes may:

  • Evict Pods
  • Delay scheduling
  • Mark nodes under pressure

Regular monitoring helps prevent these conditions from impacting production workloads.


Image Pull Failures

Common causes include:

  • Incorrect image names
  • Authentication failures
  • Registry outages
  • Missing image pull secrets

Always verify registry credentials and image references.


Networking Problems

If Pods cannot communicate:

  • Verify the CNI plugin is healthy.
  • Confirm network policies are not blocking traffic.
  • Check Service endpoints.
  • Inspect DNS resolution within the cluster.

Many networking issues originate from CNI configuration rather than the worker node itself.


Best Practices

When operating Kubernetes worker nodes in production, follow these recommendations:

  • Use containerd or CRI-O as the container runtime.
  • Separate system workloads from application workloads using dedicated node pools.
  • Define CPU and memory requests for every workload.
  • Avoid running production workloads on the control plane.
  • Regularly patch operating systems and Kubernetes components.
  • Monitor node health continuously.
  • Replace unhealthy nodes instead of attempting extensive manual repairs.
  • Use autoscaling to adapt to changing workload demands.
  • Implement NetworkPolicies for workload isolation.
  • Automate node provisioning with infrastructure-as-code tools.
  • Use labels, taints, and affinity rules to control workload placement.
  • Test node upgrade procedures in non-production environments before rolling them out broadly.

These practices improve resilience, simplify operations, and reduce the likelihood of service disruptions.


Conclusion

Worker nodes are the execution layer of every Kubernetes cluster. They provide the compute, networking, and storage resources required to run containerized applications while continuously enforcing the desired state defined by the control plane.

Modern worker nodes do far more than host containers. Through components such as kubelet, CRI-compatible runtimes, CNI plugins, and CSI drivers, they integrate seamlessly with Kubernetes networking, storage, scheduling, and security mechanisms.

Whether you're operating a self-managed cluster or using services such as Amazon EKS, Azure AKS, or Google Kubernetes Engine, understanding how worker nodes register, process workloads, consume resources, and recover from failures is essential for building reliable, scalable Kubernetes platforms. Combined with proactive monitoring, secure configuration, and disciplined maintenance, well-managed worker nodes form the foundation of resilient cloud-native infrastructure.


FAQs

Can a Kubernetes cluster have only one worker node?

Yes. Development and testing clusters often use a single worker node. Production environments typically use multiple worker nodes to provide high availability and distribute workloads.

Can worker nodes be virtual machines?

Yes. Worker nodes may be physical servers, virtual machines, cloud instances, or edge devices. Kubernetes abstracts the underlying infrastructure.

Do worker nodes run Pods?

Yes. Nearly all application Pods run on worker nodes after being scheduled by the control plane.

What happens if a worker node fails?

The control plane marks the node as unavailable. If sufficient capacity exists elsewhere in the cluster, Kubernetes reschedules affected Pods onto healthy worker nodes according to the workload's controller and restart policies.

What is the difference between a node and a worker node?

A node is any machine participating in a Kubernetes cluster. A worker node specifically hosts application workloads. Control plane nodes are also nodes but primarily run Kubernetes management components.

How can I check the health of a worker node?

Useful commands include:

kubectl get nodes
kubectl describe node <node-name>
kubectl top node

These commands display node status, resource utilization, conditions, running workloads, and recent events, making them the starting point for most operational troubleshooting.

Free Engineering ToolsNEW

8 free, 100% client-side tools for developers — no signup, no data uploads.

Explore all tools