Active Nerds
Module #48 · beginner Article

Pod Lifecycle States: Phase Transitions from Pending to Running and Termination

A pod moves through: Pending → Running → Succeeded/Failed, with sub-states like CrashLoopBackOff, ImagePullBackOff, and OOMKilled visible in the container st...

4 min read+10 XPPublished 2026-07-08

Quick Answer: A pod moves through: Pending → Running → Succeeded/Failed, with sub-states like CrashLoopBackOff, ImagePullBackOff, and OOMKilled visible in the container status.

Detailed Answer:

Pod Phases (high level):
├── Pending    — Accepted by API server but not yet running
│               Reasons: scheduling (no node), image pull, PVC binding
├── Running    — At least one container is running
├── Succeeded  — All containers exited with code 0 (Jobs/CronJobs)
├── Failed     — At least one container exited with non-zero code
└── Unknown    — Node communication lost (node down)

Container States (granular — inside a running/pending pod):
├── Waiting    — Not yet running; reason tells you why:
│   ├── ContainerCreating       — Image being pulled
│   ├── ImagePullBackOff        — Can't pull image (bad tag, auth failure)
│   ├── ErrImagePull            — Pull failed
│   ├── CrashLoopBackOff        — Keeps crashing (exponential backoff)
│   └── CreateContainerConfigError — Bad env var, missing secret/configmap
├── Running    — Container is executing
└── Terminated — Container exited; reason:
    ├── Completed  — Exit code 0
    ├── Error      — Non-zero exit code
    └── OOMKilled  — Exceeded memory limit
# See pod phase
kubectl get pod my-pod -o jsonpath='{.status.phase}'

# See container state and reason
kubectl get pod my-pod -o jsonpath='{.status.containerStatuses[0].state}'

# Most informative — always check this first
kubectl describe pod my-pod | tail -30    # Events section at bottom

Debugging by State:

  • Pending: describe pod → check Events for "Insufficient CPU/memory", "no nodes match selector", "unbound PVC"
  • CrashLoopBackOff: logs --previous → what was the app printing before it died?
  • ImagePullBackOff: Check image name, tag, registry credentials

Key Takeaway: The container state reason (CrashLoopBackOff, OOMKilled, ImagePullBackOff) is more informative than the pod phase — always look at kubectl describe pod Events and kubectl logs --previous for root cause.


Finished reading?

Mark as complete to claim your +10 XP and track progress.