- Helm 1.0 — Feb 2016
- Helm 2.0 — Nov 2016
- Helm 3.0 — Nov 2019

- Helm 2: included a server-side component named Tiller. The Helm client communicated with Tiller, and Tiller acted against the Kubernetes API with broad cluster privileges.
- Helm 3: removed Tiller. The Helm client now talks directly to the Kubernetes API using the caller’s credentials. Kubernetes RBAC applies to the user or service account running the Helm commands.
helm are governed by the same RBAC rules as kubectl.
In Helm 3 there is no Tiller. Helm runs as a client that talks directly to the Kubernetes API using the caller’s credentials, so RBAC policies apply consistently.

- Each
helm installcreates a revision (a snapshot of the release state). helm upgradecreates a new revision.helm rollbackcreates another revision that reverts the release to a previous state.
- Helm 2 stored release manifests as the historical source of truth inside Tiller.
- During upgrades or rollbacks, Helm 2 compared the stored release manifest (previous revision) with the newly rendered manifest (chart + values) to compute the diff.
- If an operator made manual changes directly in the cluster (for example
kubectl set image), those live changes were not recorded in Tiller’s stored manifests. Helm 2’s rollback could therefore miss reverting manual changes because they weren’t represented in the stored release history.
- Helm 3 improves correctness by computing a three-way strategic merge using:
- The chart/resource definitions in the target revision you want to revert to.
- The chart/resource definitions in the currently deployed revision (the last stored release manifest).
- The live state of the resources in the cluster.
- Preserve manual, intentional live changes where appropriate.
- Correctly compute patches to revert fields back to the target revision when needed.
- Make upgrades and rollbacks more resilient and predictable in environments where operators sometimes make direct edits.
wordpress:5.8-apache while revision 1 expects wordpress:4.8-apache, and will generate the necessary strategic patch to restore the desired revision state.
Upgrades with local changes
- Helm 2: manual changes on live objects were often overwritten or lost during upgrades because Helm only considered stored manifests and the chart diff.
- Helm 3: because the live state is an explicit input, Helm can avoid unintentionally discarding manual changes and can make more nuanced merge decisions during upgrades.
Further reading and references
- Helm official docs: https://helm.sh/docs/
- Kubernetes RBAC concepts: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
- Helm 3 release notes: https://helm.sh/blog/helm-3-released/