Pod Pending and Init States
A Pod is not Running yet, so which component is still holding it? The STATUS column answers that: Pending with no Node in the Node column means the Scheduler owns it, an Init:N/M counter or Init:CrashLoopBackOff means the Kubelet is working through the init containers, and PodInitializing means those are done and the app containers are being created. READY stays 0/1 through all of them, because that column asks a different question.
Play the animation 5 steps, animated, best on a wide screen
Pod Pending and Init States, step by step
-
Pending means the Pod has not begun executing its init containers, and the Node column says why: no Node has been chosen yet, so no Kubelet has seen this Pod and reading Kubelet logs finds nothing about it. The component still holding the Pod is the Scheduler, and kubectl describe pod web-0 prints its reason under Events.
Play from step 1 -
A Node is chosen, the Node column fills in, and the Kubelet takes over. STATUS turns into a counter: Init:0/2 means two init containers with none completed, and Init:1/2 means one has. That counter is the only column here that tracks init progress, because without a sidecar READY cannot move until an app container starts.
Play from step 2 -
Init:Error means an init container has failed to execute, and when it keeps failing the same cell reads Init:CrashLoopBackOff. The counter is replaced by the reason, and RESTARTS carries the count and the time of the last one. AGE is the age of the Pod, so an Init: value still on the row at four minutes is likely a stall.
Play from step 3 -
PodInitializing means the Pod has already finished executing its init containers and the app containers are being created. It is what those containers read until the runtime reports on them, so a Pod that sits here is held by the app image or the runtime and not by anything the init containers did.
Play from step 4 -
Running ends the STATUS column and starts the confusion, because READY has read 0/1 at every value before it. STATUS answers whether the containers exist and are running, READY answers whether they are serving, and the gap between them is the readiness half of the condition ladder. Running here is the Pod phase, which never reports readiness.
Play from step 5