Argo CD "Degraded" health status after sync in CI
An Application can be Synced and still Degraded: sync means the manifests matched Git, health means the running workload is actually up. Degraded means a Deployment, rollout, or other resource failed its own health assessment.
What this error means
Sync succeeds but argocd app get shows Health Status: Degraded, and a CI argocd app wait --health fails or times out. The degraded resource usually has crash-looping or unschedulable pods.
Name: my-app
Sync Status: Synced to HEAD (a1b2c3d)
Health Status: Degraded
GROUP KIND NAME STATUS HEALTH MESSAGE
apps Deployment api Synced Degraded Deployment "api" exceeded its
progress deadlineCommon causes
Pods crash or fail to start
A Deployment is Degraded when its pods crash-loop, fail readiness, or the rollout exceeds its progress deadline, so the desired replicas never become available.
A resource cannot schedule
Missing image, insufficient resources, or an unbound PVC keeps pods Pending, which the health check reports as Degraded.
How to fix it
Inspect the degraded resource directly
- Run
argocd app get <app>and read the MESSAGE on the Degraded resource. - Describe the workload and its pods in the cluster to see events.
- Fix the root cause (image, resources, config) and re-sync.
argocd app get my-app
kubectl -n prod describe deployment api
kubectl -n prod get pods -l app=apiWait on health explicitly in CI
Gate the pipeline on the actual health check so a Degraded rollout fails the deploy job rather than passing silently.
- run: argocd app wait my-app --health --timeout 300How to prevent it
- Wait on
--health, not just--sync, in the deploy job. - Set realistic readiness probes and progress deadlines.
- Verify image tags and resource requests before promoting to prod.