Helm Charts erstellen
Chart-Grundgerüst
| Bereich |
Zweck |
Chart.yaml |
Metadaten zum Chart |
values.yaml |
Standardwerte für Templates |
charts/ |
Abhängigkeiten/Subcharts |
templates/ |
Kubernetes-Manifest-Templates |
templates/_helpers.tpl |
Hilfsfunktionen |
templates/deployment.yaml |
Deployment-Template |
templates/service.yaml |
Service-Template |
Chart.yaml
apiVersion: v2
name: webshop
description: Helm Chart für die Webshop-Anwendung
type: application
version: 0.1.0
appVersion: "1.0.0"
| Feld |
Bedeutung |
Beispiel |
apiVersion |
API-Version des Charts |
v2 |
name |
Name des Charts |
webshop |
description |
Beschreibung des Charts |
Helm Chart für die Webshop-Anwendung |
type |
Chart-Typ |
application |
version |
Version des Charts |
0.1.0 |
appVersion |
Version der ausgerollten Anwendung |
"1.0.0" |
values.yaml - Beispiel
values.yaml ist die zentrale Stelle für konfigurierbare Standardwerte.
replicaCount: 2
image:
repository: ghcr.io/example/webshop
tag: "1.0.0"
service:
type: ClusterIP
port: 80
Templates mit Values
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "webshop.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: webshop
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
| Ausdruck |
Zweck |
{{ include "webshop.fullname" . }} |
Namen über Hilfsfunktion einfügen |
{{ .Values.<key> }} |
Wert aus values.yaml verwenden |
Maps
Maps sind Key-Value-Strukturen und eignen sich für konfigurierbare Felder mit mehreren Unterwerten.
values.yaml
labels:
app.kubernetes.io/name: webshop
app.kubernetes.io/component: frontend
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
Im Template rendern
| Funktion/Pipe |
Zweck |
toYaml |
Map als YAML ausgeben |
nindent 4 |
Ausgabe korrekt mit 4 Leerzeichen einrücken |
nindent 8 |
Ausgabe korrekt mit 8 Leerzeichen einrücken |
metadata:
labels:
{{- toYaml .Values.labels | nindent 4 }}
spec:
containers:
- name: webshop
resources:
{{- toYaml .Values.resources | nindent 8 }}
Maps mit range iterieren
Mit range lassen sich beliebig viele Umgebungsvariablen dynamisch aus einer Map erzeugen.
Values als Map:
env:
LOG_LEVEL: info
FEATURE_FLAG_X: "true"
HTTP_PORT: "8080"
Template im Container:
env:
{{- range $name, $value := .Values.env }}
- name: {{ $name }}
value: {{ $value | quote }}
{{- end }}
| Bestandteil |
Zweck |
.Values.env |
Map mit Umgebungsvariablen |
$name |
Name der Umgebungsvariable |
$value |
Wert der Umgebungsvariable |
quote |
Wert als String quoten |
end |
Schleife beenden |
Wiederverwendung mit _helpers.tpl
Hilfsfunktionen reduzieren Copy/Paste, pflegen Namenskonventionen zentral und sorgen für einheitliche Ressourcen-Namen.
{{- define "webshop.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
| Ausdruck |
Zweck |
define "webshop.fullname" |
Hilfsfunktion definieren |
printf "%s-%s" .Release.Name .Chart.Name |
Release-Name und Chart-Name kombinieren |
trunc 63 |
Namen auf 63 Zeichen kürzen |
trimSuffix "-" |
Abschließenden Bindestrich entfernen |
include "webshop.fullname" . |
Hilfsfunktion in Templates verwenden |
Bedingte Ressourcen
Bedingte Ressourcen halten Charts flexibel für unterschiedliche Umgebungen.
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "webshop.fullname" . }}
spec:
rules:
- host: {{ .Values.ingress.host | quote }}
{{- end }}
| Ausdruck |
Zweck |
{{- if .Values.ingress.enabled }} |
Ressource nur rendern, wenn Ingress aktiviert ist |
{{ .Values.ingress.host | quote }} |
Ingress-Host aus Values einfügen und quoten |
{{- end }} |
Bedingung beenden |
Qualität sicherstellen
| Prüfung |
Befehl |
Zweck |
| Linting |
helm lint ./webshop |
Template-Syntax und Best Practices prüfen |
| Lokales Rendering |
helm template dev-webshop ./webshop |
Templates lokal rendern |
| Installationssimulation |
helm install dev-webshop ./webshop --dry-run --debug |
Installationslauf simulieren |
Chart paketieren
| Schritt |
Befehl |
Ergebnis |
| Abhängigkeiten aktualisieren |
helm dependency update ./webshop |
Abhängigkeiten werden aktualisiert |
| Chart paketieren |
helm package ./webshop |
Archiv webshop-0.1.0.tgz wird erstellt |