Kubernetes Pod Stuck in Pending (Nothing Is Wrong With It)

Pending means the scheduler cannot find a home for the pod. Three usual suspects: no resources free, taints repelling it, or an unbindable volume.

What you'll see

Root causes

Insufficient CPU/memory on every node

Requests exceed what any node has allocatable. Event: 'Insufficient cpu'.

Taints without matching tolerations

Nodes carry taints (e.g. master/control-plane) that repel the pod. Event: 'node(s) had untolerated taint'.

PVC cannot bind

No StorageClass or no capacity. Event: 'volume node affinity conflict' or 'no persistent volumes available'.

Fix it

  1. Read the exact scheduling failure
    kubectl describe pod <pod> | tail -8
  2. Check real headroom on the nodes
    kubectl describe nodes | grep -A5 'Allocated resources'
  3. Lower requests or scale the pool
    kubectl scale deployment <name> --replicas=2  # or fix the request in the manifest
  4. For taints, add the toleration or schedule to a worker pool
    tolerations:
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule

Field note

Requests are what the scheduler believes, not actual usage. A pod requesting 8 cores will sit Pending on nodes that have 4 allocatable — even if they are 90% idle.

Common questions

How do I find why a pod won't schedule?

kubectl describe pod <name> — the Events section lists the scheduling failures in order: insufficient CPU/memory, taints/tolerations, affinity, or PVC binding. The last message is the binding constraint.

My cluster has free nodes — why still pending?

Free in capacity terms isn't schedulable: taints, nodeSelectors, affinity rules, or topology constraints exclude the nodes. The describe output names which filter removed them.

Ship it right the first time

Kustomize base with probes, PDBs, and zero-downtime rollouts already wired.

Kubernetes Production Blueprints — $27 →

One-time. Yours to modify. Instant download from the NinjaOps template store.