Kubernetes mit Kustomize konfigurieren

Dieses Dokument soll Ihnen den Einstieg in die Arbeit mit Kustomize erleichtern, die vorgesehenen Anwendungsfälle verstehen helfen und Ressourcen für die Verwendung mit anderen Google Cloud-Tools aufzeigen.

Kustomize ist ein Kubernetes-Konfigurationstransformationstool, mit dem Sie nicht vorlagenbasierte YAML-Dateien anpassen und die ursprünglichen Dateien unverändert lassen können. Kustomize kann auch Ressourcen wie ConfigMaps und Secrets aus anderen Darstellungen generieren. Kustomize wurde für die Kubernetes API entwickelt, sodass es Kubernetes-ähnliche Objekte verstehen und ändern kann.

Über Kustomize

Kustomize wurde von Google und der Kubernetes-Community entwickelt und richtet sich nach den Kubernetes-Prinzipien der Verwendung von Kubernetes-Objekten, um Konfigurationsdateien zu definieren und diese Konfigurationen deklarativ zu verwalten. Das Kustomize-Konfigurationsobjekt wird als Kustomization bezeichnet. Es beschreibt, wie andere Kubernetes-Objekte erzeugt oder transformiert werden. Eine Kustomization wird deklarativ in einer Datei mit dem Namen kustomization.yaml definiert, die von Kustomize selbst generiert und bearbeitet werden kann.

In Kustomize können Sie eine gemeinsame, wiederverwendbare Kustomization (Basis) definieren und mit mehreren anderen Kustomizations (Overlays) patchen. Diese können die in der Basis definierten Einstellungen selektiv überschreiben, um Varianten zu erstellen. Kustomize wandelt dann Ressourcen um und generiert sie. Ein Prozess namens Hydration oder Rendering gemäß der in den Kustomizationsbasen und -Overlays definierten Konfiguration. Diese gerenderten Ressourcen werden dann in die Standardausgabe oder in Dateien geschrieben, wobei die ursprünglichen YAML-Dateien unverändert bleiben, sodass eine Basis von vielen verschiedenen Overlays wiederverwendet werden kann.

Image

Dieser vorlagenfreie Ansatz ist leistungsstark, wenn es um die Nutzerfreundlichkeit und die Wiederverwendbarkeit von Kustomization-Basen geht. So können Sie Ihre Kubernetes-Konfiguration auf fast beliebige Weise anpassen, ohne für jeden einzelnen Anwendungsfall eine große Anzahl von Werten angeben zu müssen.

Vorteile von Kustomize

Das Verwalten von Kubernetes-Konfigurationen mit Kustomize bietet unter anderem folgende Vorteile:

  • Kustomize ist vorlagenfrei. Bei der Verwendung von Vorlagen und Wertdateien kann fast jede Spezifikation in einer YAML-Datei zu einem Parameter werden, der einen Wert benötigt, und die Wertedateien können sehr groß werden. Anstatt Konfigurationsvorlagen als Text zu erstellen oder die Konfiguration als Code auszudrücken, ändert Kustomize Konfigurationsdaten. Die YAML-Rohdatei ist unabhängig davon, ob sie von Kustomize gerendert wird, lesbar und wiederverwendbar. Das Kustomize-Modell ist anders. Es muss nicht alles parametrisiert werden, was die Wiederverwendung gängiger Konfigurationen vereinfacht.

  • Kustomize kann nativ über die Kubernetes-Befehlszeile ausgeführt werden. Kustomize ist in kubectl ab Version 1.14 eingebunden. Solange Sie kubectl verwenden, müssen Sie Kustomize nicht als separate Abhängigkeit installieren oder verwalten.

  • Kustomize ist rein deklarativ. Kustomize ist ein Kubernetes-natives Tool und passt zum Kubernetes-Ansatz für die deklarative Konfiguration. Anstatt Schritt für Schritt zu beschreiben, wie das Tool Ihre Ressourcen anpassen soll, deklarieren Sie, was Sie möchten, und Kustomize stellt es bereit.

  • Kustomize ermöglicht die Wiederverwendung derselben Basiskonfiguration für die Verwaltung verschiedener Konfigurationen. Sie können eine Basisdatei in mehreren verschiedenen Umgebungen (z. B. Entwicklung, Staging, Produktion) verwenden und mit minimalen, eindeutigen Overlays die Basis für jede Umgebung anzupassen.

  • Kustomize ist einfach zu verwenden. Es gibt eine flache Lernkurve. Sie können mit einer sehr einfachen Konfiguration beginnen und schrittweise immer komplexere Funktionen darauf aufbauen.

  • Kustomize ist erweiterbar und anpassbar. Kustomize unterstützt ein Plug-in-Framework, mit dem Sie eigene Generatoren und Transformer im Stil von containerisierten und ausführbaren Kubernetes-Funktionen (Kubernetes Resource Model, KRM) schreiben können. Weitere Informationen zum Erstellen eigener Plug-ins finden Sie im offiziellen Leitfaden zu Kustomize-Plug-ins.

