Zum Inhalt

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