Progressive delivery with Argo CD and Argo Rollouts

Argo Rollouts adds canary and blue-green strategies to Argo CD deployments, with Rollout resources managed from Git and traffic and metrics wired to your existing ingress or mesh. This page covers the integration method, prerequisites, setup sequence, metric analysis, security and common failures.

On this page

How Argo Rollouts adds progressive delivery to Argo CD

A platform team that already syncs Deployments through Argo CD can add canary and blue-green releases without writing release scripts by installing Argo Rollouts, a Kubernetes controller with its own custom resource definitions. Argo Rollouts does not sit beside Argo CD as a separate release tool. You replace the Deployment in each workload with a Rollout resource that carries the same pod template plus a strategy block describing how traffic moves to the new version and when promotion or rollback happens. The Rollout manifest lives in Git like any other manifest, Argo CD syncs it to the cluster, and the Argo Rollouts controller then creates and scales the ReplicaSets that the strategy calls for. Argo CD continues to own desired state, and the controller owns the step-by-step progression within that state.

Two integration points do the actual work. The first is traffic shifting. Argo Rollouts can move traffic through NGINX, AWS ALB, Apache APISIX, Istio, Linkerd and SMI, so the router you already run determines how weights are applied. The second is metric analysis, where an AnalysisTemplate queries a provider such as Prometheus, Datadog or New Relic and the controller promotes or aborts a release based on the result. Confirm which router and provider your clusters already expose, since each one needs its own configuration, and confirm that the Argo CD version you run reports Rollout health correctly before relying on it. The health status is what lets Argo CD show a paused or degraded canary instead of a green application.

Plan the ownership boundary before the first sync. Decide which team writes the AnalysisTemplate and which team can change the strategy steps, because a permissive analysis or a missing abort condition turns the rollout into an unattended change. Also decide whether existing Deployment objects are converted in place or migrated workload by workload, and check that no other controller, such as a Horizontal Pod Autoscaler configured against the old Deployment, still targets the removed resource. The rest of this page covers those decisions and the build sequence for each router.

What you need in place before the first Rollout

A Rollout only behaves as designed when the platform under it is ready. The cards below cover the Argo CD and cluster baseline, the traffic router, the metrics source and the Git path that together let Argo CD and Argo Rollouts shift traffic, analyze results and report health.

A working Argo CD installation

Argo CD must already reconcile applications in the cluster where the Rollouts will run, so that Rollout manifests in Git are synced and their status appears in the Argo CD UI. Confirm which Argo CD minor version you run and check that it is still in the supported patch window described in the release process. Decide early whether Argo CD manages the Argo Rollouts controller itself or whether your platform team installs it separately.

A Kubernetes cluster you control

Progressive delivery adds controllers, ingress or mesh configuration and metric queries to the cluster, so the target must be one your team can change and roll back. Confirm with the Argo Rollouts documentation which controller release matches your Kubernetes and Argo CD versions, because this page does not pin one. Check that the cluster policy allows the Rollouts CRDs and the controller's service account to read Services, Ingresses and traffic-router objects.

A traffic router for shifting weight

Canary weights are applied by the traffic layer, so you must choose one of NGINX, AWS ALB, Apache APISIX, Istio, Linkerd or SMI before writing a Rollout. Each option has its own ingress or mesh objects, its own weight semantics and its own version constraints. Confirm that the router is installed, reachable from the stable and canary Services, and that the controller can read and write the objects it needs.

A metrics provider for analysis

Automatic promotion and rollback depend on a query that returns a result the controller can judge. Prometheus is the common choice, but Datadog and New Relic are also supported providers. Confirm that the provider already holds the request, error and latency series for the service, that queries return within the analysis interval, and that the platform team owns the alert and dashboard path that will show a failed analysis.

Git access for Rollout manifests

Rollout, AnalysisTemplate and traffic-router manifests should live in the same Git path as the rest of the application, so that a change to a canary step is reviewed like any other change. Confirm that the repository is registered with Argo CD, that its credentials are scoped to the application project, and that the team agrees who approves changes to analysis thresholds. Keep these manifests out of any path that Argo CD prunes unintentionally.

Ownership and rollback rights

Someone must be able to pause, promote, abort or roll back a Rollout at 2 a.m. without waiting for a Git change to merge. Name the people or group allowed to run these actions through the Argo Rollouts command line or UI, and confirm that the Argo CD project role grants them only the verbs they need. Agree in writing which team owns the analysis result when it fails.

