What is Helm?
Helm is a package manager for Kubernetes. Think of it like apt for Ubuntu or brew for macOS, but for Kubernetes apps.
Instead of manually writing and applying many YAML files, Helm lets you install an app from a reusable package called a chart. A chart contains templates, defaults, and metadata for deploying an application.
How helm install works
When you run helm install, Helm acts as the brain of the workflow:
- It pulls the chart (from a Helm repo, local folder, or
.tar.gz). - It renders templates locally using your values (
values.yamland/or--set). - It sends final manifests directly to the Kubernetes API server using your kubeconfig permissions.
- It stores release state in a Kubernetes Secret in the target namespace.
That Secret includes:
- The chart used
- The values you passed
- The release revision (v1, v2, v3, …)
You can inspect Helm release secrets with:
kubectl get secrets -l "owner=helm" -AYou will see names like:
sh.helm.release.v1.my-app.v1This is how Helm remembers state for upgrades and rollbacks without an external database.
Quick demo: install something real
Here is a simple example using Bitnami NGINX:
# 1) Add a chart repohelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo update
# 2) Install into a namespacehelm install web bitnami/nginx -n demo --create-namespace
# 3) Confirm resourceskubectl get all -n demo
# 4) Confirm Helm release trackinghelm list -n demokubectl get secrets -n demo -l "owner=helm"This flow shows the practical loop: install the app, confirm Kubernetes resources are running, then confirm Helm recorded the release correctly.
How helm upgrade works
helm upgrade is smarter than a blind overwrite. Helm compares:
- Old state (stored release Secret)
- Live state (what is running now)
- New chart + new values
Then it computes what changed and sends targeted patches.
Example: if only the image tag changed, Helm patches the Deployment and usually leaves unrelated resources alone.
Because Helm 3 uses a three-way merge approach, it can often preserve safe live changes (like a manual scale) unless your new chart explicitly conflicts.
After a successful upgrade, Helm writes a new release revision Secret (for example, from v1 to v2).
That is why rollback is easy:
helm rollback my-app 1Helm re-applies manifests from the stored previous revision.
Practical commands to use
# Installhelm install my-app ./chart -n demo --create-namespace
# Preview without applyinghelm upgrade --install my-app ./chart -n demo --dry-run
# See release historyhelm history my-app -n demoIf you want a cleaner preview of upgrades, use the helm-diff plugin before applying changes.
Final take
Helm is valuable because it makes Kubernetes deployments repeatable, versioned, and reversible. You get faster app delivery with safer upgrades and rollback built in.