Helm is the package manager for Kubernetes. It bundles Kubernetes manifests into versioned charts so you can install, upgrade, and roll back applications with a few commands.
Why Helm?
- Simpler installs: One command to deploy complex apps (ingress, services, deployments, config).
- Versioned releases: Track which version of an app is running and roll back if needed.
- Reusability: Share charts across teams; keep values separate from templates.
- Customization: Override values to fit your cluster (domains, images, resources).
Key concepts
- Chart: A package of Kubernetes manifests plus templates and default values.
- Release: A chart instance running in a cluster (e.g.,
my-app). - Repository: A server hosting versioned charts (e.g.,
https://charts.bitnami.com/bitnami). - Values: Configuration inputs that parameterize the chart.
Basic workflow
# add a repo
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# install a chart
helm install my-nginx bitnami/nginx
# list releases
helm list
# upgrade with custom values
helm upgrade my-nginx bitnami/nginx -f values.yaml
# rollback to a previous version
helm rollback my-nginx 1
# uninstall
helm uninstall my-nginx
Customizing with values
Create a values.yaml to override defaults, then apply:
helm upgrade --install my-app myrepo/mychart -f values.yaml
Typical overrides: image tags, resources, ingress hosts/TLS, environment variables, autoscaling, and persistence.
Templates and charts
- Templates: Go templating renders manifests from values.
- Charts structure:
Chart.yaml(metadata),values.yaml(defaults),templates/(manifests),charts/(dependencies). - Packaging:
helm package .creates a.tgzyou can publish to a repo.
Best practices
- Pin chart versions; avoid auto-latest surprises.
- Keep secrets out of plain values; use external secrets or encrypted stores.
- Use
--atomicon installs/upgrades to auto-rollback on failure. - Lint charts with
helm lintand test templates withhelm template. - Separate env configs (dev/stage/prod) via values files.
When not to use Helm?
If you need full GitOps with pull-based sync (e.g., Argo CD/Flux), Helm still fits—but you may let the GitOps tool render Helm charts. If you have very simple static manifests, Helm may be overkill.
Helm makes installing and managing Kubernetes apps predictable: add a repo, install a chart, tweak values, and roll forward or back with confidence.