Argo Rollouts Troubleshooting Guide
Issue 1: Rollout stuck in "Progressing" state indefinitely
Symptom: kubectl argo rollouts get rollout shows the rollout stuck at a step, never advancing.
Root Cause: Usually one of: (a) a pause: {duration: ...} step is still waiting out its duration, (b) an inline analysis step's AnalysisRun hasn't resolved yet (still running, or stuck itself), or (c) the step is a pause: {} with no duration — an indefinite pause requiring manual promote.
Debug steps:
Fix:
Issue 2: Canary traffic doesn't match the declared `setWeight`
Symptom: setWeight: 10 is set, but observed traffic split doesn't reflect 10% going to canary pods.
Root Cause: No traffic provider (Istio, ALB, NGINX canary annotations, SMI) is configured — without one, traffic split follows basic Kubernetes Service load-balancing across current pod counts, not an enforced percentage.
Debug steps:
Fix: Configure an actual traffic provider (trafficRouting.istio, trafficRouting.alb, trafficRouting.nginx, etc.) in the Rollout spec — canary steps executing without one is a silent gap, not an error state.
Issue 3: AnalysisRun reports success/failure that doesn't match actual application health
Symptom: Analysis passes, but the deployed version is actually broken (or vice versa — analysis fails on a healthy version).
Root Cause: Most commonly, the metrics query isn't correctly scoped to the canary pods specifically — it may be reading aggregate metrics across both stable and canary (diluting a real canary-specific regression), or reading stable-only metrics if traffic isn't actually reaching canary pods at all (see Issue 2).
Debug steps:
Fix: Scope the query with a label filter unique to canary pods (commonly rollouts-pod-template-hash), so the analysis is measuring the canary version specifically, not an aggregate that includes stable traffic.
Issue 4: `promote` doesn't advance the rollout
Symptom: kubectl argo rollouts promote returns success but the rollout doesn't visibly progress.
Root Cause: Usually a permissions/RBAC issue (the command silently succeeds against the API but the controller can't act), or the rollout is actually stuck on something other than a promotable pause (e.g., a failed AnalysisRun that needs to be addressed, not just promoted past).
Debug steps:
Fix: If it's an RBAC issue, grant the correct verb on the rollouts resource. If the rollout is blocked by a failed AnalysisRun rather than a plain pause, promote won't resolve the underlying failure — investigate and fix (or explicitly abort/undo) instead.
Issue 5: Automatic rollback didn't trigger despite a clearly broken deploy
Symptom: A broken version reaches 100% traffic without any automatic rollback.
Root Cause: Most commonly, no analysis step (inline or background) is actually configured in the Rollout's canary strategy at all — canary steps without any analysis attached will simply proceed through weight increases on their own schedule with no automated health check gating them, same as a plain rolling update with extra steps.
Debug steps:
Fix: Add an analysis step (inline) or a background analysis.templates reference to the canary strategy — automated rollback only exists where an AnalysisTemplate is actually wired into the rollout's steps; it isn't an automatic property of using a Rollout object instead of a Deployment.

