Argo Rollouts is a Kubernetes controller that provides advanced deployment strategies — canary releases, blue-green deployments, and progressive delivery with automated analysis.
Free, open source, CNCF project. Works alongside ArgoCD or standalone.
Why Use Argo Rollouts?
- Canary deployments — route 5% of traffic to new version, auto-promote if metrics pass
- Blue-green — instant rollback by switching services
- Analysis runs — automated rollback based on Prometheus, Datadog, or custom metrics
- Traffic management — integrates with Istio, Nginx, ALB, and Traefik
Quick Setup
1. Install
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
# Install kubectl plugin
brew install argoproj/tap/kubectl-argo-rollouts
2. Create a Canary Rollout
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 10
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 5m}
- setWeight: 30
- pause: {duration: 5m}
- setWeight: 60
- pause: {duration: 5m}
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app:v2
ports:
- containerPort: 8080
EOF
3. Check Rollout Status
# CLI
kubectl argo rollouts get rollout my-app --watch
# Via Kubernetes API
kubectl get rollout my-app -o jsonpath='{.status.phase}'
# Detailed status
kubectl get rollout my-app -o json | jq '{phase: .status.phase, currentStepIndex: .status.currentStepIndex, canary: .status.canary}'
4. Promote or Abort
# Promote to next step
kubectl argo rollouts promote my-app
# Full promote (skip remaining steps)
kubectl argo rollouts promote my-app --full
# Abort rollout (rollback)
kubectl argo rollouts abort my-app
# Retry a failed rollout
kubectl argo rollouts retry rollout my-app
5. Add Analysis (Auto-Rollback)
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: success-rate
spec:
metrics:
- name: success-rate
interval: 60s
successCondition: result[0] > 0.95
provider:
prometheus:
address: http://prometheus:9090
query: |
sum(rate(http_requests_total{status=~"2..",app="my-app"}[5m]))
/
sum(rate(http_requests_total{app="my-app"}[5m]))
EOF
Python Example
from kubernetes import client, config
config.load_kube_config()
api = client.CustomObjectsApi()
# List rollouts
rollouts = api.list_namespaced_custom_object(
group="argoproj.io", version="v1alpha1",
namespace="default", plural="rollouts")
for r in rollouts["items"]:
name = r["metadata"]["name"]
phase = r.get("status",{}).get("phase","Unknown")
step = r.get("status",{}).get("currentStepIndex","N/A")
print(f"Rollout: {name} | Phase: {phase} | Step: {step}")
Key Concepts
| Feature | Description |
|---|---|
| Canary | Gradually shift traffic to new version |
| Blue-Green | Switch all traffic instantly |
| Analysis | Auto-check metrics during rollout |
| Experiments | Run A/B tests alongside rollout |
| Traffic Management | Istio, Nginx, ALB, Traefik integration |
Need custom data extraction or scraping solution? I build production-grade scrapers for any website. Email: Spinov001@gmail.com | My Apify Actors
Top comments (0)