KCNA — Helm Package Manager
Helm — The Kubernetes Package Manager
Helm is the standard package manager for Kubernetes. It simplifies deploying and managing complex applications by packaging Kubernetes manifests into reusable charts. Helm is a CNCF Graduated project.
Why Helm?
Without Helm, deploying a complex application requires managing many YAML files:
Without Helm:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
kubectl apply -f ingress.yaml
kubectl apply -f hpa.yaml
...repeat for each environment with different values
With Helm:
helm install my-app ./my-chart --values production.yaml
Key Concepts
Chart
A chart is a package of Kubernetes resources — like an apt/yum package but for Kubernetes.
my-chart/
├── Chart.yaml # Chart metadata (name, version, description)
├── values.yaml # Default configuration values
├── templates/ # Kubernetes manifest templates
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── ingress.yaml
├── charts/ # Sub-chart dependencies
└── README.md
Values
Values are the configuration that customizes a chart for a specific deployment.
# values.yaml (defaults)
replicaCount: 1
image:
repository: nginx
tag: "1.25"
service:
type: ClusterIP
port: 80
Override for production:
# production-values.yaml
replicaCount: 5
image:
tag: "1.25.3"
service:
type: LoadBalancer
Release
A release is an instance of a chart deployed to a Kubernetes cluster.
# Install creates a release
helm install my-web ./nginx-chart
# You can have multiple releases of the same chart
helm install web-prod ./nginx-chart --values prod.yaml
helm install web-staging ./nginx-chart --values staging.yaml
Repository
A repository is where charts are stored and shared.
# Add a chart repository
helm repo add bitnami https://charts.bitnami.com/bitnami
# Search for charts
helm search repo nginx
# Install from repository
helm install my-nginx bitnami/nginx
Helm Templates
Helm uses Go templating to generate Kubernetes manifests:
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
Template variables come from:
.Values— user-provided values.Release— release metadata (name, namespace).Chart— chart metadata from Chart.yaml
Helm Commands
| Command | Description |
|---|---|
helm install |
Install a chart (create a release) |
helm upgrade |
Upgrade an existing release |
helm rollback |
Rollback to a previous release revision |
helm uninstall |
Remove a release |
helm list |
List all releases |
helm status |
Show status of a release |
helm template |
Render templates locally (without installing) |
helm repo add |
Add a chart repository |
helm search repo |
Search for charts in repos |
Lifecycle
# Install
helm install my-app ./chart --values values.yaml
# Upgrade (new version)
helm upgrade my-app ./chart --values values.yaml
# Rollback to previous version
helm rollback my-app 1
# Uninstall
helm uninstall my-app
Helm vs Kustomize
Both tools manage Kubernetes manifests, but they take different approaches:
| Aspect | Helm | Kustomize |
|---|---|---|
| Approach | Templating — fill in variables | Patching — overlay changes on base manifests |
| Language | Go templates | Plain YAML with strategic merge patches |
| Packaging | Charts (packaged, versioned) | Directories of YAML files |
| Repository | Helm repos, OCI registries | Git repositories |
| Learning Curve | Higher (template syntax) | Lower (plain YAML) |
| Built-in | Requires Helm CLI | Built into kubectl (kubectl apply -k) |
They can also be used together — Helm for open-source chart installation, Kustomize for environment customization.
KCNA Exam Tips
- A chart is a package of K8s resources; a release is a deployed instance of a chart
- values.yaml provides default configuration; override with
-for--set - Helm uses Go templates to render manifests
- Know key commands:
install,upgrade,rollback,uninstall - Helm is a CNCF Graduated project
- Understand Helm vs Kustomize: templates vs patches
- helm template renders manifests locally without deploying — useful for review and CI
What’s Next?
Explore ArgoCD and Flux — the GitOps tools that automate continuous delivery on Kubernetes.