K8s by Example: Node Components
| Worker nodes run your workloads. Each node has: kubelet (Pod lifecycle), kube-proxy (networking), and container runtime (runs containers). Nodes register with control plane and receive work via the API Server. |
| node-architecture.txt | |
| The kubelet manages Pods, kube-proxy handles networking rules, and the container runtime executes containers. | |
| terminal | |
| The kubelet is the node agent. It watches for Pods assigned to its node, starts containers, runs probes, and reports status. It doesn’t manage non-Kubernetes containers. | |
| terminal | |
| View kubelet logs for troubleshooting. The config file at | |
| terminal | |
| Kubelet communicates with container runtime via CRI (Container Runtime Interface). containerd and CRI-O are the main production runtimes. | |
| terminal | |
| Use | |
| terminal | |
| kube-proxy implements Services networking. It watches Services and Endpoints, then configures iptables or IPVS rules to route traffic to Pods. | |
| terminal | |
| Default mode is iptables - creates NAT rules for each Service. IPVS mode is better for large clusters with many Services. | |
| terminal | |
| Node status is reported by kubelet. Conditions show health: Ready, MemoryPressure, DiskPressure, PIDPressure. All except Ready should be False. | |
| terminal | |
| Allocatable shows resources available for Pods after system overhead. Some capacity is reserved for system processes. | |
| terminal | |
| Node registration adds automatic labels: hostname, OS, arch, zone. Cloud controllers add instance-type and region labels. | |
| terminal | |
| Cordon marks a node as unschedulable. New Pods won’t be placed on it, but existing Pods keep running. | |
| terminal | |
| Drain evicts all Pods from a node, respecting PodDisruptionBudgets. Use for maintenance, upgrades, or decommissioning. | |
| terminal | |
| Uncordon returns a node to service, allowing new Pods to be scheduled on it. | |
| terminal | |
| Debug node issues by checking resource usage, kubelet logs, and container runtime status. | |
| terminal | |
| Use | |