Lokale Installation

Führen Sie den folgenden Befehl aus, um Kustomize in Ihrer lokalen Umgebung zu installieren:

gcloud components install kustomize

Kustomize-Unterstützung in Google Cloud

Kustomize ist in Cloud Shell vorinstalliert und wird in Skaffold unterstützt. Es wird auch als Builder für Cloud Build unterstützt.

Ab Anthos Config Management Version 1.9.0 verwendet Config Sync automatisch Kustomize, um die Ressourcen in einem Repository zu rendern, wenn es eine Kustomization-Datei enthält. Weitere Informationen zu diesem Feature finden Sie unter Repository mit Kustomize-Konfigurationen und Helm-Diagrammen verwenden.

Informationen zu Kustomize

Basen und Overlays

Der Ansatz der Konfigurationstransformation von Kustomize nutzt die Verwendung von Kustomization-Ebenen, sodass dieselben Basiskonfigurationsdateien in mehreren Kustomization-Konfigurationen wiederverwendet werden können. Dies wird durch die Konzepte von Basen und Overlays erreicht.

  • Eine Basis ist ein Verzeichnis mit einer Datei namens kustomization.yaml, in der einige Ressourcen mit Anpassungen aufgeführt werden können, die auf sie angewendet werden. Eine Basis sollte im Feld resources einer Kustomization-Datei deklariert werden.
  • Ein Overlay ist ein Verzeichnis, das auf ein anderes Kustomization-Verzeichnis als seine Basis oder eine seiner Basen verweist.

Eine Basis kann als Vorstufe in einer Pipeline betrachtet werden, die keine Informationen über die Overlays enthält, auf die sie verweist. Nachdem eine Basis mit der Verarbeitung fertig ist, sendet sie ihre Ressourcen als Eingabe an das Overlay, um sie entsprechend der Spezifikation des Overlays zu transformieren.

Das folgende Beispiel zeigt eine Kustomization-Basis:

# base/kustomization.yaml
resources:
- deployment.yaml
namePrefix: bar-
#base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx

Diese Basis kann von mehreren Kustomization-Overlays wiederverwendet werden. Das folgende Beispiel zeigt ein Overlay, das auf diese Basis verweisen kann:

# overlay/kustomization.yaml
resources:
- ../base
- configmap.yaml
namePrefix: foo-
#overlay/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm
data:
  red: blue

Der Befehl kustomize build overlay liefert folgende Ausgabe:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-bar-nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-cm
data:
  red: blue

Das Deployment hat das Namenspräfix bar- aus der Basis-Kustomization erhalten und dann ein weiteres Namenspräfix foo- aus der Overlay-Kustomization. Die ConfigMap hat nur das Namenspräfix foo- erhalten, weil sie im Overlay deklariert und daher nur vom Overlay verarbeitet wurde.

Secrets und ConfigMaps generieren

Sie können Secrets und ConfigMaps aus einer Datei mit den Feldern secretGenerator oder configMapGenerator in der Kustomization-Datei generieren. Beispiel:

# kustomization.yaml
configMapGenerator:
- name: my-app
  files:
  -.properties

Dies generiert die folgende YAML-Ausgabe:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-g82klmn92h
data:
  .properties: |-
      red=blue

Kustomization-Datei bearbeiten

Kustomize bietet mehrere imperative Befehle, mit denen Sie Ihre Kustomization-Datei verwalten können.

  • Führen Sie den folgenden Befehl aus, um alle YAML-Dateien in Ihrem aktuellen Verzeichnis zum Feld resources der Kustomization hinzuzufügen:

    kustomize edit add resource *.yaml
    
  • Führen Sie den folgenden Befehl aus, um die Hilfeseite von „kustomize edit“ aufzurufen und alle darin enthaltenen Unterbefehle zu sehen:

    kustomize edit -h
    
  • Wenn Sie Hilfe zu Unterbefehlen erhalten möchten, fügen Sie den Unterbefehl als Argument hinzu. Beispiel:

    kustomize edit add -h
    

Nächste Schritte

Offizielle Dokumentation

Weitere Informationen zu den in der Datei kustomization.yaml unterstützten Feldern finden Sie in der offiziellen Kustomize-Dokumentation. Sie enthält Beschreibungen und Beispiele der verschiedenen Felder, die Sie verwenden können.

Nicht unterstützte Funktionen

Eine Liste der Funktionen, die absichtlich nicht von Kustomize unterstützt werden, finden Sie unter den vermiedenen Funktionen von Kustomize.