Helm is package manager for Kubernetes, helm deploys charts that are packages of pre-configured kubernetes resources, think of helm as apt/yum/homebrew for Kubernetes.
Benefits of Helm
- Find and use popular software packaged as Kubernetes charts.
- Share applications as Kubernetes charts.
- Create reproducible builds for Kubernetes applications.
- Intelligently manage Kubernetes object definitions.
- Manage releases of Helm packages.
INstalling Helm
Windows – choco install kubernetes-helm
macOS – brew install helm
Debian/Ubuntu
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
please refer to Helm official documentation for more installation types.
Generate sample chart
Best way to create helm chart is by running “helm create command”, run the command in the directory of your choice.
helm create azsrini (azsrini is name of my chart, use name of your choice)
Helm will create a new directory “azsrini” with file hierarchy shown below.
there are four main components in Helm:
- Chart.yaml
- Values.yaml
- Templates.yaml
- Charts Directory for other charts
Chart.yaml has required information describing what the Chart is about, with a name and version. There is more information that can be included in the Chart.yaml, but that is the minimum.
Values.yaml file is where you define values to be injected/interpreted by the templates, values are represented key value pair and can be defined as nested values, there can be multiple values.yaml for different environments/namespaces, example : customvalues.yaml and this file can be passed during install like helm install -f customvalues.yaml ./azsrini
Template is where Helm finds the YAML definitions for your Services, Deployments and other Kubernetes objects. Helm leverages Go Templating if there is conditional logic needing to be included in the Templates.
Charts Directory for other Chart is where dependencies or sub charts are placed.
Chart Dependencies :
In Helm, one chart can depend on another chart(s), These dependencies can be dynamically linked using the dependencies
field in Chart.yaml
or brought in to the charts/
directory and managed manually.
I have added sample dependency from azure helm samples, running “helm dependency update” will add dependency to charts folder, like the below

You could also add sub charts by going into charts folder and running “helm create sub-chart“, this will create entire chart hierarchy structure in charts folder.
Deploying Charts
Sample chart created above has two pods defined (including dependency) and can be deployed to kubernetes by running helm install command, I’m installing the sample chart on Azure kubernetes cluster, this will install template file and also dependencies
helm install {name of deployment} {chartlocation}
ex: helm install azsrini-helm ./azsrini

Pods and Services deployed using Helm


Debugging Helm Templates
Debugging templates can be tricky because the rendered templates are sent to the Kubernetes API server, which may reject the YAML files for reasons other than formatting. There are few commands that can help debug.
helm lint
to verify chart follow best practiceshelm install --dry-run --debug
orhelm template --debug
to view yaml templates are deployed.helm get manifest
to view templates that are installed on the server.
Upgrade Helm package
when you have newer version of chart, helm deployment can be upgraded to new version by running helm upgrade command. Helm upgrade takes the existing release and upgrades to information provide. I updated version to 0.1.1 and appversion to 1.16.1 in chart.yaml and upgraded my deployment, helm list will show newer chart version and app version.
Rollback Helm deployment
Helm deployment can be rolled back to previous version easily by running helm rollback, you can use helm history command to view all the previous deployment and rollback to the desired revision.
Helm package
we have been working with unpacked charts so far, if you want to make chart public or deploy to repository, charts need to be packaged to tar file, all publicly available charts are tar files. charts can be packaged using helm package command, this will create tar file and save to working directory, helm names the package with the metadata in chart.yaml {name}-{version}.tgz. helm packages can be installed using same helm install command.
Helm Repository
Helm repository is place where helm package are stored and shared, it can be any http server that can serve YAML and tar files, checkout Artifact Hub for community distributed charts. there are several options for hosting chart repositories, like ChartMuseum(open source), GitHub, Hashicorp vault, JFrog antifactory, GCS bucket,S3 bucket or Azure storage.
Conclusion
I haven’t discussed in-depth about injecting values, template functions, control flows or scopes, I highly recommend to refer to Helm official documentation and GO template functions at https://godoc.org/text/template.
Useful links
I found starter tutorials at https://jfrog.com/blog/10-helm-tutorials-to-start-your-kubernetes-journey/ very helpful.
Helm official documentation – https://helm.sh/
Helm commands – https://helm.sh/docs/helm/helm/
Helm charts for kubernetes
Tweet