1. Zielsetzungen
Kustomize ist ein Tool, das eine vorlagenfreie Möglichkeit zum Anpassen der Anwendungskonfiguration bietet, was die Nutzung standardmäßiger Anwendungen vereinfacht. Es ist als eigenständiges Dienstprogramm verfügbar und über kubectl apply -k
in kubectl integriert. Es kann als eigenständige Befehlszeile verwendet werden. Weitere Informationen finden Sie unter kustomize.io.
In dieser Anleitung lernen Sie einige der Kernkonzepte von Kustomize durch und verwenden Kustomize zum Verwalten von Variationen in den Anwendungen und Umgebungen.
Sie werden Folgendes tun:
- Kustomize-Befehlszeilenclient verwenden
- Gängige Elemente überschreiben
- Größere YAML-Strukturen patchen
- Mehrere Overlay-Ebenen nutzen
2. Arbeitsbereich wird vorbereitet
- Öffnen Sie den Cloud Shell-Editor. Rufen Sie dazu die folgende URL auf
https://ide.cloud.google.com
- Erstellen Sie im Terminalfenster ein Arbeitsverzeichnis für diese Anleitung
mkdir kustomize-lab
- Wechseln Sie zum Verzeichnis und legen Sie den IDE-Arbeitsbereich fest.
cd kustomize-lab && cloudshell workspace .
3. Kustomize-Befehlszeilenclient verwenden
Die Leistungsfähigkeit von Kustomize liegt in der Möglichkeit, Kubernetes-Basis-YAMLs mit benutzerdefinierten Werten zu überlagern und zu ändern. Dazu ist eine Basisdatei mit Anweisungen zum Speicherort der Dateien und zu den zu überschreibenden Dateien erforderlich. Kustomize ist in der Kubernetes-Umgebung enthalten und kann mit verschiedenen Methoden ausgeführt werden.
In diesem Abschnitt erstellen Sie eine benutzerdefinierte Basiskonfiguration und verarbeiten die Dateien mit dem eigenständigen Kustomize-Befehlszeilenclient.
- Zuerst erstellen Sie einen Ordner für Ihre Basiskonfigurationsdateien
mkdir -p chat-app/base
- Einfache Kubernetes-
deployment.yaml
im Basisordner erstellen
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.yaml
erstellen
Kustomize sucht nach einer Datei namens „kustomization.yaml“ als Einstiegspunkt. Diese Datei enthält Verweise auf die verschiedenen Basis- und Überschreibungsdateien sowie auf spezifische Überschreibungswerte.
Erstellen Sie eine kustomization.yaml
-Datei, die auf deployment.yaml
als Basisressourcen verweist.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Führen Sie den Befehl „kustomize“ für den Basisordner aus. Dadurch werden die YAML-Bereitstellungsdateien ohne Änderungen ausgegeben, was erwartet wird, da Sie noch keine Varianten hinzugefügt 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 gezeigt. Dadurch wird die Ausgabe des Build-Befehls direkt in den Befehl "kubectl apply" gestreamt.
(Nicht ausführen – nur zu Referenzzwecken enthalten)
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 dem in kubectl integrierten Tool ausgeführt werden. Wie im folgenden Beispiel.
(Nicht ausführen – nur zu Referenzzwecken enthalten)
kubectl apply -k chat-app/base
4. Allgemeine Elemente überschreiben
Nachdem Sie den Arbeitsbereich konfiguriert und überprüft haben, ob Kustomize funktioniert, können Sie einige der Basiswerte überschreiben.
Images, Namespaces und Labels werden sehr häufig für jede Anwendung und Umgebung angepasst. Da sie häufig geändert werden, können Sie sie mit Kustomize direkt in kustomize.yaml
deklarieren, sodass für diese häufigen Szenarien nicht viele Patches erstellt werden müssen.
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. Dazu müssen lediglich der Name und der Namespace geändert werden.
In diesem Beispiel fügen Sie einen Namespace und ein Namenspräfix hinzu und fügen einige Labels zu Ihrem kustomization.yaml
hinzu.
- Aktualisieren Sie die Datei
kustomization.yaml
, um gängige Labels und Namespaces aufzunehmen.
Kopieren Sie die folgenden Befehle in Ihr Terminal und führen Sie sie 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
Die Ausführung des Builds an dieser Stelle zeigt, dass die resultierende YAML-Datei nun den Namespace, die Labels und die Präfixnamen sowohl in den Dienst- als auch in den Deployment-Definitionen enthält.
kustomize build chat-app/base
Die Ausgabe enthält Labels und Namespaces, die nicht in der YAML-Datei für die Bereitstellung enthalten sind. Beachte auch, wie 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
Kustomize bietet außerdem die Möglichkeit, Patches anzuwenden, die die Basisressourcen überlagern. Diese Technik wird häufig verwendet, um für Variabilität zwischen Anwendungen und Umgebungen zu sorgen.
In diesem Schritt erstellen Sie Umgebungsvariationen 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 Stage-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 prod-Patch mit folgendem 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 Patches oben nicht den Namen des Container-Images 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 Entwicklung und Produktion.
- Kustomize-YAML-Dateien für das Basisverzeichnis implementieren
Schreiben Sie die Basiskonfiguration „kustomization.yaml“ um und entfernen Sie den Namespace und das Namenspräfix, da dies nur die Basiskonfiguration ohne Variation ist. Diese Felder werden gleich 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 „dev“ und „prod“, 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, dass der Datei der Abschnitt patches
hinzugefügt wurde. Dies gibt an, dass Kustomize diese Dateien über die Basisressourcen legen soll.
- YAML-Dateien von Kustomize für das Verzeichnis „prod“ implementieren
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Führen Sie kustomize aus, 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 dev aus, um das zusammengeführte Ergebnis anzuzeigen.
kustomize build chat-app/dev
Beachten Sie, dass die Ausgabe zusammengeführte Ergebnisse wie Labels aus Basis- und Entwicklungskonfigurationen sowie den Container-Image-Namen aus der Basis- und die Umgebungsvariable aus den Entwicklungsordnern enthält.
6. Verwenden mehrerer Overlay-Ebenen
Viele Organisationen haben ein Team, das die App-Teams unterstützt und die Plattform verwaltet. Häufig werden diese Teams bestimmte Details angeben wollen, die in allen Anwendungen 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 und unabhängig von der Umgebung, in der sie bereitgestellt werden, enthalten sind.
- Ordner "shared-kustomize" erstellen
mkdir shared-kustomize
- Einfache
deployment.yaml
im freigegebenen Ordner erstellen
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
- In Ihrer Anwendung auf den Ordner „shared-kustomize“ verweisen
Da der Ordner shared-kustomize
die Basis für alle Ihre Anwendungen sein soll, müssen Sie chat-app/base/kustomization.yaml
aktualisieren, um shared-kustomize
als Basis zu verwenden. Patchen Sie dann die eigene Datei "deployment.yaml" oben. Zusätzlich werden die Umgebungsordner dann wieder gepatcht.
Kopieren Sie die folgenden Befehle in Ihr Terminal und führen Sie sie 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 Dev ansehen
kustomize build chat-app/dev
Beachten Sie, dass die Ausgabe zusammengeführte Ergebnisse aus der Anwendungsbasis, der Anwendungsumgebung und den Ordnern shared-kustomize
enthält. Insbesondere sehen Sie im Containerbereich Werte von allen drei Speicherorten.
(Ausgabe wird nicht kopiert)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>