Choosing the traffic router for canary weights

With NGINX, Argo Rollouts manages a stable Ingress and a canary Ingress for the same host, then changes the share of traffic sent to the canary as the rollout advances. The controller edits the canary Ingress settings that the NGINX ingress controller reads, so the request path stays the same and only the split moves. This is the most direct option when NGINX already fronts the application.

  • Existing ingress controller: The team must already run an NGINX ingress controller in the cluster, with the stable Ingress serving production traffic.
  • Managed canary Ingress: Argo Rollouts creates and updates the canary Ingress, so teams should not hand-edit it in Git alongside the rollout.
  • Annotation support: Confirm which canary annotations your controller version reads for weighted routing and whether the Argo Rollouts NGINX section covers that version.
  • Header and cookie rules: Confirm whether your controller version supports header-based or cookie-based routing to the canary before you rely on it for targeted testing.

Check the Argo Rollouts traffic routing documentation and your ingress controller's canary documentation together, since each project defines part of the behavior.

How to configure a canary Rollout in sequence

This sequence takes one existing Deployment managed by Argo CD and turns it into a canary Rollout with traffic routing and metric analysis, so each release is shifted, measured and promoted or rolled back from Git. Each step ends with a check you can run before moving on.

  1. Install the Argo Rollouts controller

    A platform engineer installs the Argo Rollouts controller and its CRDs into the target cluster, usually through the project's manifests or a Helm chart that your team has reviewed and pinned to a version. Confirm the controller version and the chosen install method with the Argo Rollouts documentation before you start. The step is complete when the controller pod is running in its namespace and the Rollout, AnalysisTemplate and Experiment resource types are available to kubectl. You can list them with kubectl get crd to confirm.

  2. Convert the Deployment into a Rollout

    In the Git repository that Argo CD watches, replace the Deployment manifest with a Rollout that keeps the same pod template, labels and selector, and add a canary strategy with ordered steps such as a small initial weight, a pause and a larger weight. Keep the change in its own commit so the diff is easy to review. Argo CD syncs the change, and the controller takes over the ReplicaSets. The check is kubectl argo rollouts get rollout <name> showing the Rollout as Healthy at the first step, with the stable and canary ReplicaSets listed.

  3. Define the traffic routing block

    Add a trafficRouting section to the canary strategy that names your router, such as NGINX, AWS ALB, Apache APISIX or Istio, and points to the stable and canary Services the controller should manage. The router-specific fields differ, so confirm them against the documentation for your ingress controller or mesh version. Your team owns the ingress or mesh objects that the router reads. The check is that the controller reports the expected canary weight on the router, and the traffic split matches that weight in your gateway metrics or the router's own status.

  4. Add an AnalysisTemplate for the metrics provider

    Create an AnalysisTemplate that runs a query against your metrics provider, for example a PromQL query against Prometheus for error rate or latency on the canary pods, and sets a success condition and failure limit. Use labels that separate canary from stable traffic so the query reads only the new version. Reference the template from the canary steps so the controller runs it during the rollout. The check is an AnalysisRun that completes with a Successful result when the metric is healthy, and a Failed result that triggers a rollback when it is not.

  5. Commit the change and let Argo CD sync

    Commit the Rollout, the routing configuration and the AnalysisTemplate to the same Git path, then let Argo CD detect the change and sync the application. Confirm that Argo CD shows the Application as Synced and that the Rollout health reflects the controller's state, since Argo CD reads Rollout health through the Argo Rollouts health check. Do not edit the live Rollout by hand, because the next sync would revert it. The check is the Application status in Argo CD matching the Rollout status reported by the controller.

  6. Promote or roll back and verify the result

    Run a new image version through Git, watch the canary steps advance, and confirm that the AnalysisRun passes before the rollout moves to full traffic. Then test a deliberately failing version in a non-production cluster to confirm that the analysis fails and the controller aborts and rolls back to the stable ReplicaSet. Record both results and the Argo CD sync history as evidence for your change process. The step is complete when both the promotion path and the rollback path have been observed.

How metric analysis decides promotion or rollback

