Zum Hauptinhalt springen
Version: 3.19.0

Fortgeschrittene Helm-Techniken

Dieser Abschnitt erläutert verschiedene fortgeschrittene Funktionen und Techniken für die Verwendung von Helm. Die Informationen in diesem Abschnitt richten sich an „fortgeschrittene Benutzer" von Helm, die erweiterte Anpassungen und Manipulationen ihrer Charts und Releases durchführen möchten. Jede dieser fortgeschrittenen Funktionen bringt eigene Kompromisse und Einschränkungen mit sich, daher muss jede mit Sorgfalt und fundiertem Wissen über Helm eingesetzt werden. Oder anders ausgedrückt: Denken Sie an das Peter-Parker-Prinzip.

Post Rendering

Post Rendering gibt Chart-Installierern die Möglichkeit, gerenderte Manifeste manuell zu manipulieren, zu konfigurieren und/oder zu validieren, bevor sie von Helm installiert werden. Dies ermöglicht es Benutzern mit erweiterten Konfigurationsanforderungen, Tools wie kustomize zu verwenden, um Konfigurationsänderungen anzuwenden, ohne ein öffentliches Chart forken zu müssen oder von Chart-Maintainern zu verlangen, jede einzelne Konfigurationsoption für eine Software bereitzustellen. Es gibt auch Anwendungsfälle für das Einbinden gemeinsamer Tools und Sidecars in Unternehmensumgebungen oder die Analyse der Manifeste vor der Bereitstellung.

Voraussetzungen

  • Helm 3.1+

Verwendung

Ein Post-Renderer kann jede ausführbare Datei sein, die gerenderte Kubernetes-Manifeste über STDIN akzeptiert und gültige Kubernetes-Manifeste über STDOUT zurückgibt. Bei einem Fehler sollte ein Exit-Code ungleich 0 zurückgegeben werden. Dies ist die einzige „API" zwischen den beiden Komponenten. Sie ermöglicht große Flexibilität bei dem, was Sie mit Ihrem Post-Render-Prozess tun können.

Ein Post-Renderer kann mit install, upgrade und template verwendet werden. Um einen Post-Renderer zu verwenden, nutzen Sie das Flag --post-renderer mit einem Pfad zur ausführbaren Renderer-Datei:

$ helm install mychart stable/wordpress --post-renderer ./path/to/executable

Wenn der Pfad keine Trennzeichen enthält, wird in $PATH gesucht, andernfalls werden relative Pfade zu einem vollqualifizierten Pfad aufgelöst.

Wenn Sie mehrere Post-Renderer verwenden möchten, rufen Sie alle in einem Skript auf oder kombinieren Sie sie in einem beliebigen Binary-Tool, das Sie erstellt haben. In Bash wäre dies so einfach wie renderer1 | renderer2 | renderer3.

Sie können ein Beispiel für die Verwendung von kustomize als Post-Renderer hier sehen.

Einschränkungen

Bei der Verwendung von Post-Renderern gibt es mehrere wichtige Punkte zu beachten. Der wichtigste davon ist, dass bei Verwendung eines Post-Renderers alle Personen, die dieses Release modifizieren, denselben Renderer verwenden müssen, um reproduzierbare Builds zu gewährleisten. Diese Funktion wurde absichtlich so entwickelt, dass jeder Benutzer den verwendeten Renderer wechseln oder die Verwendung eines Renderers beenden kann, aber dies sollte bewusst geschehen, um versehentliche Änderungen oder Datenverlust zu vermeiden.

Ein weiterer wichtiger Hinweis betrifft die Sicherheit. Wenn Sie einen Post-Renderer verwenden, sollten Sie sicherstellen, dass er aus einer zuverlässigen Quelle stammt (wie bei jeder anderen beliebigen ausführbaren Datei). Die Verwendung von nicht vertrauenswürdigen oder nicht verifizierten Renderern wird NICHT empfohlen, da sie vollen Zugriff auf gerenderte Templates haben, die oft sensible Daten enthalten.

Benutzerdefinierte Post-Renderer

Der Post-Render-Schritt bietet noch mehr Flexibilität bei Verwendung des Go SDK. Jeder Post-Renderer muss nur das folgende Go-Interface implementieren:

