☸️ Some changes between Helm v2 and Helm v3 that you should know
Tags: helm, devops, kubernetes
Published: 2020-01-29 13:04:47

I was working on deploying an application on Kubernetes with Helm v3, then I decided to do the same while using Helm v2 this time to validate the possibility of migration from helm2 to helm3.   
In this article, I want to share with you some of the changes between v2 & v3, that I faced in my task when I verified the validation of my Chart and when I deployed my application with these two helm versions.

Helm v3 introduces some changes in:

 * Adios Tiller
 * Helm v2 vs v3 commands.
 * Chart apiVersion.
 * Chart dependencies.
 * Helm package command.
 * Route object in chart.
 * helm search command.
 * How to migrate from helm2 to helm3?

  **1. Adios Tiller:**    
In Helm v3 tiller is gone, and there is only Helm client 😊.

  **2. Helm v2 vs v3 commands:**  
Some commands are not supported or renamed in Helm v3:

|Command | Helm2  | Helm3 |
| ------------- |:-------------:|:-------------:|
| Initialize Helm client/server | init  |  |
| Download a chart to your local directory |  fetch | pull  |
| Given a release name, delete the release from Kubernetes |  delete | uninstall  |
| Helm client environment information |  |  env |
| Displays the location of HELM_HOME | home |  |
| Inspect a chart | inspect |  show |
| Uninstalls Tiller from a cluster | reset |  |

  **3. Chart apiVersion:**  
Helm decides to increment the chart API version to v2 in Helm3:

```dif
# Chart.yaml
-apiVersion: v1 # Helm2
+apiVersion: v2 # Helm3
...
```

  **4. Chart dependencies:**  
Helm v2 chart has a specific file called 'requirements.yaml' where dependencies are added under the dependencies section. With Helm v3 this section are moved from **requirements.yaml** to **Chart.yaml**.   
More information about this change can be found in the [official documentation](https://helm.sh/docs/faq/#consolidation-of-requirements-yaml-into-chart-yaml).

  **5. Helm package command:**  
Running helm package command with Helm v2 will raise a `directory name (foo) and Chart.yaml name (bar) must match` error if the Chart name does not match the Chart root folder name.  With Helm v3 this constraint is not compulsory.

  **6. Route object in Chart:**   
Unlike the Helm v2, route object in Helm v3 chart requires host and status fields.

```diff
apiVersion: v1
kind: Route
metadata:
  name: {{ include "toto.name" . }}
spec:
+  host: {{ .Values.host }}
  to:
    kind: Service
    name: {{ include "toto.name" . }}
    weight: 100
  port:
    targetPort: 'http'
  wildcardPolicy: None
+status: 
+  ingress: []
+  wildcardPolicy: None

```

 **7. helm search command:** 

With **helm v2** you can use `helm search [CHART_NAME]` command to search for a chart in both your repo list and in helm hub.  
With **Helm v3** you have to specifie where to look for your chart .
```
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
```

  **8. How to migrate from helm2 to helm3:**  
Helm team made a good helm plugin called `helm-2to3` that **facilitates** :

 * Migration of Helm v2 configuration, data, plugin and releases to Helm v3.
 * Clean up Helm v2 configuration, release data, and Tiller deployment.

Here is full documentation about this plugin: https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/



Happy Helming folks 😊❤️️ !!!