Argo Rollouts, the Kubernetes Progressive Delivery Controller, Reaches 1.0 Milestone
Tags: devops, cloudskills, kubernetes, argo
Published: 2021-05-26 14:43:13

[Argo Rollouts](https://argoproj.github.io/argo-rollouts/), part of the [Argo project](https://argoproj.github.io/), recently released their 1.0 version. You can see the changelog and more details [on the Github release page](https://github.com/argoproj/argo-rollouts/releases/tag/v1.0.0).

If you are not familiar with Argo Rollouts, it is [a Kubernetes Controller](https://kubernetes.io/docs/concepts/architecture/controller/) that deploys applications on your cluster. It replaces the default rolling-update strategy of Kubernetes with more [advanced deployment methods](https://argoproj.github.io/argo-rollouts/concepts/) such as blue/green and canary deployments.

In addition, it supports integration with several metrics providers to automatically promote/roll back your deployment according to live metrics.

We have already covered some example scenarios in previous blog posts:

* [Blue/Green deployments with Smoke tests](https://codefresh.io/continuous-deployment/minimize-failed-deployments-argo-rollouts-smoke-tests/)
* [Canary deployments with Prometheus](https://codefresh.io/continuous-deployment/recover-automatically-from-failed-deployments/)

We also have [a dedicated documentation page](https://codefresh.io/docs/docs/ci-cd-guides/progressive-delivery/) with more scenarios.

## New graphical user interface

The most user-visible feature in the 1.0 release is the introduction of a [dedicated graphical user interface](https://argoproj.github.io/argo-rollouts/dashboard/). Previously, you could monitor the status of a rollout from the command line or see status health with the ArgoCD dashboard.

In this release, Argo Rollouts includes its user interface:

![Argo Rollouts UI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2bfe6va3vql1cfaa0hs9.png)

The GUI includes all the information you need about a rollout:

* Current deployment strategy
* Total number of steps and current deployment step
* Current status of the rollout (paused, progressing, degraded, etc.)
* Number of replicas for the previous and current deployment
* Container images for the previous and current deployment

Note that unlike ArgoCD, where the interface is part of the controller, in Argo Rollouts the interface is launched from the CLI and runs on your machine.

You can still use the CLI to monitor deployments as well:

![Argo Rollouts CLI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0o2hc4erkut2xyqn6bm8.png)

Similar information is offered both ways.

## Use existing Kubernetes Deployment objects

Argo Rollouts works by monitoring changes in a Kubernetes custom resource aptly named Rollout.

You can see the full details on the [Rollout Specification page](https://argoproj.github.io/argo-rollouts/features/specification/). The Rollout resource is compatible with [the standard Deployment resource](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) but includes extra fields that define the progressive delivery options.

This means that until recently if you wanted to use Argo Rollouts, you had to convert your existing Deployment objects to Rollouts. The process was not very difficult, but it was challenging for Argo Rollouts to cooperate with other Kubernetes tools that only understand Deployments.

With the 1.0 release, Argo Rollouts also supports an alternative format for Rollouts. You can now keep all Rollout specific information in the custom CRD and just mention an existing deployment:

```yaml
apiVersion: argoproj.io/v1alpha1               # Create a rollout resource
kind: Rollout
metadata:
  name: rollout-ref-deployment
spec:
  replicas: 5
  workloadRef:                                 # Reference an existing Deployment using workloadRef field
    apiVersion: apps/v1
    kind: Deployment
    name: rollout-ref-deployment
  strategy:
    canary:
      steps:
        - setWeight: 20
        - pause: {duration: 10s}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/instance: rollout-canary
  name: rollout-ref-deployment
spec:
  replicas: 0                                  # Scale down existing deployment
  selector:
    matchLabels:
      app: rollout-ref-deployment
  template:
    metadata:
      labels:
        app: rollout-ref-deployment
    spec:
      containers:
        - name: rollouts-demo
          image: argoproj/rollouts-demo:blue
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
```

This means that you can still use all your favorite tools with Argo Rollouts, even those that do not understand CRDs.

See the [documentation page](https://argoproj.github.io/argo-rollouts/migrating/#reference-deployment-from-rollout) for more details.

## Official container image with the CLI

Codefresh pipelines are based on containers. Each step in a Codefresh pipeline is a docker image that is created either by you or loaded by an existing registry (private or public).

Previously, we had to maintain our container image for Argo Rollouts to integrate with container-based pipelines.

This is no longer necessary because Argo Rollouts released [an official container image](https://argoproj.github.io/argo-rollouts/installation/#using-the-cli-with-docker) with the CLI.

You can find all image releases at [https://quay.io/repository/argoproj/kubectl-argo-rollouts](https://quay.io/repository/argoproj/kubectl-argo-rollouts)

## Ambassador support for traffic splitting

In the case of canaries, Argo Rollouts supports several networking solutions for splitting live traffic between the previous and current versions in a gradual way.

![Canary split](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mvvc8z5rswj3pp31j0ob.png)

With the 1.0, Ambassador Edge Stack is now added as an official provider for traffic routing. This means that you can use Ambassador for [canary releases](https://www.getambassador.io/docs/argo/latest/quick-start/) in addition to the other already supported solutions.

This feature is also a testament to the fact that Argo Rollouts does not need a full service mesh to gradually shift traffic. 

Ambassador Edge Stack of course has several other features that are useful to have on a Kubernetes cluster (ingress services, SSO, external authentication, etc.) on their own.

## Start your progressive delivery journey now

The 1.0 release contains several fixes and features. Some highlights are:

* [Dedicated status CLI command](https://github.com/argoproj/argo-rollouts/pull/1001) 
* [support scaleDownDelaySeconds in canary](https://github.com/argoproj/argo-rollouts/pull/1056)
* [New RolloutCompleted condition](https://github.com/argoproj/argo-rollouts/pull/1074)
* [metric fields can be parameterized](https://github.com/argoproj/argo-rollouts/pull/901)
* [ARM builds](https://github.com/argoproj/argo-rollouts/pull/889) 

Get started now by following the [installation instructions](https://argoproj.github.io/argo-rollouts/installation/).