π§ How to Use Helm Charts Like a Pro β The Complete Guide (2025 Edition)
If Kubernetes is the engine, then Helm is your package manager, template engine, and deployment accelerator β all rolled into one.
But many teams stop at helm install
and miss the real power of Helm.
In this blog, you’ll learn how to use Helm like a pro β from writing your first chart to customizing, templating, and even building enterprise-grade Helm workflows.

π§ 1. What Is Helm (and Why Use It)?
Helm is the Kubernetes package manager, similar to:
apt
for Ubuntunpm
for Node.jspip
for Python
Helm lets you:
- Package K8s manifests into reusable charts
- Template values dynamically
- Share charts across teams or the public
- Upgrade, rollback, and manage releases
π¦ 2. Understanding Helm Charts
A chart is a folder containing everything needed to deploy a Kubernetes app.
π§ Helm Chart Structure:
myapp/
βββ Chart.yaml # Metadata
βββ values.yaml # Default values
βββ templates/ # K8s YAML templates
β βββ deployment.yaml
β βββ service.yaml
β βββ ingress.yaml
βββ charts/ # Dependencies (other charts)
π§ͺ 3. Installing Your First Helm Chart
Letβs say you want to install nginx using a public chart:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install my-nginx bitnami/nginx
install
: Deploys the chartmy-nginx
: Release namebitnami/nginx
: Chart location
π§Ό To uninstall:
helm uninstall my-nginx
π 4. Customizing Charts with values.yaml
Charts are powerful because theyβre dynamic.
You can override any default value by:
helm install my-nginx bitnami/nginx --values custom-values.yaml
Or override inline:
helm install my-nginx bitnami/nginx \
--set service.type=NodePort \
--set replicaCount=3
π‘ Use helm show values bitnami/nginx
to view all default config options.
βοΈ 5. Writing Your Own Helm Chart
Create a boilerplate chart:
helm create myapp
Now edit:
Chart.yaml
β name, versionvalues.yaml
β your appβs configtemplates/deployment.yaml
β your logic using Go templating
π§ Template Example:
replicas: {{ .Values.replicaCount }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
This makes your charts dynamic β you change values, and the manifest adapts automatically.
π§© 6. Template Functions & Go Templating Tips
Helm templates use the Go templating engine.
Some helpful syntax:
{{ default "nginx" .Values.image.name }}
{{ include "mychart.fullname" . }}
{{ toYaml .Values.env | indent 8 }}
Advanced functions:
required
,lookup
,hasKey
if
,range
,with
blockstpl
for rendering nested templates
π Reference: Helm Templating Docs
π§° 7. Upgrades, Rollbacks & Diffing Changes
Update a release:
helm upgrade myapp ./myapp
Rollback to a previous version:
helm rollback myapp 1
Preview changes (install diff plugin first):
helm plugin install https://github.com/databus23/helm-diff
helm diff upgrade myapp ./myapp
π 8. Helm Repositories & Chart Sharing
You can host private or public Helm charts in a repo.
Create your own Helm repo:
- Package your chart:
helm package myapp/
- Host it on GitHub Pages or S3
- Add it to others:
helm repo add myrepo https://myorg.github.io/charts helm install app myrepo/myapp
𧬠9. Helm Chart Dependencies
In Chart.yaml
:
dependencies:
- name: redis
version: 17.0.0
repository: https://charts.bitnami.com/bitnami
Install with dependencies:
helm dependency update
Use this to bundle services (e.g., app + Redis + RabbitMQ) into a single installable unit.
π 10. Helm and Security
Concern | Helm Feature |
---|---|
Secret management | Use external tools like Vault or Sealed Secrets |
Signature verification | Use helm verify with signed charts |
Role-based install limits | Combine with K8s RBAC |
Template injection risks | Sanitize user-provided values carefully |
π 11. Helm in CI/CD Pipelines
Integrate Helm with:
- GitHub Actions
- GitLab CI
- ArgoCD (for GitOps)
Example GitHub Action Step:
- name: Helm Upgrade
run: helm upgrade myapp ./myapp --install --values values.prod.yaml
Combine with:
- Linting (
helm lint
) - Testing (
helm test
) - Diffing (
helm diff
)
π§ͺ 12. Helm Testing and Linting
Before deployment, validate your chart:
helm lint ./myapp
Test deployed charts:
helm test myapp
This ensures quality and correctness before pushing to production.
π― Pro Tips for Helm Mastery
Tip | Why It Matters |
---|---|
Use helm template | Preview YAML before applying |
Use values schemas (values.schema.json ) | Validate required values |
Organize charts into monorepos | Easier team collaboration |
Leverage subcharts | Compose modular charts for microservices |
Secure secrets externally | Donβt store secrets in values.yaml |
π Final Thoughts
Helm makes deploying to Kubernetes simple, repeatable, and powerful.
From simple charts to enterprise-grade CI/CD pipelines, Helm is an essential DevOps tool that enables:
β
Declarative deployments
β
Reusability & scalability
β
Clean environment separation
β
GitOps-native workflows
Learn Helm once, and it will streamline every Kubernetes deployment you do from now on.
Leave a Reply