Eine Einführung in Helm, den Package Manager für Kubernetes

Einführung

Das Bereitstellen von Anwendungen auf Kubernetes - dem leistungsstarken und beliebten Container-Orchestrierungssystem - kann komplex sein. Das Einrichten einer einzelnen Anwendung kann das Erstellen mehrerer voneinander abhängiger Kubernetes-Ressourcen wie Pods, Dienste, Bereitstellungen und Replikatsätze umfassen, für die jeweils eine detaillierte YAML-Manifestdatei geschrieben werden muss.

Helm ist ein Paketmanager für Kubernetes, mit dem Entwickler und Betreiber Anwendungen und Dienste einfacher auf Kubernetes-Clustern verpacken, konfigurieren und bereitstellen können.

Helm ist jetzt ein offizielles Kubernetes-Projekt und Teil vonCloud Native Computing Foundation, einer gemeinnützigen Organisation, die Open-Source-Projekte im und um das Kubernetes-Ökosystem unterstützt.

In diesem Artikel geben wir einen Überblick über Helm und die verschiedenen verwendeten Abstraktionen, um die Bereitstellung von Anwendungen für Kubernetes zu vereinfachen. Wenn Sie Kubernetes noch nicht kennen, kann es hilfreich sein, zuerstAn Introduction to Kubernetes zu lesen, um sich mit den grundlegenden Konzepten vertraut zu machen.

Ein Überblick über Helm

Fast jede Programmiersprache und jedes Betriebssystem verfügt über einen eigenen Paketmanager, der bei der Installation und Wartung der Software hilft. Helm bietet die gleichen grundlegenden Funktionen wie viele der Paketmanager, mit denen Sie möglicherweise bereits vertraut sind, z. B.aptvon Debian oderpipvon Python.

Helm kann:

  • Software installieren.

  • Software-Abhängigkeiten automatisch installieren.

  • Software aktualisieren.

  • Konfigurieren Sie Softwarebereitstellungen.

  • Abrufen von Softwarepaketen aus Repositorys.

Helm bietet diese Funktionalität über die folgenden Komponenten:

  • Ein Befehlszeilenprogramm,helm, das die Benutzeroberfläche für alle Helm-Funktionen bereitstellt.

  • Eine Companion-Serverkomponente,tiller, die auf Ihrem Kubernetes-Cluster ausgeführt wird, wartet auf Befehle vonhelm und übernimmt die Konfiguration und Bereitstellung von Softwareversionen im Cluster.

  • Das Helm-Verpackungsformat mit der Bezeichnungcharts.

  • Einofficial curated charts repository mit vorgefertigten Diagrammen für beliebte Open-Source-Softwareprojekte.

Im Folgenden werden wir das Diagrammformat genauer untersuchen.

Diagramme

Helmpakete heißencharts und bestehen aus einigen YAML-Konfigurationsdateien und einigen Vorlagen, die in Kubernetes-Manifestdateien gerendert werden. Hier ist die grundlegende Verzeichnisstruktur eines Diagramms:

Beispiel für ein Kartenverzeichnis

package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

Diese Verzeichnisse und Dateien haben folgende Funktionen:

  • charts/: Manuell verwaltete Diagrammabhängigkeiten können in diesem Verzeichnis abgelegt werden. In der Regel ist es jedoch besser,requirements.yaml zum dynamischen Verknüpfen von Abhängigkeiten zu verwenden.

  • templates/: Dieses Verzeichnis enthält Vorlagendateien, die mit Konfigurationswerten (vonvalues.yaml und der Befehlszeile) kombiniert und in Kubernetes-Manifesten gerendert werden. Die Vorlagen verwendenGo programming language’s template format.

  • Chart.yaml: Eine YAML-Datei mit Metadaten zum Diagramm, z. B. Name und Version des Diagramms, Informationen zum Betreuer, eine relevante Website und Suchbegriffe.

  • LICENSE: Eine Klartextlizenz für das Diagramm.

  • README.md: Eine Readme-Datei mit Informationen für Benutzer des Diagramms.

  • requirements.yaml: Eine YAML-Datei, in der die Abhängigkeiten des Diagramms aufgelistet sind.

  • values.yaml: Eine YAML-Datei mit Standardkonfigurationswerten für das Diagramm.

Der Befehlhelm kann ein Diagramm aus einem lokalen Verzeichnis oder aus einer.tar.gz-Paketversion dieser Verzeichnisstruktur installieren. Diese gepackten Diagramme können auch automatisch heruntergeladen und aus Diagramm-Repositorys oderrepos installiert werden.

Als Nächstes werden wir uns die Diagramm-Repositorys ansehen.

Diagramm-Repositorys

Ein Helm-Chart-Repo ist eine einfache HTTP-Site, die eineindex.yaml-Datei und.tar.gz gepackte Charts bereitstellt. Für den Befehlhelm stehen Unterbefehle zur Verfügung, mit denen Sie Diagramme verpacken und die erforderlicheindex.yaml-Datei erstellen können. Diese Dateien können von jedem Webserver, Objektspeicherdienst oder einem statischen Site-Host wie GitHub Pages bereitgestellt werden.

Helm wird mit einem Standard-Diagramm-Repository vorkonfiguriert geliefert, das alsstable bezeichnet wird. Dieses Repo zeigt auf einen Google Storage-Bucket beihttps://kubernetes-charts.storage.googleapis.com. Die Quelle für dasstable-Repo befindet sich inthe helm/charts Git repository on GitHub.

