Skip to main content
All of the catalog
Injectable fault

Pending: replicas no node can hold

We scaled go-api to 4 for a launch, and READY has said 3/4 ever since. Two pods from the change have never started, and the nodes are mostly idle. Nothing is crashing, restarting or being killed, and every request still gets an answer, but there is no headroom for the launch traffic. The pager says the Deployment has fewer replicas available than it asked for.

ResourcesMedium severitygo-api/go-api
Definition on GitHub

Which app it breaks

go-api by default. Pass --app to break another app in your lab instead.

The hint ladder

Each hint narrows the search a little further. They are collapsed on purpose: open one only when you are properly stuck, because working out the next command yourself is the whole exercise.

Hint 1

Count what is serving and what is not: kubectl get deploy,rs,pods -n go-api. READY says how many replicas answer out of how many were asked for. What STATUS are the others in, and has any of them ever started a container?

Hint 2

A Pending pod has not been placed on a node yet, so it has no logs and no restarts. Whatever stopped it, the scheduler wrote the reason into the pod's events: kubectl describe pod -n go-api <pending-pod> and read the Events at the bottom. Deleting the pod only brings back an identical one.

Hint 3

The scheduler places a pod by its requests, compared with what each node can allocate (kubectl describe node → Allocatable and Allocated resources), never by what the pods actually use (kubectl top). Read the CPU request in the Deployment's pod template (kubectl get deploy go-api -n go-api -o yaml) and compare it with a node's allocatable CPU.

Further reading

Get updates

New scenarios and faults, release notes, and news about hosted labs if and when there is some. A few emails a month at most.

We'll email you about new releases, new lab content and paid offerings such as hosted labs, courses and workshops. Unsubscribe any time.