# Kubernetes "pull QPS exceeded" / "context canceled" Image Pull - Fix in CI

> Fix transient Kubernetes image-pull stalls in CI - "context canceled" / pull progress-deadline aborts on large or slow images that the kubelet retries and usually completes.

Source: https://latchkey.dev/learn/kubernetes/k8s-image-pull-progress-deadline  
Updated: 2026-06-25

The kubelet aborted an in-progress image pull because it stopped making progress within its deadline (or the operation was canceled). On a large image over a congested link this is transient - the kubelet retries and the pull usually completes on a later attempt.

## Diagnose it: read events and previous logs

```Terminal
kubectl --context "$KUBE_CONTEXT" -n "$NS" get pods -o wide
kubectl -n "$NS" describe pod <pod> | sed -n "/Events/,$p"
kubectl -n "$NS" logs <pod> --previous --tail=50
```

> `--previous` returns the logs of the container that already died, which is the one that explains a restart loop. The running container is usually still starting and explains nothing.

## FAQ

### What causes Kubernetes "pull QPS exceeded" / "context canceled" image pull?

There are 2 common causes: large image over a slow/congested link and transient registry/network interruption. A multi-gigabyte image pulled over a congested node network stalls long enough to trip the kubelet’s pull progress deadline, aborting that attempt.

### How do I fix Kubernetes "pull QPS exceeded" / "context canceled" image pull?

There are 2 fixes depending on which cause you have: let the kubelet retry, and confirm progress and reduce pull time so it does not stall. Work through them in order, since the first is the most common.

### What does Kubernetes "pull QPS exceeded" / "context canceled" image pull actually mean?

Pod events show a pull that started then aborted with context canceled or a pull that makes no progress and is retried, before the image finally lands.

### How do I stop Kubernetes "pull QPS exceeded" / "context canceled" image pull happening again?

Keep images small so pulls complete quickly and reliably. The prevention section lists 3 changes that keep it from recurring.

### Can Latchkey fix this automatically?

Yes. Latchkey runs your GitHub Actions on managed runners that detect this failure, apply the fix, and retry the job automatically - self-healing is on by default.

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
