rimusz blog

Cloud computing, clusters, containers, Kubernetes, Helm ...

Helm v3 First Alpha Release is Out

Finally after a loong wait, the first public Helm v3 alpha release has been announced. Hurrah!

Major changes introduced in Helm v3

So let's take a look at few new enhancements:

  • Obviously, Tiller has been removed so Tiller haters can sigh with relief. :)
  • Release information is now stored in the Namespace.

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.

Release information

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.

Taking Helm v3 for a spin

Enough of talking, let's take Helm v3 for a spin.

Setting up Helm v3

As we do not want to destroy our Helm v2 local setup (as both versions store data in the same place by default), we need to perform additional steps to ensure both versions can run simultaneously.
Please don't test it on production cluster.

  1. Download Helm v3 alpha release from here, and rename binary to helm3 and store it to your path.

  2. Create a shell script named h3 and store it to your path as well:

#!/bin/bash
export HELM_HOME=$HOME/.helm3
helm3 $*

What it will do, it will set helm home folder to .helm3, so such setup allows us to use both Helm versions from the same machine/container/user.

  1. Set it up locally:
$ h3 init
$ h3 repo update

Ok, so now we ready to use h3.

Installing charts

Note: Helm v3 stores release information in the current set namespace. To install releases you do not specify --namespace flag as it was temporally removed, but the functionality will be added later one, for now you have to change namespace context:

$ kubectl create ns nginx-ingress
$ kubens nginx-ingress

$ h3 upgrade --install nginx-ingress stable/nginx-ingress
Release "nginx-ingress" does not exist. Installing it now.

$ h3 ls
NAME            NAMESPACE       REVISION    UPDATED                                 STATUS      CHART
nginx-ingress   nginx-ingress   1           2019-05-16 12:58:10.258455 +0100 BST    deployed    nginx-ingress-1.6.3

Ok, let's repeat the same steps to install a few more charts:

$ kubectl create ns myapp1
$ kubens myapp1

$ h3 upgrade --install postgresql stable/postgresql
Release "postgresql" does not exist. Installing it now.

$ h3 ls
NAME        NAMESPACE   REVISION    UPDATED                                 STATUS      CHART
postgresql  myapp1      1           2019-05-16 13:09:03.909755 +0100 BST    deployed    postgresql-4.2.1

$ h3 upgrade --install memcached stable/memcached
Release "memcached" does not exist. Installing it now.

$ h3 ls
NAME        NAMESPACE   REVISION    UPDATED                                 STATUS      CHART
postgresql  myapp1      1           2019-05-16 13:09:03.909755 +0100 BST    deployed    postgresql-4.2.1
memcached   myapp1      1           2019-05-16 13:09:41.035198 +0100 BST    deployed    memcached-2.7.2

As you can see helm list only shows releases in the same 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 :)

Note: kubens used in the example above is part of kubectx tool, check it out, it is very cool one.

Additional Reading

I recommend reading about the other changes:

  • Chart dependency management requirements
  • No auto-generated name by default
  • Pushing Charts to OCI Registries
  • CLI Command Renames

Please read the Release Notes for more detailed information.

Production use

Friendly warning: Do not use Helm v3 alpha in production!!!

If you want to have a similar fucntionality as Helm v3 provides, in production you can use Tillerless Helm v2, please read my blog post about it.

Rimas Mocevicius

Cloud Native, Kubernetes, Co-founder of Helm, CKA, CoreOS Essentials book author, Kubernaut at JFrog

Vilnius, Lithuaniahttps://rimusz.net