The quality of a canary decision is only as good as the metrics the analysis run queries. An analysis run is the check Argo Rollouts performs during a canary step to decide whether the new version advances or aborts. If the query measures the wrong thing, or measures the right thing in a way that hides failures, the rollout will promote a bad release or roll back a good one. Before you wire any metric into an AnalysisTemplate, confirm that the series exist for the new and stable ReplicaSets, that labels distinguish the two, and that the query returns a value over the window you plan to use. Argo Rollouts documents Prometheus, Datadog, New Relic and other providers as sources, so the first decision is which system already holds the signals your service level depends on.

Prometheus pulls metrics over HTTP from targets it discovers or is configured to scrape, and analysis queries are written in PromQL. Prometheus documents that it values reliability over precision and is not a suitable choice where every event must be counted exactly, such as per-request billing. For rollout decisions this means a small gap in scrapes or a rate computed over a short window can shift a canary's error ratio enough to change the outcome. Plan the scrape interval and the analysis window together, and test the query against recent traffic before trusting it. Also decide where the data lives. Prometheus local storage is not clustered or replicated and should be operated like any single-node database, so a failed or rebuilt Prometheus can leave a rollout without history. If you need long-term retention or a replicated store, confirm the remote write setup and how the analysis query reaches the data during an outage.

Alertmanager serves a different purpose and should not be mistaken for the rollout gate. It groups, silences and routes alerts from Prometheus to people, and it can run as a cluster for high availability. Analysis runs decide promotion or rollback automatically, while Alertmanager notifies on-call engineers about conditions they should look at. Keep both: use analysis for the immediate release decision and alerts for the operational signal that follows. Confirm with your monitoring owners which metrics both paths depend on, since a metric that disappears will break promotion silently unless an alert also covers the missing data.

Which Rollout fields map to routers and metrics

This table maps the Rollout strategy fields for canary and blue-green releases to the Kubernetes objects, external systems and owning teams they touch. Use it to decide who sets each value and what to confirm against the Argo Rollouts documentation for your installed version. The main takeaway is that traffic weights, pause durations and analysis thresholds depend on decisions from three groups, so agree ownership before the first production Rollout.

Field or objectKubernetes object and external systemOwned by
Canary steps and setWeightRollout spec; the traffic router (NGINX, ALB, Istio or APISIX) receives the weightService team, agreed with platform team
Canary pause durationRollout spec steps; no external system, but Argo CD health waits on itService team
Blue-green activeService and previewServiceRollout spec; two Kubernetes Services selected by the RolloutPlatform team sets the pattern, service team names Services
Blue-green autoPromotionEnabledRollout spec; controls whether promotion waits for a manual stepService team with release owner approval
Traffic router settings (ingress, mesh or gateway reference)Rollout spec referencing Ingress, VirtualService or APISIX route; the router applies weightsPlatform team
AnalysisTemplate metric queriesAnalysisTemplate CRD; queries the metrics provider such as PrometheusService team writes queries, security reviews data sources
AnalysisTemplate success and failure conditionsAnalysisTemplate CRD; decides automatic rollbackService team with SRE sign-off
Metric provider credentials and endpointsKubernetes Secret or provider config; reaches the metrics systemSecurity team

Security controls for progressive delivery

A canary or blue-green release is only as trustworthy as the manifests, permissions and credentials behind it. The controls below cover who can change a rollout, what a service team can reach, and how analysis and traffic routing are protected.

Git review for rollout manifests

Rollout and AnalysisTemplate resources decide how much traffic reaches a new version and what counts as healthy. Treat changes to them like changes to production code: require review by someone outside the owning team for any edit to step weights, pause settings or analysis thresholds. Argo CD authenticates API requests only with JWTs, so the Git review gate is the control that decides who can alter a release. Check that branch protection covers the repositories holding rollout definitions.

Project boundaries for traffic changes

Argo CD projects limit which repositories, destination clusters and namespaces an application may use. Scope each service team's project so it cannot create or edit routing resources that belong to another service, such as a shared ingress or a mesh virtual service. Without this boundary, a team with sync rights can redirect traffic meant for someone else. Confirm that project roles grant sync access only for the team's own applications.

Least-privilege analysis credentials

Analysis runs query metrics providers such as Prometheus, Datadog or New Relic to decide whether a rollout proceeds. Give each analysis job a read-only credential limited to the metrics its template needs, and store it as a Kubernetes Secret in the namespace that runs the analysis. Do not reuse cluster-admin or write-capable tokens for this purpose. Argo CD redacts cluster, Git and OAuth2 credentials from API responses and logs, but analysis credentials stored in your own manifests need the same care.

Protecting the traffic router

NGINX, ALB, APISIX or Istio control the split between stable and canary traffic, so their admin interfaces are part of the release path. Restrict admin APIs and configuration endpoints to the controllers that need them, and limit who can edit gateway resources directly. For APISIX, the Admin API listens on port 9180 in traditional mode, so keep it off client-facing networks. Review whether the rollout controller's service account can change routing objects it does not own.

TLS between Argo CD components

Argo CD uses TLS for traffic between its own components, and the rollout controller depends on that path to read and update cluster state. Keep the default TLS configuration in place and do not disable it to simplify a test environment. Also keep the repo-server in mind: it runs Helm and Kustomize on repository content, so a rollout manifest sourced from an untrusted repository is a risk even when the rollout logic is sound. Confirm that only approved repositories feed the rollout applications.

Common failures in canary weights and analysis

This table lists the failures teams most often hit when canary weights or analysis runs misbehave, with the likely cause and first fix for each. Read it as a triage list: match the symptom you see, check the likely cause, then confirm the fix against the Argo Rollouts and Argo CD documentation for your installed versions.

SymptomLikely causeFix
Analysis run never completesThe metrics query returns no data, often because the label selectors do not match the canary pods or the metric provider has no samples yetRun the query by hand against the same provider, confirm the labels Argo Rollouts injects for canary and stable pods, and adjust the query or the analysis interval
Traffic weights do not changeThe traffic router configuration in the cluster differs from what Rollout declares, or the ingress or mesh object is managed by another toolCheck the Rollout status and the router object (NGINX, ALB, Istio or APISIX) for drift, remove competing manual edits, and confirm the router integration in the Argo Rollouts documentation
Application shows Progressing or Degraded during a paused stepA paused Rollout waiting for manual promotion or a timed pause is reported as not yet healthy by Argo CD's health checkConfirm the Rollout health assessment in the Argo CD version you run, promote or abort the Rollout intentionally, and review the Argo Rollouts health documentation for expected states
Rollback does not restore the stable ReplicaSetThe stable revision was never recorded correctly, or Git still declares the new image so Argo CD reapplies it after an abortRevert the image or spec in Git to the known-good revision, then confirm how the abort and stable pointer behave in the Argo Rollouts version you run
Sync fails because a Deployment and Rollout target the same workloadA leftover Deployment selects the same pods as the Rollout, or both resources are tracked by the same Argo CD applicationRemove the Deployment from Git and the cluster, keep only the Rollout, and check resource tracking settings in the Argo CD documentation for your version
Canary pods receive no traffic despite healthy statusThe stable and canary Services point to the wrong selectors, or the traffic router is not configured for the chosen strategyCompare the Service selectors with the pod template labels, then verify the traffic routing setup for your router against the Argo Rollouts documentation
Analysis passes but the release regressesAnalysis templates check too few signals, such as only error rate, or the sample window is too short to show slow degradationAdd latency and saturation checks, lengthen the analysis window where traffic allows, and confirm the metric semantics with your monitoring team
Manual promotion ignored after a syncArgo CD resyncs the Rollout from Git and overwrites the status or pause fields the team changed in the clusterDrive promotion through the Rollout tooling or Git-driven changes rather than direct edits, and confirm sync and ignore-difference behavior for your Argo CD version

What progressive delivery costs and what it asks from your team

What drives the cost of a progressive delivery setup with Argo Rollouts?

The cost depends mainly on how many services move to canary or blue-green releases, which traffic router and metric source they already use, and how much analysis logic has to be written. Cost comes from four places: design (choosing strategies per service and deciding what counts as a healthy release), configuration (Rollout resources, traffic routing and AnalysisTemplates), testing (proving that a bad release is caught and rolled back), and run support after go-live. Argo CD and Argo Rollouts themselves are open source under the Apache License 2.0, so the spend is on people, infrastructure and the time to build and maintain the setup. Ask any quote to list these four items separately, with the services in scope named.

Can our in-house platform team build progressive delivery without outside help?

Yes, many teams do, provided someone owns the Kubernetes, Argo CD and traffic routing skills at the same time. The harder parts are not the Rollout manifest itself but the traffic split, the metric queries that decide promotion, and the rollback path when analysis fails. Check whether your team already runs your ingress or service mesh in production, has a metrics backend that answers queries quickly, and can practice rollbacks outside business hours. If any of these is missing, an outside partner can cover that gap, and your team keeps the work it needs to run the setup afterwards.

How long does a progressive delivery implementation take?

Duration depends on the number of services, how many traffic routers and metric providers are involved, and how much existing deployment work must be converted. A single service on a router you already operate is much smaller than a fleet of services across two gateways and two monitoring stacks. Ask the partner to break the timeline into design, a pilot service, rollout to the remaining services, and a rollback test, and to name what has to be ready before each phase starts, such as cluster access, metric data and change approval.

What depends on our traffic router and metrics setup?

Traffic shifting and automatic rollback both depend on what is already in place. Argo Rollouts can shift traffic through NGINX, AWS ALB, Apache APISIX, Istio, Linkerd and SMI, and can drive promotion or rollback from metrics in providers such as Prometheus, Datadog and New Relic. Each router needs its own configuration, and each metric provider needs queries that return reliable data for the release window. Confirm which router handles production traffic for each service, which metric source reports error rate and latency, and whether those signals are trusted enough to stop a release automatically. Gaps here are often the largest source of extra work.

What does the work ask from our application and platform teams?

Application teams must define what a healthy release looks like for their service, including the error and latency thresholds, the warm-up period and the endpoints that represent real traffic. Platform teams provide the cluster, the ingress or mesh, Argo CD access, the metrics backend, and an approval path for production changes. Both teams should expect to review the first few releases together. Ask for a written list of who supplies each input and by which date, so the work does not stall waiting for access or metric definitions.

Does progressive delivery need ongoing tuning after go-live?

Yes, most setups need some ongoing tuning. Thresholds that fit one release period can produce false rollbacks after traffic patterns change, new services add metrics that need analysis, and Argo CD and Argo Rollouts releases bring version updates that must be tested on the same routing paths. These activities recur, so they belong in the run cost. Ask whether the quote includes a support period after go-live, what a tuning request costs under a retainer, and who on your side approves changes to analysis thresholds.

What should we request in a written scope before hiring a partner?

Request a scope that names each service in progressive delivery, the traffic router and metric provider for each, the strategy chosen (canary or blue-green), and the rollback criteria. Ask for the deliverables in writing: Rollout and AnalysisTemplate resources in Git, a documented promotion and rollback runbook, test evidence showing an automatic rollback, and handover of access and knowledge. Also ask which items are one-time and which recur, what is excluded, and how changes after signing are priced. Fixed-scope engagements agree these points before work starts, which makes comparing quotes far more reliable.

How DeployOpen scopes and delivers progressive delivery

DeployOpen plans, implements, tests and documents Argo Rollouts inside your Argo CD installation and the clusters you control. Each engagement starts from a written, fixed scope that names the workloads, traffic providers, metric sources and rollback rules before any build begins.

How we scope

  • Inventory which services get canary or blue-green releases and which stay on plain Deployments
  • Confirm the traffic provider for each cluster, such as NGINX, ALB, Istio or APISIX, before writing any Rollout
  • Agree the metrics, thresholds and rollback conditions that analysis will use, with owners named
  • Record scope, deliverables and timelines in writing, with ongoing support available as a retainer

How we build

  • Write Rollout resources and analysis templates in Git so Argo CD manages them like other manifests
  • Configure traffic shifting and verify weights against the chosen ingress or mesh in a non-production cluster
  • Set Argo CD health handling for Rollouts so paused or degraded releases show accurately in the UI
  • Test automatic rollback with deliberately failing revisions and document the observed behavior

How we hand over

  • Deliver a runbook covering promotion, abort, manual pause and rollback steps for each team
  • Document the metric queries, thresholds and the reasoning behind each analysis gate
  • Walk platform and application teams through the release flow using your own services as examples
  • Confirm access, RBAC scope and who may approve promotions before the handover closes

How we support

  • Review Argo Rollouts and Argo CD version changes against the release notes before upgrades are scheduled
  • Retest analysis templates when metric providers, labels or dashboards change
  • Available as a retainer for patching, upgrades, tuning and periodic release drills
  • Confirm support boundaries and response expectations in the written agreement

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.