
Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: July 6, 2024
Helm is a versatile package manager for Kubernetes. It provides advanced functions for locating packages and their specific versions, as well as performing complex installations and custom deployments.
In this tutorial, we explore release upgrades and the Helm rollback mechanism. First, we look at releases and upgrade one to see the result. After that, we go through the release change history. Finally, we perform rollbacks to specific states.
We tested the code in this tutorial on Debian 12 (Bookworm) with GNU Bash 5.2.15 and Helm 3.14.2. Unless otherwise specified, it should work in most POSIX-compliant environments.
Helm charts turn into Helm releases upon installation:
$ helm install banzaicloud-stable/satellite --generate-name --version 0.0.3
NAME: satellite-1709766601
LAST DEPLOYED: Sun Mar 3 03:03:24 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
In this case, the banzaicloud-stable/satellite chart is installed as the satellite-1709766601 release:
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART
satellite-1709766601 default 1 2024-03-03 03:03:24.286660388 -0500 EST deployed satellite-0.0.3
As expected, we see satellite-0.0.3 is the chart of the new release. Further, the current REVISION is 1.
If we keep a release long enough, an updated chart can be published for it. Then, we can upgrade to the newer version via the upgrade subcommand:
$ helm upgrade satellite-1709766601 banzaicloud-stable/satellite --version 0.0.4
Release "satellite-1709766601" has been upgraded. Happy Helming!
NAME: satellite-1709766601
LAST DEPLOYED: Wed Mar 3 10:00:00 2024
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
At this point, we can see that the REVISION number changed to 2.
Let’s verify the version as well:
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART
satellite-1709766601 default 2 2024-03-03 10:00:00.881000667 -0500 EST deployed satellite-0.0.4
So, we have the satellite-1709766601 release with two revisions.
As we already saw, if a release has gone through at least one upgrade, it has a trail of revisions.
These revisions comprise a history of chart deployment states, mainly differing by version. This log can be helpful in different situations:
In any case, to bring a release to an older revision, we use the rollback subcommand.
Before rolling back, we usually employ the history subcommand to get the current revision list for a given release:
$ helm history satellite-1709766601
REVISION UPDATED STATUS CHART DESCRIPTION
1 Sun Mar 3 03:03:24 2024 superseded satellite-0.0.3 Install complete
2 Sun Mar 3 10:00:00 2024 deployed satellite-0.0.4 Upgrade complete
Here, we supply the satellite-1709766601 release name. As a result, we see its revisions in order. Each revision has a number identifier, date, current STATUS, CHART name, and activity DESCRIPTION.
This way, we know which revisions are deployed, which are available, and how to identify each.
At this point, we should be ready to perform a rollback:
$ helm rollback satellite-1709766601 1
Rollback was a success! Happy Helming!
Specifically, we request a rollback of release satellite-1709766601 to revision 1.
In this case, we can also do the same but with no specific revision :
$ helm rollback satellite-1709766601
Without indicating a revision number, rollback assumes we want to restore the release to its previous revision. Notably, we might have to specify the –namespace if the release is outside the default namespace.
Either way, the operation is complete. Due to the ephemeral nature of this deployment, we don’t see any complications. Still, persistent volumes and persistent volume claims can make this action more prone to issues.
Conveniently, if we turn on Helm autocompletion, we can also press Tab after the helm rollback command to get a list of releases and after adding a release name to get an overview of its revisions:
$ helm rollback satellite-1709766601 [Tab]
1 (App: , Chart: satellite-0.0.3) 3 (App: , Chart: satellite-0.0.3)
2 (App: , Chart: satellite-0.0.4)
This way, we don’t need to always run a history check unless more details are necessary.
Notably, we see that there are now three revisions, as also confirmed by history:
$ helm history satellite-1709766601
REVISION UPDATED STATUS CHART DESCRIPTION
1 Sun Mar 3 03:03:24 2024 superseded satellite-0.0.3 Install complete
2 Sun Mar 3 10:00:00 2024 superseded satellite-0.0.4 Upgrade complete
3 Sun Mar 3 13:00:00 2024 deployed satellite-0.0.3 Rollback to 1
As the DESCRIPTION of revision 3 shows, this is because rollbacks produce revisions as well.
By default, the revision count limit is 10. However, both the upgrade and rollback subcommands support the –history-max option to modify that.
If specified, the argument to –history-max can set the revision count limit to a positive integer with 0, indicating we allow unlimited revisions.
Similar to the install subcommand, rollback offers several advanced features:
By leveraging the above, we can augment the rollback just like a new installation.
In this article, we talked about Helm release upgrades and rollbacks.
In conclusion, since Kubernetes deployments are often complex, failing upgrades may cause a lot of problems while rolling back to a revision with a single command can restore functionality.