Ook interessant Op zoek naar AI-certificering? Bezoek ons zusje-platform Route-to-AI.com
Helm Cheatsheet & Gids

Helm en Helm Charts: complete gids voor Kubernetes package management

Helm is de package manager voor Kubernetes — vergelijkbaar met apt op Ubuntu of pip voor Python. In plaats van tientallen losse YAML-bestanden te beheren, bundel je alles in een Helm chart: één versioned pakket dat je kunt installeren, upgraden en terugdraaien met één commando. Helm is een officieel CNCF-project en is onderdeel van de examenstof voor CKA en CKAD.

Kernconcepten

  • Chart — het pakket zelf: YAML-templates, standaardwaarden en metadata
  • Release — een geïnstalleerde instantie van een chart in een specifieke namespace
  • Repository — een verzameling charts, vergelijkbaar met een apt-repository
  • Values — configuratiewaarden die de templates invullen; te overschrijven bij installatie
  • Revisie — elke installatie of upgrade maakt een nieuwe revisie aan; herstel is mogelijk naar eerdere revisies

Helm installeren

# Via script (Linux/macOS)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Via package manager
brew install helm                    # macOS
choco install kubernetes-helm        # Windows

# Versie verifiëren
helm version

Repositories beheren

# Repository toevoegen
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# Repositories bijwerken (als apt-get update)
helm repo update

# Zoeken
helm search repo nginx
helm search hub wordpress

Charts installeren en beheren

# Eenvoudige installatie
helm install mijn-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace

# Met aangepaste waarden
helm install mijn-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=2

# Droge run
helm install mijn-nginx ingress-nginx/ingress-nginx --dry-run --debug

# Releases weergeven
helm list -A

# Upgrade (of installeren als nog niet bestaat — ideaal voor CI/CD)
helm upgrade --install mijn-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace

# Terugdraaien
helm rollback mijn-nginx -n ingress-nginx
helm history mijn-nginx -n ingress-nginx

# Verwijderen
helm uninstall mijn-nginx -n ingress-nginx

Hoe de template engine werkt

Helm gebruikt Go-templates om YAML-manifesten te genereren. De templates bevatten placeholders ({{ .Values.replicaCount }}) die worden gevuld met waarden uit values.yaml en/of command-line overrides.

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mijn-app.fullname" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"

Rendering bekijken zonder te installeren

# Templates renderen (ziet precies wat naar het cluster gaat)
helm template mijn-release ./mijn-chart -f productie-values.yaml

# Valideren tegen de API server (dry-run)
helm install mijn-app ./mijn-chart --dry-run --debug

# Chart valideren
helm lint ./mijn-app

Waar Helm de release history opslaat

Helm slaat de release history op als Kubernetes Secrets in dezelfde namespace als de release. Elke revisie is een apart secret met de volledige staat (templates + values) gecodeerd in base64.

# Release history bekijken
helm history mijn-app -n mijn-namespace

# Secrets bekijken (Helm-interne opslag)
kubectl get secrets -n mijn-namespace | grep helm
# sh.helm.release.v1.mijn-app.v1   helm.sh/release.v1   ...

Eigen Helm chart bouwen

# Nieuwe chart aanmaken (scaffold)
helm create mijn-app

# Gegenereerde structuur:
# mijn-app/
# ├── Chart.yaml          # Chart-metadata
# ├── values.yaml         # Standaardwaarden
# ├── charts/             # Afhankelijke charts
# └── templates/          # YAML-templates

Helm hooks: pre- en post-lifecycle acties

Helm ondersteunt hooks: jobs of pods die op specifieke momenten in de lifecycle worden uitgevoerd, zoals database-migraties vóór een upgrade:

# templates/migration-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migratie
  annotations:
    "helm.sh/hook": pre-upgrade,pre-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      containers:
      - name: migratie
        image: mijn-app:{{ .Values.image.tag }}
        command: ["python", "manage.py", "migrate"]
      restartPolicy: Never

Upgrade en rollback in detail

# Upgrade met reuse van vorige values (PLUS de --set override)
helm upgrade mijn-app ./mijn-chart --reuse-values --set image.tag=2.0.0

# Upgrade + installeren als nog niet bestaat (ideaal voor CI/CD)
helm upgrade --install mijn-app ./mijn-chart 
  --namespace mijn-namespace --create-namespace 
  --set image.tag=$CI_COMMIT_SHA 
  --wait --timeout 5m

# Rollback naar specifieke revisie
helm rollback mijn-app 1 -n mijn-namespace

Helm in CI/CD pipelines

# GitLab CI voorbeeld
deploy:
  stage: deploy
  script:
    - helm repo add mijn-repo https://charts.voorbeeld.nl
    - helm repo update
    - helm upgrade --install mijn-app mijn-repo/mijn-app 
        --namespace productie --create-namespace 
        --set image.tag=$CI_COMMIT_SHA 
        --wait --timeout 5m

Helm-best practices

  • helm upgrade --install in CI — werkt bij eerste installatie én bij updates
  • --reuse-values gebruiken bij upgrades, anders worden waarden gereset naar defaults
  • Pin chart-versies in CI/CD — voorkomt verrassingen bij automatische updates
  • Chart-versie vs appVersion niet verwarren — Chart.yaml heeft twee versies: version (het chart) en appVersion (de applicatie)
  • Bewaar values-bestanden per omgeving — values-dev.yaml, values-productie.yaml

Helm in relatie tot certificeringen

  • CKAD — Helm is een examendoel: charts installeren, upgraden, waarden inspecteren en terugdraaien
  • CKA — Helm is beschikbaar als hulpmiddel voor cluster-componenten (Ingress, Cert-Manager)
  • EX380/CGOA — Helm wordt gebruikt in combinatie met Argo CD/Flux voor GitOps-deployments

Veelgestelde vragen

Wat is het verschil tussen Helm en Kustomize?

Helm gebruikt templating (Go-templates) en heeft een centrale chart-repository voor hergebruik. Kustomize werkt met overlays op bestaande YAML-bestanden zonder templating. Helm is beter voor complexe, configureerbare applicaties; Kustomize is beter voor eenvoudige omgeving-specifieke aanpassingen. Beide worden ondersteund door Argo CD en Flux.

Kan ik een chart terugdraaien na een mislukte upgrade?

helm rollback <release> zet de release terug naar de vorige werkende revisie. Helm bewaart standaard de geschiedenis van de laatste 10 revisies.