1. Ziele
Kustomize ist ein Tool, mit dem sich Anwendungskonfigurationen ohne Vorlagen anpassen lassen. Dadurch wird die Verwendung von Standardanwendungen vereinfacht. Es ist als eigenständiges Dienstprogramm verfügbar und über kubectl apply -k in kubectl integriert. Es kann aber auch als eigenständige CLI verwendet werden. Weitere Informationen finden Sie unter kustomize.io.
In dieser Anleitung werden einige der wichtigsten Konzepte von Kustomize behandelt. Sie verwenden Kustomize, um Variationen in den Anwendungen und Umgebungen zu verwalten.
Sie werden Folgendes tun:
- kustomize-Befehlszeilenclient verwenden
- Häufig verwendete Elemente überschreiben
- Größere YAML-Strukturen patchen
- Mehrere Overlay-Ebenen verwenden
2. Arbeitsbereich vorbereiten
- Öffnen Sie den Cloud Shell-Editor über die folgende URL:
https://ide.cloud.google.com
- Erstellen Sie im Terminalfenster ein Arbeitsverzeichnis für diese Anleitung.
mkdir kustomize-lab
- Wechseln Sie in das Verzeichnis und legen Sie den IDE-Arbeitsbereich fest.
cd kustomize-lab && cloudshell workspace .
3. kustomize-Befehlszeilenclient verwenden
Die Stärke von Kustomize liegt in der Möglichkeit, Basis-YAML-Dateien für Kubernetes mit benutzerdefinierten Werten zu überlagern und zu ändern. Dazu benötigt Kustomize eine Basisdatei mit Anweisungen dazu, wo sich die Dateien befinden und was überschrieben werden soll. Kustomize ist im Kubernetes-Ökosystem enthalten und kann auf verschiedene Arten ausgeführt werden.
In diesem Abschnitt erstellen Sie eine Kustomize-Basiskonfiguration und verarbeiten die Dateien mit dem eigenständigen Kustomize-Befehlszeilenclient.
- Erstellen Sie zuerst einen Ordner für Ihre Basiskonfigurationsdateien.
mkdir -p chat-app/base
- Erstellen Sie im Basisordner eine einfache Kubernetes-Datei
deployment.yaml.
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- Basis-
kustomization.yamlerstellen
Kustomize sucht nach einer Datei namens „kustomization.yaml“ als Einstiegspunkt. Diese Datei enthält Verweise auf die verschiedenen Basis- und Überschreibungsdateien sowie spezifische Überschreibungswerte.
Erstellen Sie eine kustomization.yaml-Datei, die auf die deployment.yaml-Datei als Basisressourcen verweist.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Führen Sie den Kustomize-Befehl im Basisordner aus. Dadurch werden die YAML-Dateien für die Bereitstellung ohne Änderungen ausgegeben. Das ist so vorgesehen, da Sie noch keine Varianten angegeben haben.
kustomize build chat-app/base
Dieser eigenständige Client kann mit dem kubectl-Client kombiniert werden, um die Ausgabe direkt anzuwenden, wie im folgenden Beispiel. Dadurch wird die Ausgabe des Build-Befehls direkt in den kubectl apply-Befehl übertragen.
(Do Not Execute - Included for reference only)
kustomize build chat-app/base | kubectl apply -f -
Diese Technik ist nützlich, wenn eine bestimmte Version des Kustomize-Clients benötigt wird.
Alternativ kann Kustomize mit den in kubectl integrierten Tools ausgeführt werden. Wie im folgenden Beispiel.
(Do Not Execute - Included for reference only)
kubectl apply -k chat-app/base
4. Häufig verwendete Elemente überschreiben
Nachdem Ihr Arbeitsbereich konfiguriert ist und Sie überprüft haben, dass Kustomize funktioniert, können Sie einige der Basiswerte überschreiben.
Images, Namespaces und Labels werden häufig für jede Anwendung und Umgebung angepasst. Da sie häufig geändert werden, können Sie sie in Kustomize direkt in der kustomize.yaml deklarieren. So müssen Sie nicht viele Patches für diese gängigen Szenarien erstellen.
Diese Technik wird häufig verwendet, um eine bestimmte Instanz einer Vorlage zu erstellen. Ein Basissatz von Ressourcen kann jetzt für mehrere Implementierungen verwendet werden, indem einfach der Name und der Namespace geändert werden.
In diesem Beispiel fügen Sie Ihrem kustomization.yaml einen Namespace und ein Namenspräfix hinzu und fügen einige Labels hinzu.
- Aktualisieren Sie die
kustomization.yaml-Datei, um allgemeine Labels und Namespaces einzuschließen.
Kopieren Sie die folgenden Befehle und führen Sie sie im Terminal aus.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- Build-Befehl ausführen
Wenn Sie den Build an dieser Stelle ausführen, sehen Sie, dass die resultierende YAML-Datei jetzt den Namespace, die Labels und die Namen mit Präfix sowohl in der Dienst- als auch in der Bereitstellungsdefinition enthält.
kustomize build chat-app/base
Beachten Sie, dass die Ausgabe Labels und Namespaces enthält, die nicht in der YAML-Datei für die Bereitstellung enthalten sind. Beachten Sie auch, dass der Name von chat-app in my-chat-app geändert wurde.
(Ausgabe nicht kopieren)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Größere YAML-Strukturen patchen
Mit Kustomize können auch Patches angewendet werden, die die Basisressourcen überlagern. Diese Technik wird häufig verwendet, um die Variabilität zwischen Anwendungen und Umgebungen zu erhöhen.
In diesem Schritt erstellen Sie Umgebungsvarianten für eine einzelne Anwendung, die dieselben Basisressourcen verwenden.
- Erstellen Sie zuerst Ordner für die verschiedenen Umgebungen.
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Schreiben Sie den Staging-Patch mit dem folgenden Befehl:
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- Schreiben Sie nun den Produktionspatch mit dem folgenden Befehl:
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
Beachten Sie, dass die oben genannten Patches den Namen des Container-Images nicht enthalten. Dieser Wert wird in der Datei „base/deployment.yaml“ angegeben, die Sie im vorherigen Schritt erstellt haben. Diese Patches enthalten jedoch eindeutige Umgebungsvariablen für die Entwicklungs- und Produktionsumgebung.
- Kustomize-YAML-Dateien für das Basisverzeichnis implementieren
Schreiben Sie die Datei „kustomization.yaml“ neu und entfernen Sie den Namespace und das Namenspräfix, da es sich nur um die Basiskonfiguration ohne Variation handelt. Diese Felder werden in Kürze in die Umgebungsdateien verschoben.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- Kustomize-YAML-Dateien für das Entwicklungsverzeichnis implementieren
Implementieren Sie nun die Varianten für die Entwicklungs- und Produktionsumgebung, indem Sie die folgenden Befehle in Ihrem Terminal ausführen.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Beachten Sie den zusätzlichen Abschnitt patches: in der Datei. Das bedeutet, dass Kustomize diese Dateien über die Basisressourcen legen soll.
- Kustomize-YAML-Dateien für das Produktionsverzeichnis implementieren
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Kustomize ausführen, um die Dateien zusammenzuführen
Nachdem Sie die Basis- und Umgebungsdateien erstellt haben, können Sie den Kustomize-Prozess ausführen, um die Basisdateien zu patchen.
Führen Sie den folgenden Befehl für die Entwicklung aus, um das zusammengeführte Ergebnis zu sehen.
kustomize build chat-app/dev
Die Ausgabe enthält zusammengeführte Ergebnisse wie Labels aus der Basis- und der Entwicklerkonfiguration sowie den Container-Image-Namen aus dem Basis- und die Umgebungsvariable aus den Entwicklerordnern.
6. Mehrere Overlay-Ebenen verwenden
Viele Organisationen haben ein Team, das die App-Teams unterstützt und die Plattform verwaltet. Häufig möchten diese Teams bestimmte Details einfügen, die in allen Apps in allen Umgebungen enthalten sein sollen, z. B. einen Logging-Agent.
In diesem Beispiel erstellen Sie einen shared-kustomize-Ordner und Ressourcen, die von allen Anwendungen unabhängig von der Umgebung, in der sie bereitgestellt werden, eingeschlossen werden.
- Ordner „shared-kustomize“ erstellen
mkdir shared-kustomize
- Erstellen Sie eine einfache
deployment.yamlim freigegebenen Ordner.
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- „kustomization.yaml“ im freigegebenen Ordner erstellen
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Auf den Ordner „shared-kustomize“ in Ihrer Anwendung verweisen
Da der Ordner shared-kustomize die Basis für alle Ihre Anwendungen sein soll, müssen Sie chat-app/base/kustomization.yaml so aktualisieren, dass shared-kustomize als Basis verwendet wird. Anschließend wird die eigene Datei „deployment.yaml“ darübergelegt. Die Umgebung werden dann noch einmal gepatcht.
Kopieren Sie die folgenden Befehle und führen Sie sie im Terminal aus.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- Kustomize ausführen und zusammengeführte Ergebnisse für die Entwicklung ansehen
kustomize build chat-app/dev
Die Ausgabe enthält zusammengeführte Ergebnisse aus dem App-Basisordner, der App-Umgebung und den shared-kustomize-Ordnern. Im Containerbereich sehen Sie Werte von allen drei Standorten.
(Ausgabe – nicht kopieren)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>