Einführung
Helm verpackt Kubernetes-Vorlagen als Releases. Kustomize verfolgt einen anderen Ansatz: Es geht von gewöhnlichen Kubernetes-YAML-Dateien aus und legt Änderungen darüber, ohne Vorlagenausdrücke (Template Expressions) zu verwenden. Dies ist nützlich, wenn Sie eine gemeinsame Basis benötigen und nur kleine, umgebungsspezifische Unterschiede wie Namen, Namespaces, Replikatanzahlen oder Patches anwenden möchten.
In diesem Lab erstellen Sie ein Basis-Deployment und einen Service, rendern diese Basis mit Kustomize und erstellen anschließend ein Produktions-Overlay, das den Namen, den Namespace, die Replikatanzahl und die Anwendungsnachricht ändert. Abschließend stellen Sie das Overlay mit kubectl apply -k bereit und testen den resultierenden Service.
Kustomize-Arbeitsbereich vorbereiten
In diesem Schritt bereiten Sie einen Namespace vor und bestätigen, dass die Kustomize-Unterstützung über kubectl verfügbar ist.
Beginnen Sie im Verzeichnis /home/labex/project. Dieses Lab speichert die Basis-Manifeste und Overlay-Dateien in diesem Arbeitsbereich.
mkdir -p /home/labex/project
cd /home/labex/project
Überprüfen Sie, ob der Kubernetes-API-Server erreichbar ist. Falls die VM gerade erst gestartet wurde und der Node noch nicht bereit ist, warten Sie einige Sekunden und führen Sie den Befehl erneut aus.
kubectl get nodes --request-timeout=5s
Die erwartete Ausgabe enthält:
NAME STATUS ROLES AGE VERSION
labex-v135 Ready control-plane ... v1.35...
Warten Sie, bis der Cluster-Networking-Pod bereit (Ready) ist. Da Sie am Ende des Labs einen Service testen werden, muss das Cluster-Netzwerk einwandfrei funktionieren.
kubectl wait --namespace kube-system --for=condition=Ready pod -l k8s-app=calico-node --timeout=120s
Erwartete Ausgabe:
pod/calico-node-... condition met
Erstellen Sie einen Namespace namens ckad-prep-kustomize und legen Sie diesen als aktuellen Namespace fest:
kubectl create namespace ckad-prep-kustomize
kubectl config set-context --current --namespace=ckad-prep-kustomize
Bestätigen Sie den Namespace und prüfen Sie, ob kubectl kustomize verfügbar ist. kubectl kustomize rendert Kustomize-Verzeichnisse, ohne sie anzuwenden.
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
kubectl kustomize --help | sed -n '1,3p'
Die erwartete Ausgabe enthält:
ckad-prep-kustomize
Build a set of KRM resources...
Wiederverwendbare Basis erstellen
In diesem Schritt erstellen Sie eine Kustomize-Basis aus gewöhnlichem Kubernetes-YAML.
Eine Basis ist der gemeinsame Ausgangspunkt. Sie sollte vollständige, gültige Kubernetes-Objekte enthalten, bevor umgebungsspezifische Anpassungen hinzugefügt werden. Hier enthält die Basis ein Deployment und einen Service. Die Anwendung schreibt den Wert der Umgebungsvariablen MESSAGE in eine kleine Webseite.
Erstellen Sie das Basisverzeichnis:
mkdir -p kustomize-demo/base
Erstellen Sie das Basis-Deployment:
cat > kustomize-demo/base/deployment.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: kustomize-web
labels:
app: kustomize-web
spec:
replicas: 1
selector:
matchLabels:
app: kustomize-web
template:
metadata:
labels:
app: kustomize-web
spec:
terminationGracePeriodSeconds: 0
containers:
- name: web
image: busybox:1.36
env:
- name: MESSAGE
value: base-v1
command:
- /bin/sh
- -c
- |
mkdir -p /www
echo "$MESSAGE" > /www/index.html
httpd -f -p 8080 -h /www
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 1
periodSeconds: 2
EOF
Erstellen Sie den Basis-Service. Sein Selektor entspricht dem Pod-Label aus dem Deployment.
cat > kustomize-demo/base/service.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
name: kustomize-web
spec:
selector:
app: kustomize-web
ports:
- port: 80
targetPort: 8080
EOF
Erstellen Sie die Basis-kustomization.yaml. Diese Datei teilt Kustomize mit, welche Ressourcen zur Basis gehören.
cat > kustomize-demo/base/kustomization.yaml <<'EOF'
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
EOF
Rendern Sie die Basis, ohne sie anzuwenden:
kubectl kustomize kustomize-demo/base | sed -n '1,120p'
Die erwartete Ausgabe enthält einen Service namens kustomize-web, ein Deployment namens kustomize-web, replicas: 1 und value: base-v1.
Produktions-Overlay hinzufügen
In diesem Schritt erstellen Sie ein Overlay, das die Basis für ein produktionsnahes Deployment anpasst.
Ein Overlay verweist auf eine Basis und fügt dann Änderungen hinzu. Dieses Overlay platziert die Objekte im Namespace ckad-prep-kustomize, fügt das Namenspräfix prod- hinzu, skaliert das Deployment auf drei Replikate und patcht den Wert von MESSAGE auf prod-v2.
Erstellen Sie das Overlay-Verzeichnis:
mkdir -p kustomize-demo/overlays/prod
Erstellen Sie einen Deployment-Patch. Der Patch benennt das ursprüngliche Basisobjekt kustomize-web. Kustomize gleicht den Patch ab, bevor das Präfix prod- hinzugefügt wird.
cat > kustomize-demo/overlays/prod/deployment-patch.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: kustomize-web
spec:
replicas: 3
template:
spec:
containers:
- name: web
env:
- name: MESSAGE
value: prod-v2
EOF
Erstellen Sie die Overlay-kustomization.yaml. Der Eintrag resources verweist zurück auf die Basis, während namespace, namePrefix und patches die Anpassungen beschreiben.
cat > kustomize-demo/overlays/prod/kustomization.yaml <<'EOF'
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: ckad-prep-kustomize
namePrefix: prod-
resources:
- ../../base
patches:
- path: deployment-patch.yaml
EOF
Rendern Sie das Produktions-Overlay:
kubectl kustomize kustomize-demo/overlays/prod | sed -n '1,160p'
Die erwartete Ausgabe enthält:
name: prod-kustomize-web
namespace: ckad-prep-kustomize
replicas: 3
value: prod-v2
Angepasste Anwendung bereitstellen und testen
In diesem Schritt wenden Sie das Produktions-Overlay an und testen den Service, den es erstellt.
Der Befehl kubectl apply -k rendert ein Kustomize-Verzeichnis und sendet die gerenderten Objekte an den Kubernetes-API-Server. Sie müssen keine temporäre YAML-Datei erstellen.
Wenden Sie das Produktions-Overlay an:
kubectl apply -k kustomize-demo/overlays/prod
Die erwartete Ausgabe enthält:
service/prod-kustomize-web created
deployment.apps/prod-kustomize-web created
Warten Sie auf das angepasste Deployment:
kubectl rollout status deployment/prod-kustomize-web --timeout=120s
Erwartete Ausgabe:
deployment "prod-kustomize-web" successfully rolled out
Überprüfen Sie die aus dem Overlay erstellten Objekte:
kubectl get deployment,service prod-kustomize-web
Die erwartete Ausgabe enthält:
deployment.apps/prod-kustomize-web 3/3
service/prod-kustomize-web
Erstellen Sie einen Client-Pod und testen Sie den Service. Die Antwort sollte prod-v2 lauten, was beweist, dass der Overlay-Patch die Konfiguration der laufenden Anwendung erfolgreich geändert hat.
kubectl run kustomize-client --image=busybox:1.36 --restart=Never --command -- sleep 3600
kubectl wait --for=condition=Ready pod/kustomize-client --timeout=120s
kubectl exec kustomize-client -- wget -qO- http://prod-kustomize-web
Erwartete Ausgabe:
prod-v2
Zusammenfassung
Sie haben eine Kustomize-Basis aus gewöhnlichem Deployment- und Service-YAML erstellt und anschließend ein Produktions-Overlay entwickelt, das den Namespace, die Objektnamen, die Replikatanzahl und die Anwendungsnachricht geändert hat. Sie haben sowohl die Basis als auch das Overlay gerendert, bevor Sie das Overlay mit kubectl apply -k angewendet und die angepasste Anwendung über ihren Service verifiziert haben.


