Pending means the scheduler cannot find a home for the pod. Three usual suspects: no resources free, taints repelling it, or an unbindable volume.
Requests exceed what any node has allocatable. Event: 'Insufficient cpu'.
Nodes carry taints (e.g. master/control-plane) that repel the pod. Event: 'node(s) had untolerated taint'.
No StorageClass or no capacity. Event: 'volume node affinity conflict' or 'no persistent volumes available'.
kubectl describe pod <pod> | tail -8
kubectl describe nodes | grep -A5 'Allocated resources'
kubectl scale deployment <name> --replicas=2 # or fix the request in the manifest
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
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.
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.
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.
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.