Alternative Repos können mit dem Befehlhelm repo addhinzugefügt werden. Einige beliebte alternative Repositorys sind:

Unabhängig davon, ob Sie ein Diagramm installieren, das Sie lokal entwickelt haben, oder eines aus einem Repository, müssen Sie es für Ihr spezielles Setup konfigurieren. Wir werden uns als nächstes die Konfiguration ansehen.

Diagrammkonfiguration

Ein Diagramm enthält normalerweise Standardkonfigurationswerte in der Dateivalues.yaml. Einige Anwendungen können möglicherweise vollständig mit Standardwerten bereitgestellt werden. In der Regel müssen Sie jedoch einen Teil der Konfiguration überschreiben, um Ihre Anforderungen zu erfüllen.

Die Werte, die für die Konfiguration verfügbar gemacht werden, werden vom Autor des Diagramms festgelegt. Einige werden zum Konfigurieren von Kubernetes-Grundelementen verwendet, andere werden möglicherweise an den zugrunde liegenden Container übergeben, um die Anwendung selbst zu konfigurieren.

Hier ist ein Ausschnitt einiger Beispielwerte:

values.yaml

service:
  type: ClusterIP
  port: 3306

Dies sind Optionen zum Konfigurieren der Ressource eines KubernetesService. Mithelm inspect values chart-name können Sie alle verfügbaren Konfigurationswerte für ein Diagramm sichern.

Diese Werte können überschrieben werden, indem Sie Ihre eigene YAML-Datei schreiben und beim Ausführen vonhelm install verwenden oder indem Sie Optionen in der Befehlszeile einzeln mit dem Flag--set festlegen. Sie müssen nur die Werte angeben, die Sie von den Standardwerten ändern möchten.

Ein Helmdiagramm, das mit einer bestimmten Konfiguration bereitgestellt wird, wird alsrelease bezeichnet. Wir werden als nächstes über Releases sprechen.

Releases

Während der Installation eines Diagramms kombiniert Helm die Vorlagen des Diagramms mit der vom Benutzer angegebenen Konfiguration und den Standardeinstellungen invalue.yaml. Diese werden in Kubernetes-Manifesten gerendert, die dann über die Kubernetes-API bereitgestellt werden. Dadurch wird einrelease erstellt, eine bestimmte Konfiguration und Bereitstellung eines bestimmten Diagramms.

Dieses Release-Konzept ist wichtig, da Sie dieselbe Anwendung möglicherweise mehr als einmal in einem Cluster bereitstellen möchten. Beispielsweise benötigen Sie möglicherweise mehrere MySQL-Server mit unterschiedlichen Konfigurationen.

Möglicherweise möchten Sie auch verschiedene Instanzen eines Diagramms einzeln aktualisieren. Möglicherweise ist eine Anwendung für einen aktualisierten MySQL-Server bereit, eine andere jedoch nicht. Mit Helm aktualisieren Sie jede Version einzeln.

Sie können ein Release aktualisieren, weil sein Diagramm aktualisiert wurde oder weil Sie die Konfiguration des Releases aktualisieren möchten. In beiden Fällen werden bei jedem Upgrade neuerevision einer Version erstellt, und mit Helm können Sie bei Problemen problemlos auf frühere Revisionen zurückgreifen.

Diagramme erstellen

Wenn Sie kein vorhandenes Diagramm für die Software finden, die Sie bereitstellen, möchten Sie möglicherweise ein eigenes erstellen. Helm kann das Gerüst eines Diagrammverzeichnisses mithelm create chart-name ausgeben. Dadurch wird ein Ordner mit den Dateien und Verzeichnissen erstellt, die im obigen AbschnittChartsbeschrieben wurden.

Von dort aus möchten Sie die Metadaten Ihres Diagramms inChart.yaml ausfüllen und Ihre Kubernetes-Manifestdateien im Verzeichnistemplatesablegen. Anschließend müssen Sie relevante Konfigurationsvariablen aus Ihren Manifesten invalues.yaml extrahieren und sie dann mitthe templating system wieder in Ihre Manifestvorlagen aufnehmen.

Mit dem Befehlhelm stehen viele Unterbefehle zur Verfügung, mit denen Sie Ihre Diagramme testen, verpacken und bereitstellen können. Weitere Informationen finden Sie unterthe official Helm documentation on developing charts.

Fazit

In diesem Artikel haben wir Helm, den Paketmanager für Kubernetes, besprochen. Wir haben die Helmarchitektur und die einzelnen Komponentenhelm undtiller übersichtlich dargestellt, das Helmdiagrammformat detailliert beschrieben und uns die Diagrammrepositorys angesehen. Wir haben auch untersucht, wie ein Helm-Diagramm konfiguriert wird und wie Konfigurationen und Diagramme kombiniert und als Releases auf Kubernetes-Clustern bereitgestellt werden. Schließlich haben wir die Grundlagen der Erstellung eines Diagramms angesprochen, wenn noch kein geeignetes Diagramm verfügbar ist.

Weitere Informationen zu Helm finden Sie unterthe official Helm documentation. Um offizielle Charts für Helm zu finden, schauen Sie sichthe official helm/charts Git repository on GitHub an.