KCNA — Helm Package Manager

3 minute read

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 -f or --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.

Next: ArgoCD and Flux →

Updated: