All Articles

Argo Rollouts vs Flagger — Which Canary Deployment Tool Should You Use? (2026)

Both Argo Rollouts and Flagger do progressive delivery on Kubernetes. Here's a detailed comparison of features, architecture, and when to pick each.

DevOpsBoysApr 11, 20264 min read
Share:Tweet

Canary deployments reduce blast radius when you ship new code. On Kubernetes, two tools dominate: Argo Rollouts and Flagger. Both work, both are production-grade, but they make different trade-offs. Here's the full comparison.

What Both Tools Do

Progressive delivery = roll out a new version to a small % of traffic, watch metrics, gradually increase or automatically rollback on failure.

Both tools:

  • Integrate with service meshes (Istio, Linkerd) and ingress controllers
  • Watch metrics (Prometheus, Datadog) to auto-promote or rollback
  • Work with Kubernetes Deployments natively

The difference is in how they do it.


Architecture Comparison

Argo Rollouts

Argo Rollouts replaces the standard Kubernetes Deployment with a custom Rollout CRD.

yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-app
spec:
  replicas: 10
  strategy:
    canary:
      steps:
      - setWeight: 10    # 10% traffic to canary
      - pause: {duration: 5m}
      - setWeight: 30
      - pause: {duration: 5m}
      - setWeight: 60
      - pause: {}        # manual gate
      analysis:
        templates:
        - templateName: success-rate
        startingStep: 2

Key: You define explicit steps and weights. Argo Rollouts controls the rollout directly.

Flagger

Flagger watches standard Kubernetes Deployments. You don't change your existing deployment spec.

yaml
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: my-app
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  progressDeadlineSeconds: 60
  service:
    port: 80
  analysis:
    interval: 1m
    threshold: 5
    maxWeight: 50
    stepWeight: 10
    metrics:
    - name: request-success-rate
      min: 99
      interval: 1m

Key: Flagger runs a control loop — it promotes or rolls back based on metrics automatically.


Feature Comparison

FeatureArgo RolloutsFlagger
CRD typeRollout (replaces Deployment)Canary (wraps Deployment)
Traffic splittingManual steps or automatedAutomated metric-driven
Manual gatesYes (pause: {})Limited
Blue/Green supportYesYes
A/B testingYes (header-based)Yes
Ingress supportNGINX, ALB, Traefik, IstioNGINX, Istio, Linkerd, Contour, AppMesh
Service mesh supportIstio, Linkerd, SMIIstio, Linkerd, SMI, AppMesh
UI/DashboardYes (Argo Rollouts Dashboard)No native UI
ArgoCD integrationNativeVia annotations
Webhooks/notificationsYesYes
Metric providersPrometheus, Datadog, New Relic, WavefrontPrometheus, Datadog, CloudWatch, Dynatrace
Helm supportLimitedGood

Traffic Splitting Deep Dive

Argo Rollouts: Explicit Steps

yaml
strategy:
  canary:
    steps:
    - setWeight: 5
    - pause: {duration: 10m}
    - setWeight: 20
    - pause: {duration: 10m}
    - setWeight: 50
    - pause: {}   # wait for human approval
    - setWeight: 100

You control the exact schedule. Good for teams that want explicit control.

Flagger: Metric-Driven Promotion

yaml
analysis:
  interval: 30s      # check every 30s
  threshold: 5       # fail after 5 bad checks
  maxWeight: 50      # max canary traffic
  stepWeight: 10     # increase by 10% per interval

Flagger automatically moves forward if metrics are healthy, rolls back if not. No manual steps needed.


Analysis / Metrics

Argo Rollouts AnalysisTemplate

yaml
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  metrics:
  - name: success-rate
    interval: 1m
    successCondition: result[0] >= 0.95
    failureLimit: 3
    provider:
      prometheus:
        address: http://prometheus:9090
        query: |
          sum(rate(http_requests_total{status=~"2.."}[1m]))
          /
          sum(rate(http_requests_total[1m]))

Flagger Metric

yaml
analysis:
  metrics:
  - name: request-success-rate
    thresholdRange:
      min: 99
    interval: 1m

Both are equivalent in power. Argo Rollouts gives more control; Flagger is more opinionated and simpler.


GitOps Integration

Argo Rollouts + ArgoCD: Native. ArgoCD has a dedicated Rollouts plugin. The UI shows canary progress, analysis results, and promotion controls.

Flagger + Flux: Designed together. Flagger was built by the Flux team. Works seamlessly with Flux GitOps.

Flagger + ArgoCD: Works but requires argocd app set --sync-policy none — you don't want ArgoCD reverting Flagger's traffic weight changes.


When to Use Argo Rollouts

✅ You want explicit, step-by-step control over canary progression
✅ You're already using ArgoCD — integration is seamless
✅ You need manual approval gates (change management, compliance)
✅ You want a UI/dashboard to monitor rollouts
✅ You need Blue/Green AND Canary in one tool


When to Use Flagger

✅ You want fully automated progressive delivery (no manual steps)
✅ You're using Flux for GitOps
✅ You don't want to change your existing Deployment specs
✅ You want metric-driven automatic promotion/rollback
✅ You're using AppMesh or Contour (better Flagger support)


Installation

Argo Rollouts

bash
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
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x kubectl-argo-rollouts-linux-amd64
mv kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

Flagger

bash
helm repo add flagger https://flagger.app
helm upgrade -i flagger flagger/flagger \
  --namespace=istio-system \
  --set crd.create=true \
  --set meshProvider=istio \
  --set metricsServer=http://prometheus:9090

Verdict

Your situationPick
Using ArgoCDArgo Rollouts
Using FluxFlagger
Want manual gatesArgo Rollouts
Want full automationFlagger
Need UIArgo Rollouts
Don't want to change DeploymentsFlagger
AppMesh / ContourFlagger

Both are excellent. If you're greenfield and using ArgoCD, go with Argo Rollouts. If you're on Flux or want zero-touch automated delivery, Flagger is the better fit.


Learn More

Newsletter

Stay ahead of the curve

Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam — just practical engineering content.

Related Articles

Comments