DEV Community

Alex Spinov
Alex Spinov

Posted on

Argo Rollouts Has a Free API — Progressive Delivery for Kubernetes

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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}'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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}")
Enter fullscreen mode Exit fullscreen mode

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)