Helm‑Best Practices: Versionierung, Struktur und Deployment‑Strategien¶
Helm ist das offizielle Paket‑Management‑Tool für Kubernetes. Es vereinfacht das Installieren, Versionieren und Verwalten von Anwendungen im Cluster. Doch wie genau verwendet man Helm effektiv, um clustersichere, wartbare und versionierte Deployments zu erstellen? In diesem Artikel erhalten Sie einen praxisorientierten Leitfaden zu Best Practices für Helm, die Ihnen helfen, Helm‑Charts sauber zu strukturieren, Versionen nachvollziehbar zu halten und Deployments sicher und automatisiert zu steuern.
📦 1. Helm‑Grundlagen und Projektstruktur¶
Ein Helm‑Chart ist ein Paket, das alle Ressourcen enthält, die ein Kubernetes‑Manifest benötigen: Templates, Values, Dependencies und Hooks. Eine gut strukturierte Verzeichnisstruktur ist entscheidend für Wartbarkeit und Wiederverwendbarkeit.
Empfohlene Verzeichnisstruktur¶
mychart/
├─ Chart.yaml # Metadaten (Name, Version, Description)
├─ values.yaml # Standard‑Standardwerte
├─ templates/ # Jinja‑ähnliche Templates (.yaml)
│ ├─ deployment.yaml
│ ├─ service.yaml
│ ├─ ingress.yaml
│ └─ tests/
│ └─ test-connection.yaml
├─ templates/_helpers.tpl # Wiederverwendbare Vorlagen
├─ .helmignore # Wie .gitignore – ignoriert unnötige Dateien
└─ requirements.yaml # Abhängigkeiten zu anderen Charts
Warum diese Struktur?¶
- Trennung von Code und Konfiguration:
templates/enthält nur Templates,values.yamlenthält anpassbare Werte. - Test‑Ordner: Enthält Tests (mit
helm test), um die Installation zu verifizieren. .helmignore: Verhindert, dass unnötige Dateien in das Chart‑Archiv gelangen (z. B.node_modules,\node_modules).requirements.yamlermöglicht Versionierung und Wiederholbarkeit von Abhängigkeiten.
💡 Tipp: Nutze
helm lintzum Überprüfen der Chart‑ strukturellen Integrität, bevor du versionierst.
🔖 2. Versionierung & Releasing¶
2.1. Semantische Versionsierung (SemVer)¶
- Format:
MAJOR.MINOR.PATCH - MAJOR: Breaking Changes (z. B. API‑Änderungen)
- MINOR: Backward‑kompatible Funktionserweiterungen
- PATCH: Fehlerbehebungen, keine Funktionsänderungen
Praxis:
- Bei jedem Release ein neuer Git‑Tag: v1.2.3
- Helm‑Chart‑Version in Chart.yaml muss mit Git‑Tag übereinstimmen.
# Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for my application
version: 1.2.3 # → entspricht Git‑Tag v1.2.3
appVersion: "1.2.3"
2.2. Automated Releasing mit CI/CD¶
- Git‑Tag → CI‑Pipeline →
helm package→helm repository update→ Upload zu Chart‑Repository (z. B. ChartMuseum). - Automatisierte Tests (Lint, Test‑Templates) laufen vor dem Publish.
Beispiel GitHub‑Actions-Snippet:
name: Helm Release
on:
push:
branches: [ main ]
tags: [ 'v*.*.*' ]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Helm
uses: azure/setup-helm@v2
with:
version: v3.14.0
- name: Package Chart
run: helm package mychart --destination . --maturity-mode=stability
- name: Upload Package
uses: actions/upload-artifact@v3
with:
name: helm-package
path: ./mychart-*.tgz
🎯 Resultat: Jeder Git‑Tag löst automatisch ein Helm‑Package‑Release aus, das versioniert und testet wird.
🛡️ 3. Sicherheit & Compliance¶
4.1. Helm‑Chart‑Signing¶
- Helm 3 unterstützt signature verification über
helm key. - Prozess:
- Schlüsselpaar erzeugen (
helm key generate). - Chart signieren (
helm sign mychart-1.2.3.tgz --key signing.key). - Empfänger prüft Signatur (
helm verify mychart-1.2.3.tgz).
Resultat: Nur signierte Charts können installiert werden, falls das Repository nicht uneingeschränkt vertraut.
4.2. Scan‑Policyen¶
- Antes‑Install‑Scans: Nutzen Sie Trivy oder Grype, um Container‑Images im Chart zu prüfen, bevor sie deployed werden.
- Chart‑Lint prüft strukturelle Integrität und Syntax.
# Beispiel: Trivy-Scan eines Images, das im Chart referenziert wird
trivy image --severity CRITICAL mychart-image:1.2.3
🧪 5. Test‑Strategien für Helm‑Charts¶
Helm bietet eingebaute Test‑Hooks, die nach einem helm install ausgeführt werden.
5.1. Beispiel‑Test‑Template (templates/tests/test-connection.yaml)¶
apiVersion: v2
kind: Service
metadata:
name: {{ .Release.Name }}-test-connection
annotations:
"helm.sh/hook": test
"helm.sh/hook-delete-policy": hook-succeeded, before-serve
spec:
containers:
- name: wget
image: busybox
command: ["/bin/sh", "-c", "wget http://{{ .Release.Name }}.{{ .Release.Namespace }}:{{ .Values.service.port }}/healthz -q -O- && echo OK"]
---
Ausführen:
Vorteile:
-Automatisierte Verifikation, bevor ein Release als „deployed“ gilt.
-Can be extended with custom scripts (curl, curl‑health, curl‑metrics).
📚 5. Weiterführende Ressourcen¶
| Thema | Quelle | Link |
|---|---|---|
| Helm Documentation | Official Helm Docs | https://helm.sh/docs/ |
| Semantic Versioning 2.0.0 | Spec | https://semver.org/ |
| Helm Test Lifecycle | Helm Docs | https://helm.sh/docs/chart_tests/ |
| Helm Security – Signing | Helm Docs | https://helm.sh/docs/topics/chart_signing/ |
| CNCF Landscape – Helm | CNCF | https://landscape.cncf.io/?selection=tool=helm |
| Helm-best‑practices repo | GitHub | https://github.com/helm/helm-bloc |
✅ Zusammenfassung¶
- Struktur: Saubere Verzeichnisaufteilung (
Chart.yaml,values.yaml,templates/,tests/). - Versionierung: SemVer und Git‑Tags nutzen, automatisierte CI‑Pipelines für Release.
- Sicherheit: Chart‑Signing, Chart‑Lint, Image‑Scanning (Trivy).
- Tests: Helm‑Test‑Templates validieren Deployment‑Health.
- Deployment‑Strategien: Canary, Blue‑Green, Rolling‑Update via Helm
--setoder--values.
Durch die Anwendung dieser Praktiken wird Ihr Helm‑Workflow robust, nachvollziehbar und sicher – ideal für Produktion und Continuous‑Delivery‑Umgebungen.
Dieser Artikel wurde am 2026‑04‑06 erstellt. Helm‑Praxis entwickelt sich kontinuierlich; prüfen Sie regelmäßig die offizielle Helm‑Dokumentation für Updates.