Argo Rollouts progressive delivery with Canary deployment

Jamal Shahverdiev
2 min readSep 3, 2022

--

This article explains Argo Rollouts Canary deployment. I will not try to explain what is it Canary and Blue/Green with rolling because we can find tons of information about that from internet. Before starting to simulate all flow I want to say that official documentation of Argo Rollouts is wonderful. To understand all flow, I read all important points from Argo Rollouts official page and Repository provided by them. I want to inform that if we want to understand how Argo Rollouts does canary deployment, then we must understand canary deployment method of application which Argo Rollouts itself use. For example in case of Nginx we must understand how weight work there. Another example in case of Istio we must to understand how istio can do canary (at least we must understand how works VirtualService, DestinationRule and Gateway) deployment. At the same time we must understand how we can work with metrics (at least with Prometheus). So it means Argo Rollouts brings us the way which will automate canary deployment with guarantee. One important point I want to say that at canary deployment time, Argo Rollouts going to collect and compare metrics just to be sure must it continue to increase size of traffic to the new version of the application or do rollback. To test all these flow we must to have ready Kubernetes cluster with pre installed Argo Rollouts and Istio.

Clone the following repository because all flow will be presented by this repo.

$ git clone https://github.com/argoproj/rollouts-demo.git && cd rollouts-demo/examples/istio-subset/

After changing to your needs of YAML files we must apply them to start tests as in video:

$ ns_name=$(cat namespace.yaml | grep name | awk '{ print $2 }'); all_yamls=$(ls | grep -v kustom); for yaml in $all_yamls; do kubectl apply -f $yaml -n $ns_name; done

In the TMUX terminal we can exeute in three different places the following commands to see all flow in the real time:

$ watch -n4 'kubectl get virtualservice -n rollouts-demo-istio istio-rollout-vsvc -o yaml | tail -n 10'
$ kubectl argo rollouts -n rollouts-demo-istio get rollout istio-rollout --watch
$ kubectl apply -f rollout.yaml -n rollouts-demo-istio

To simulate it we can look at this video:

I hope it will be useful.

--

--