Skip to main content
All of the catalog
Injectable fault

Bad deploy: image that doesn't exist

A release went out referencing an image tag that was never pushed. The rollout is stuck - new pods sit in ImagePullBackOff while the old version keeps serving.

WorkloadMedium 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

The deploy "went out" but nothing changed for users. Check the state of the rollout: kubectl rollout status deploy/go-api -n go-api. Is it actually finished? Then look at the pods.

Hint 2

A pod stuck in ImagePullBackOff or ErrImagePull can't even download its container. kubectl describe pod -n go-api <pod> - the Events section tells you exactly which image the kubelet tried to pull and why it failed.

Hint 3

Compare the image on the Deployment (kubectl get deploy go-api -n go-api -o jsonpath='{.spec.template.spec.containers[0].image}') with the one the pod that is still serving is running. The Deployment's own history remembers the last good release - kubectl rollout history deploy/go-api -n go-api --revision=<n> shows the image each revision used.

Put the working tag back with kubectl set image, or roll the release back with kubectl rollout undo.

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.