Skip to content
Latchkey

kubectl "deployment ... exceeded its progress deadline" in CI - Fix it

A Deployment tracks how long it has gone without progress. If new pods do not reach Available within progressDeadlineSeconds (default 600), the controller sets a ProgressDeadlineExceeded condition and kubectl rollout status returns non-zero, failing the deploy.

What this error means

A kubectl rollout status deployment/api step fails with error: deployment "api" exceeded its progress deadline. The new ReplicaSet has pods that never became Ready.

kubectl
Waiting for deployment "api" rollout to finish: 1 out of 3 new replicas have been updated...
error: deployment "api" exceeded its progress deadline

Common causes

New pods never become Ready

The new pods crash, fail readiness probes, cannot pull their image, or cannot schedule, so the Deployment makes no progress.

The deadline is shorter than a slow but healthy start

A genuinely slow boot (large image, warm-up) exceeds a tight progressDeadlineSeconds, so a healthy rollout is reported as failed.

How to fix it

Find why the new pods are not progressing

  1. Inspect the new ReplicaSet pods for their real status.
  2. Read events and logs for crashes, probe failures, or image-pull errors.
  3. Fix the underlying pod failure, then re-run the rollout.
Terminal
kubectl rollout status deployment/api --timeout=300s
kubectl get pods -l app=api
kubectl describe deployment/api | sed -n '/Conditions/,/Events/p'

Tune the deadline to a realistic value

If the workload is healthy but slow, raise progressDeadlineSeconds rather than masking failures.

deployment.yaml
spec:
  progressDeadlineSeconds: 900

How to prevent it

  • Set readiness probes so progress reflects real health.
  • Right-size progressDeadlineSeconds for the workload's start time.
  • Surface the failing pod status when a rollout times out.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →