Docs

Canary releases

Configure Argo Rollouts canary deployments for Facets services: set rollout behavior, trigger a release, monitor pods, then promote or abort.

Overview

Canary deployment in Facets is an Argo Rollouts-based deployment strategy that incrementally rolls out changes to a subset of your infrastructure before promoting to the full environment. It reduces risk by validating changes in a limited scope before full production exposure.

Supported Resource Type: service


Prerequisites

  • A service resource configured in your Facets blueprint.
  • A Kubernetes cluster with Argo Rollouts (included with Facets).

Required permissions:

  • Plan Release / Apply Release Plan: to trigger releases.
  • Promote: graduate a canary to stable. Abort: halt a canary rollout.

Step 1: Configure Canary Strategy on the Service Resource

In your service resource configuration JSON, set the deployment strategy to Canary and define rollout behavior:

{
  "spec": {
    "release": {
      "strategy": {
        "type": "Canary",
        "canary_strategy": {
          "enable_auto_abort": true,
          "auto_abort_timeout": 120,
          "max_surge": "1",
          "max_unavailable": 0,
          "min_ready_seconds": 30,
          "progress_deadline_seconds": 600,
          "scale_down_delay_seconds": 30
        }
      }
    }
  }
}

Key Configuration Options

Every key below sits under spec.release.strategy.canary_strategy on the service resource. Options left unset fall back to the default shown.

OptionTypeDefaultDescription
max_surgestringunsetMaximum number of pods that can be created over the desired replica count.
max_unavailableintegerunsetMaximum number of pods that can be unavailable during the update.
min_pods_per_replicasetinteger1Minimum number of pods kept in each ReplicaSet during the rollout.
min_ready_secondsinteger0Seconds a new pod must stay ready before it counts as available.
stepsarrayunsetOrdered canary steps (set weight, pause, run analysis). Passed through to the Argo Rollouts steps list.
enable_manual_rolloutbooleanfalseStarts the rollout paused so it advances only when you promote it.
progress_deadline_secondsinteger600Maximum time the rollout has to make progress before it is marked failed.
progress_deadline_abortbooleanfalseAborts the rollout when the progress deadline is exceeded.
enable_auto_abortbooleanfalseAttaches an auto-abort analysis template to the rollout.
auto_abort_timeoutinteger3600Seconds the canary may run before auto-abort fires. Read only when enable_auto_abort is true.
analysisobjectunsetAnalysis templates to run against the canary: template_names and optional args.
traffic_routingobjectunsetTraffic-routing configuration passed through to Argo Rollouts, for splitting traffic via your ingress or mesh.
anti_affinityobjectunsetAnti-affinity rules applied to the canary pod set.
stable_metadataobjectunsetExtra labels and annotations applied to the stable pod set.
canary_metadataobjectunsetExtra labels and annotations applied to the canary pod set.
scale_down_delay_secondsintegerunsetDelay before the old ReplicaSet is scaled down after a successful promotion.
scale_down_delay_revision_limitintegerunsetNumber of old ReplicaSets kept alive during the scale-down delay.
abort_scale_down_delay_secondsinteger30Delay before the canary ReplicaSet is scaled down after an abort.
revision_history_limitinteger3Number of old ReplicaSets retained for rollback.
rollback_window_revisionsintegerunsetNumber of revisions eligible for a fast rollback.
successful_run_history_limitinteger10Number of successful analysis runs kept in history.
unsuccessful_run_history_limitinteger10Number of unsuccessful analysis runs kept in history.
restart_atstringunsetTimestamp at which the rollout restarts its pods.
Key configuration options for a canary release strategy in Facets

Step 2: Trigger a Release

  • Navigate to your Project → Environment in the Facets UI. Go to Releases and click Trigger Release.
  • Select the service resource(s) with canary strategy configured.
  • Click Plan to preview the release changes (dry-run).
  • Review the plan output and click Apply to begin the canary rollout.
  • Facets will initiate the Argo Rollouts controller, which creates the canary pod set alongside the stable set.

Step 3: Monitor the Canary Rollout

During an active canary rollout, monitor progress via:

  • Live Insights & Operations dashboard: real-time pod-level metrics (CPU, memory, restart count).
  • Kubernetes Dashboard: pod status, events, and deployment progression.
  • Kubernetes Events Dashboard: filter events by namespace to track rollout activity.

Watch for:

  • Pod restart frequency or CrashLoops in canary pods.
  • Elevated error rates or latency from canary traffic.
  • progress_deadline_seconds breaches indicating a stuck rollout.

Step 4: Promote or Abort

Promote (Graduate Canary to Stable)

If the canary is healthy and validated:

  • In the Facets UI, navigate to the resource's Live Tab. Click the Promote action.
  • This advances the canary version to stable and scales down the old stable pods.

Manual vs. automatic promotion: A canary advances through its configured steps on its own. Set enable_manual_rollout: true to start the rollout paused instead, so it only moves forward when you click Promote. The canary strategy has no timed auto-promotion setting; auto_promotion_seconds belongs to the blue-green strategy.

Abort (Rollback Canary)

If issues are detected:

  • Click the Abort action in the UI.
  • Argo Rollouts immediately stops the canary rollout and scales the canary pods down, restoring full traffic to the stable version.

Automatic abort: If enable_auto_abort: true and the rollout exceeds auto_abort_timeout seconds, Facets aborts automatically, preventing prolonged exposure to a faulty update.


Canary Metadata (Optional)

You can apply distinct labels and annotations to stable vs. canary pod sets for observability and traffic filtering:

{
  "stable_metadata": {
    "labels": { "track": "stable" },
    "annotations": {}
  },
  "canary_metadata": {
    "labels": { "track": "canary" },
    "annotations": {}
  }
}

This is useful for routing canary traffic through a separate ingress path or for filtering metrics by deployment track in your monitoring stack.