Validate that Argo Rollouts can automatically evaluate Prometheus metrics during a canary deployment and stop promotion when application health degrades.
Browser → Frontend Rollout → Argo Rollouts → AnalysisRun → Prometheus → Rollout Decision
Argo Rollouts executes AnalysisRuns during canary steps and queries Prometheus to determine whether the rollout should continue, pause, or abort.
AnalysisTemplate:
frontend-success-rateConfigured metrics:
- frontend-pod-availability
- frontend-failed-probe-rate
- frontend-restart-increase
- frontend-readiness-latency-p95
steps:
- setWeight: 10
- pause: { duration: 2m }
- analysis:
templates:
- templateName: frontend-success-rate
- setWeight: 25
- pause: { duration: 2m }
- setWeight: 50
- pause: { duration: 2m }
- setWeight: 100Purpose:
Ensure frontend pods are Ready during rollout.
Prometheus Query:
sum(kube_pod_status_ready{
namespace="boutique",
condition="true",
pod=~"frontend-.*"
})
Success Condition:
result[0] >= 1Purpose:
Detect readiness/liveness probe failures.
Prometheus Query:
sum(rate(
prober_probe_total{
namespace="boutique",
pod=~"frontend-.*",
result="failed"
}[5m]
)) or vector(0)
Success Condition:
result[0] == 0Purpose:
Detect application instability during rollout.
Prometheus Query:
sum(increase(
kube_pod_container_status_restarts_total{
namespace="boutique",
pod=~"frontend-.*"
}[5m]
)) or vector(0)
Success Condition:
result[0] == 0Purpose:
Detect slow application startup or degraded readiness behavior.
Prometheus Query:
histogram_quantile(
0.95,
sum(
rate(
prober_probe_duration_seconds_bucket{
namespace="boutique",
pod=~"frontend-.*",
probe_type="Readiness"
}[5m]
)
) by (le)
)
Success Condition:
result[0] < 0.5A rollout was triggered by modifying:
PHASE4_METRIC_TESTwhich generated a new Rollout revision and AnalysisRun.
Result:
AnalysisRun: Successful
Rollout: Healthy
Argo CD Application: Synced / Healthy
All metrics passed:
frontend-pod-availability Successful
frontend-failed-probe-rate Successful
frontend-restart-increase Successful
frontend-readiness-latency-p95 Successful
To validate rollback protection, the AnalysisTemplate was intentionally modified.
Original:
successCondition: result[0] >= 1Test Failure Condition:
successCondition: result[0] >= 999Expected Result:
Metric evaluation fails
AnalysisRun becomes Failed
Rollout becomes Degraded
Rollout promotion stops
Observed Result:
AnalysisRun: Failed
Rollout: Degraded
Reason:
Metric "frontend-pod-availability"
assessed Failed due to failed (2)
> failureLimit (1)
This confirmed that Argo Rollouts correctly blocked promotion when analysis conditions failed.
The AnalysisTemplate was restored:
successCondition: result[0] >= 1The rollout was recovered using:
kubectl argo rollouts retry rollout frontend -n boutiqueResult:
New AnalysisRun created
AnalysisRun: Successful
Rollout: Healthy
Observed:
frontend-79b5766cc6-4-2 Failed
frontend-79b5766cc6-4-2.1 Successful
This validated recovery from an aborted rollout without requiring a new deployment.
Trigger rollout:
./scripts/trigger-frontend-rollout-analysis.shWatch rollout:
kubectl argo rollouts get rollout frontend -n boutique --watchWatch AnalysisRuns:
kubectl get analysisrun -n boutique -wDescribe AnalysisRun:
kubectl describe analysisrun <name> -n boutiqueRetry failed rollout:
kubectl argo rollouts retry rollout frontend -n boutiquePhase 4 successfully demonstrated:
- Prometheus-based rollout verification
- Automated metric evaluation
- Canary promotion gating
- Automatic rollout abortion on failed metrics
- Recovery using rollout retry
- GitOps integration with Argo CD
The platform now supports metric-driven deployment validation and safe progressive delivery.
Next Phase:
Phase 5 - Istio Traffic-Based Canary Deployments