This is follow up and based on Helm v3 First Alpha Release is Out blog post.
Major changes introduced in Helm v3
So let's take a look at few new enhancements and changes:
- Obviously, Tiller has been removed so Tiller haters can sigh with relief. :)
- Release information is now stored in the Namespace.
helm initcommand has been removed.
- The Helm home directory has been located off user's home directory.
stablerepository is no longer added by default.
helm searchcommand has been refactored to have sub-commands that can search the local repositories and the Helm Hub.
Tiller is now part of history
In Helm v3, Tiller has been completely removed. With Tiller gone, the security model for Helm is way more simplified. Helm v3 now respects user permissions set in your
kubeconfig file and etc.
In Helm v3, release information about a particular release is now stored in the same namespace as the release itself. This means that users can now run
helm install wordpress stable/wordpress in two separate namespaces, and each can be referred with
helm list by changing the current namespace context.
Note: The namespace has to be pre created as Helm v3 will not create it for you.
Taking Helm v3 for a spin
Enough of talking, let's take Helm v3 for a spin.
Setting up Helm v3
As we want to use both Helm v3 beta and Helm v2 in our setup, we need to perform a few additional steps to ensure both versions can run simultaneously:
Download latest Helm v3 beta release from here, and rename binary to
helm3and store it to your
stablerepository was removed in Helm v3 we need to add it:
$ helm3 repo add stable https://kubernetes-charts.storage.googleapis.com $ helm3 repo update
As you see we did not use
helm init :)
Ok, so now we ready to use
Helm v3 stores release information in the namespace you do specify with
--namespace flag or if no namespace is specified current set namespace context will be used:
$ kubectl create ns nginx-ingress $ helm3 upgrade --install nginx-ingress -n nginx-ingress stable/nginx-ingress Release "nginx-ingress" does not exist. Installing it now. $ kubens nginx-ingress $ helm3 ls NAME NAMESPACE REVISION UPDATED STATUS CHART nginx-ingress nginx-ingress 1 2019-08-27 12:58:10.258455 +0100 BST deployed nginx-ingress-1.17.1
Ok, let's repeat the same steps to install a few more charts:
$ kubectl create ns myapp1 $ helm3 upgrade --install postgresql -n myapp1 stable/postgresql Release "postgresql" does not exist. Installing it now. $ helm3 upgrade --install memcached -n myapp1 stable/memcached Release "memcached" does not exist. Installing it now. $ kubens myapp1 $ helm3 ls NAME NAMESPACE REVISION UPDATED STATUS CHART postgresql myapp1 1 2019-08-27 13:09:03.909755 +0100 BST deployed postgresql-6.3.2 memcached myapp1 1 2019-08-27 13:09:41.035198 +0100 BST deployed memcached-2.9.0
As you can see
helm3 list only shows releases in the currently set namespace, which means deleting the namespace will delete all the releases there and all releases info as well. This is a much cleaner setup and more coherent. And now you can have multiple releases with the same release name for the same app using a different namespace per each release.
Very nice :)
kubens used in the example above is part of kubectx tool, check it out, it is very cool one.
New Helm search functionality
helm search command has been refactored to have sub-commands that can search the local repositories and the Helm Hub, let's check it out how it works.
$ helm3 search Search provides the ability to search for Helm charts in the various places they can be stored including the Helm Hub and repositories you have added. Use search subcommands to search different locations for charts. Usage: helm search [command] Available Commands: hub search for charts in the Helm Hub or an instance of Monocular repo search repositories for a keyword in charts
First let's search in local repositories:
$ helm3 search repo
As we have only added
stable repository, it will show the list of charts available there, any of them can be installed with
Ok, now I want to use cert-manager to secure my ingresses with Let's Encrypt certs, and I know it has it's own helm repository:
$ helm3 search hub cert-manager URL CHART VERSION APP VERSION DESCRIPTION https://hub.helm.sh/charts/emberstack/reflector 2.19197.5 A Helm chart to deploy Reflector https://hub.helm.sh/charts/choerodon/cert-manager 0.1.0 0.1.0 A Helm chart for cert-manager https://hub.helm.sh/charts/jetstack/cert-manager v0.10.0-alpha.0 v0.10.0-alpha.0 A Helm chart for cert-manager
Nice, I got a list of all helm repositories which have
cert-manager chart, as I know the
cert-manager is done by Jetstack, and I want to install that chart.
Note: Here is a little catch,
helm3 search hub only shows repositories which are part of the Helm Hub, but to install the chart from there you have to first add it to your local helm repositories list:
$ helm3 repo add jetstack https://charts.jetstack.io $ helm3 repo update
Only now you can install the charts from the
jetstack helm repository.
Please read the Release Notes for more detailed information:
About the notable changes done in Helm v3, please read Helm blog post.
Friendly warning: Do not use Helm v3 beta in production!!!
In the mean time if you want to have a similar functionality with Helm v2 as Helm v3 provides, in production you can use Tillerless Helm v2, please read my blog post about it.
If you are JFrog Artifactory user, check it out my blog post Charting Helm Hub Through Artifactory on how you can leverage Helm-hub-sync utility which helps you create and maintain a virtual Helm chart repository in JFrog Artifactory: self-hosted Helm Hub which can be used by the Helm client.