CoursesKubernetes administrationScheduling & Placement

Static pods

Pods the kubelet runs directly, without the API.

Advanced10 min · lesson 29 of 65
In plain terms
A static pod runs straight from a note pinned to the node’s fridge — no manager involved. It’s how the control plane starts itself up before the manager even exists.
How the kubelet runs a static pod
1Manifest ondisk/etc/kubernetes/manifests2kubeletwatches dirstaticPodPath in…3Runs poddirectlyrestarts it if it exits4Mirror pod inAPIread-only; edit the file…
No API server, scheduler, or controller is involved — this is how kubeadm bootstraps the control plane.

A static pod is one the kubelet runs directly from a manifest file on the node — no API server, no scheduler, no controller involved. The kubelet watches a directory (default /etc/kubernetes/manifests) and runs whatever pod specs it finds there, restarting them if they exit.

terminal
$ ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml
kube-scheduler.yaml kube-controller-manager.yaml
# the watched directory is set in the kubelet config:
$ grep staticPodPath /var/lib/kubelet/config.yaml
staticPodPath: /etc/kubernetes/manifests

This is exactly how kubeadm bootstraps a control plane: the components ARE static pods. It solves a chicken-and-egg problem — the API server cannot schedule itself, so the kubelet runs it from a file. The API server shows a read-only mirror pod so you can see it, but you manage it by editing the manifest.

Edit the file, not the mirror
kubectl delete on a static pod’s mirror does nothing lasting — the kubelet recreates it immediately. Change the manifest on disk to change a static pod.