type PostRenderer interface {
// Run expects a single buffer filled with Helm rendered manifests. It
// expects the modified results to be returned on a separate buffer or an
// error if there was an issue or failure while running the post render step
Run(renderedManifests *bytes.Buffer) (modifiedManifests *bytes.Buffer, err error)
}

Weitere Informationen zur Verwendung des Go SDK finden Sie im Go SDK-Abschnitt.

Go SDK

Helm 3 führte ein komplett umstrukturiertes Go SDK ein, das eine bessere Erfahrung beim Erstellen von Software und Tools bietet, die Helm nutzen. Die vollständige Dokumentation finden Sie im Go SDK-Abschnitt.

Speicher-Backends

Helm 3 hat den Standard-Speicherort für Release-Informationen auf Secrets im Namespace des Releases geändert. Helm 2 speicherte Release-Informationen standardmäßig als ConfigMaps im Namespace der Tiller-Instanz. Die folgenden Unterabschnitte zeigen, wie verschiedene Backends konfiguriert werden. Diese Konfiguration basiert auf der Umgebungsvariablen HELM_DRIVER. Sie kann auf einen der folgenden Werte gesetzt werden: [configmap, secret, sql].

ConfigMap-Speicher-Backend

Um das ConfigMap-Backend zu aktivieren, müssen Sie die Umgebungsvariable HELM_DRIVER auf configmap setzen.

Sie können sie in einer Shell wie folgt setzen:

export HELM_DRIVER=configmap

Wenn Sie vom Standard-Backend zum ConfigMap-Backend wechseln möchten, müssen Sie die Migration selbst durchführen. Sie können Release-Informationen mit folgendem Befehl abrufen:

kubectl get secret --all-namespaces -l "owner=helm"

PRODUKTIONSHINWEISE: Die Release-Informationen enthalten den Inhalt von Charts und Values-Dateien und können daher sensible Daten (wie Passwörter, private Schlüssel und andere Anmeldedaten) enthalten, die vor unbefugtem Zugriff geschützt werden müssen. Bei der Verwaltung von Kubernetes-Berechtigungen, beispielsweise mit RBAC, ist es möglich, breiteren Zugriff auf ConfigMap-Ressourcen zu gewähren, während der Zugriff auf Secret-Ressourcen eingeschränkt bleibt. Zum Beispiel gewährt die standardmäßige benutzerorientierte Rolle „view" Zugriff auf die meisten Ressourcen, aber nicht auf Secrets. Darüber hinaus können Secrets-Daten für verschlüsselte Speicherung konfiguriert werden. Bitte beachten Sie dies, wenn Sie zum ConfigMap-Backend wechseln möchten, da dies die sensiblen Daten Ihrer Anwendung offenlegen könnte.

SQL-Speicher-Backend

Es gibt ein Beta-SQL-Speicher-Backend, das Release-Informationen in einer SQL-Datenbank speichert.

Die Verwendung eines solchen Speicher-Backends ist besonders nützlich, wenn Ihre Release-Informationen mehr als 1 MB wiegen (in diesem Fall können sie aufgrund interner Beschränkungen im zugrundeliegenden etcd-Schlüssel-Wert-Speicher von Kubernetes nicht in ConfigMaps/Secrets gespeichert werden).

Um das SQL-Backend zu aktivieren, müssen Sie eine SQL-Datenbank bereitstellen und die Umgebungsvariable HELM_DRIVER auf sql setzen. Die Datenbankdetails werden mit der Umgebungsvariablen HELM_DRIVER_SQL_CONNECTION_STRING festgelegt.

Sie können sie in einer Shell wie folgt setzen:

export HELM_DRIVER=sql
export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://helm-postgres:5432/helm?user=helm&password=changeme

Hinweis: Derzeit wird nur PostgreSQL unterstützt.

PRODUKTIONSHINWEISE: Es wird empfohlen:

  • Ihre Datenbank produktionsreif zu machen. Für PostgreSQL finden Sie weitere Details in der Dokumentation zur Serveradministration
  • Berechtigungsverwaltung zu aktivieren, um Kubernetes RBAC für Release-Informationen zu spiegeln

Wenn Sie vom Standard-Backend zum SQL-Backend wechseln möchten, müssen Sie die Migration selbst durchführen. Sie können Release-Informationen mit folgendem Befehl abrufen:

kubectl get secret --all-namespaces -l "owner=helm"