Bereitstellen mit Helm

Abgeschlossen

Sie haben Ihre Staging- und Produktionsimages erfolgreich erstellt und auf Ihre Container Registry-Instanz übertragen. Jetzt können Sie alle Schritte automatisieren und die Pipeline für sich arbeiten lassen.

Derzeit müssen Sie Dateien bei jeder Ausführung der Pipeline manuell ändern, sodass sie keine automatische Bereitstellung durchführen können. Um dieses Problem zu beheben, können Sie ein Helm-Diagramm für die Verwaltung Ihrer Bereitstellungen verwenden. In dieser Lektion erfahren Sie mehr über Helm-Diagramme und -Vorlagen.

Helm-Diagramme

Helm ist ein Open-Source-Pakettool, das Linux-Paketmanagern wie APT und Yum ähnelt. Helm kann Ihnen beim Installieren und Verwalten des Lebenszyklus von Kubernetes-Anwendungen helfen.

Sie verwenden Helm zum Verwalten von Kubernetes-Diagrammen, bei denen es sich um Gruppen von einer oder mehreren Workloads handelt, die mit Konfigurationsdateien und einer Diagrammbeschreibungsdatei verpackt sind. Wenn Sie in einem Diagramm gepackt sind, können die Dateien problemlos als Einheit für einen Kubernetes-Cluster bereitgestellt werden.

Einer der Vorteile der Verwendung von Helm besteht darin, Dateien nicht einzeln bereitstellen zu müssen. Sie können einen einzelnen Befehl zum Bereitstellen des Diagramms ausgeben. Sie können sogar mehrere abhängige Diagramme mit automatischer Abhängigkeitsauflösung bereitstellen.

Die Struktur eines typischen Helm-Diagrammverzeichnisses sieht wie folgt aus:

Screenshot that shows an example of a Helm chart tree.

  • Die Datei Chart.yaml enthält den Namen, die Beschreibung und die Version des Diagramms.
  • Das Verzeichnis Diagramme enthält abhängige Diagramme.
  • Das Verzeichnis Vorlagen enthält alle Manifestdateien.
  • Die Datei values.yaml enthält die Standardwerte für die Helm-Vorlagen.

Helm-Vorlagen

Ein besonderes Merkmal des Helm-Tools ist seine Möglichkeit, Vorlagen zu erstellen und zu verwalten, um automatisierte Bereitstellungen auszuführen. Mithilfe von Vorlagen können Manifestdateien automatisiert und einer CI/CD-Pipeline hinzugefügt werden. Eine Vorlagendatei ist eine Manifestdatei, die Platzhalter für Variablenwerte enthält.

Betrachten wir das folgende Beispiel der Datei deployment.yaml im Verzeichnis kubernetes Ihres Websiteforks:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-website
spec:
  selector:
    matchLabels:
      app: contoso-website
  template:
    metadata:
      labels:
        app: contoso-website
    spec:
      containers:
        - image: !IMAGE!
          name: contoso-website
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          ports:
            - containerPort: 80
              name: http

Der Workflow ersetzt den Platzhalter „!IMAGE!“ durch die Container Registry-Instanz und den Imagenamen. In einem manuellen Workflow können Sie den folgenden Befehl ausführen, um den Platzhalter „!IMAGE!“ zu ersetzen und dann das Ergebnis zu drucken. Um den Code manuell auszuführen, können Sie den Befehl „kubectl apply -f -“ per Pipeline weitergeben, um die Workloads zu erstellen:

$ sed 's+!IMAGE!+'"$ACR_NAME"'/contoso-website+g' kubernetes/deployment.yaml

Diese Lösung ist jedoch weder elegant noch effizient. Mit der nativen Vorlagenerstellung von Helm können Sie stattdessen !IMAGE! durch die Variable „{{.Values.containerImage}}“ ersetzen.

...
  template:
...
    spec:
      containers:
        - image: {{.Values.containerImage}}
...

Anschließend führen Sie helm install aus, um auf Ihr Image zu verweisen und den Ordner Diagramme zu übergeben:

$ helm install contoso-website ./chart-location --set containerImage="$ACR_NAME/contoso-website"

Helm bietet auch Vorlagenfunktionen für komplexere Logik, z. B. zum Einschließen von Standard- und erforderlichen Werten in Ihrer Umgebung. Fahren Sie mit der nächsten Einheit fort, um ein Helm-Diagramm zu erstellen und so Ihre CI/CD-Pipeline effizienter zu gestalten.

Überprüfen Sie Ihr Wissen

1.

Was ist Helm?

2.

Was macht Helm besonders nützlich in einer CI/CD-Pipeline?