Argo Rollouts 1.4 Release

Zach Aller
Argo Project
Published in
3 min readJan 9, 2023

--

We have just released Argo Rollouts 1.4! This release had 34 contributors, of which 23 where first timers, and includes 157 commits, thank you for all the contributions! This release adds 11 new features and 12 bug fixes along with a lot of other improvements. Let’s dive into a few key things that were included in the release.

Designed by Freepik

Fast Rollback Window by Number of Revisions

Argo Rollouts now supports the ability to do a fast rollback based on the number of revisions. A fast rollback is a rollback that does not run through all of the steps of a rollout. This is generally useful when you have detected some issue outside of an active rollout and you want to rollback as fast as possible and not wait to run through different analysis steps that are configured within the rollout. You can read more about it in the docs found here.

Contributed by Alex Eftimie

Apache APISIX Support

A new traffic router which enables users to use Apache’s APISIX cloud native gateway is now available. This traffic router currently only supports SetWeight steps but is open to contributions to support other features. You can read more about it in the Argo Rollouts docs here.

Contributed by Gallardot

Dynamic Shell Completion

We have added tab dynamic shell completion for a core set cli commands. This currently supports getting the names of rollouts and experiments upon tab completions and thanks to the use of Cobra, completions should work with bash, fish, zsh, and powershell. You can export the config for completions for you particular shell such as bash or fish with these command.

kubectl-argo-rollouts completion bash > /etc/bash_completion.d/rollouts.sh
kubectl-argo-rollouts completion fish > ~/.config/fish/completions/rollouts.fish

This currently only works for non kubectl plugin commands aka you have to use kubectl-argo-rollouts and not kubectl argo rollouts as a command.

If you are running kubectl 1.26+ you can also add a this bash script as an executable on your PATH and it should work as a kubectl plugin command such as kubectl argo rollouts

#!/usr/bin/env bash
args=("$@")
kubectl-argo-rollouts __complete "$@"

Contributed by Thomas Riccardi

Leader Election Refactor

There was a big refactor in leader election which should now be able to handle more edge cases such as slow or unresponsive Kubernetes API servers. The biggest behavior change in this refactor is that when a leader loses it’s leadership the pod will be terminated. This is the proper usage of Kubernetes leader election API and prevents edge cases where two controllers could end up running at the same time.

Contributed by Zach Aller

Minimum Pods Per Replicaset

Argo Rollouts now allows you to set a minimum number of pods per replicaset during a canary rollout. This enables high availability during a rollout ensuring that the stable or canary replicaset will never go below the minimum configured. You can see a small snippet of where this configuration lives within the Rollout object below.

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: min-pods
spec:
strategy:
canary:
# The minimum number of pods that will be requested for each ReplicaSet
# when using traffic routed canary. This is to ensure high availability
# of each ReplicaSet.
minPodsPerReplicaSet: 3

Contributed by ssanders1449

General Improvements

A focus of this release was fixing bugs and cleaning up some technical debt in the process. There have been numerous improvements to the build pipeline such as signed executables and docker images, thanks to Justin Marquis for contributing this work. We have also started enforcing conventional pull request titles to be able to have auto generated change logs, you can see these here.

The docs site at https://argo-rollouts.readthedocs.io has been updated and now track the stable release by default and also has latest and previous release options. This can be found in the drop down menu at the top of the site.

For a full list of changes check out the new auto generated readme here.

--

--