Kubernetes Node: The Cluster's Worker Machine

A Kubernetes Node is a worker machine that runs your applications. Think of it as an employee receiving tasks (Pods) from the control plane manager. The common footgun is confusing the Node with the Pod; a Node is the server, while a Pod is the.
WHY IT EXISTS: Kubernetes needs a way to represent and manage the underlying compute resources where applications actually run. Without the Node concept, there would be no way to represent individual servers in a cluster, track their health, or assign work to them. Nodes provide the concrete 'where' for the 'what' (Pods).
THE MENTAL MODEL: Think of a Kubernetes cluster as a factory. The control plane is the factory manager, and the Nodes are the individual workers on the factory floor. Each worker (Node) has a certain capacity (CPU, memory, storage) and a set of tools (kubelet, container runtime). The manager (control plane) assigns tasks (Pods) to the workers best suited for the job.
HOW IT WORKS: A Node is a machine, either physical or virtual, that is part of a Kubernetes cluster. To become a Node, a machine must have a few key components installed. The most important are the kubelet, an agent that communicates with the control plane, and a container runtime like containerd, which is responsible for pulling and running container images. The control plane tracks the state of all Nodes, including their available resources and the Pods they are running. The scheduler component of the control plane decides which Node to run a new Pod on based on resource requests and other constraints.
WHEN TO USE IT: The Node is a core, unavoidable component of any Kubernetes cluster. You don't 'choose' to use Nodes; you provision them to build your cluster. You interact with them indirectly when deploying Pods, and directly when you need to perform maintenance, check resource usage, or troubleshoot issues on a specific machine. For example, you use kubectl describe node <node-name> to see its status, capacity, and running Pods.
WHEN NOT TO USE IT: You shouldn't think in terms of individual Nodes when you want your application to be resilient and scalable. The point of Kubernetes is to abstract away the underlying machines. Instead of targeting a specific Node, you define a Deployment and let the Kubernetes scheduler handle placing Pods on healthy Nodes. Manually assigning a Pod to a specific Node (using nodeName) is an anti-pattern unless you have a very specific need, like running a logging agent on every machine (which is better handled by a DaemonSet).
ONE CANONICAL EXAMPLE: A common operation is adding capacity to a cluster. If your applications need more CPU, you add a new Node. In a cloud provider, this means provisioning a new virtual machine (e.g., an EC2 instance). Once the new machine is up and its kubelet is configured to talk to the control plane, it registers itself as a new Node. The scheduler immediately sees this new capacity and can start placing new Pods on it automatically.
Read the original → kubernetes.io
Get five bites like this every day.
Tezvyn delivers a daily feed of 60-second tech bites with quizzes to lock in what you learn.