Einführung
In den vorherigen Labs haben Sie einen einzelnen Pod erstellt. Pods sind zwar die grundlegenden Bausteine, aber ihre manuelle Verwaltung ist mühsam. Wenn ein Pod ausfällt, müssen Sie ihn manuell neu starten. Wenn Sie weitere Kopien benötigen, müssen Sie zusätzliche Pods ebenfalls manuell erstellen.
Hier kommt das Deployment ins Spiel.
Ein Deployment ist ein übergeordneter Controller, der ReplicaSets und Pods für Sie verwaltet. Sie legen fest, wie viele Replikate vorhanden sein sollen und welche Pod-Vorlage verwendet werden soll. Kubernetes sorgt dann dafür, dass der tatsächliche Zustand dieser Vorgabe entspricht.
Der entscheidende Wechsel besteht darin, nicht mehr einen einzelnen Pod, sondern eine wiederholbare Workload zu verwalten. Ein einzelner Pod ist anfällig, weil er nur eine einzige Instanz darstellt. Ein Deployment beschreibt ein Muster zum Erstellen von Pods und legt fest, wie viele davon vorhanden sein sollen. Dieses Muster ermöglicht Skalierung und Selbstheilung.
In diesem Lab lernen Sie:
- Einen strikten Manager (Deployment) mit einem konkreten Ziel zu erstellen (3 Replikate).
- Zu beobachten, wie der Manager Mitarbeiter (Pods) einstellt.
- Einen Mitarbeiter zu „entlassen“, um die Reaktion des Managers zu testen (Selbstheilung).
- Den Manager anzuweisen, weitere Mitarbeiter einzustellen (Skalierung).
Deployment-YAML erstellen
In diesem Schritt schreiben Sie die Aufgabenbeschreibung für Ihren Manager. Dabei handelt es sich um eine YAML-Datei, die festlegt, welches Image ausgeführt werden soll und wie viele Kopien (Replikate) Sie benötigen.
Beachten Sie die zusätzliche Struktur im Vergleich zu einem einfachen Pod-Manifest. Ein Deployment enthält einen Selector und eine Vorlage. Der Selector teilt Kubernetes mit, welche Pods zu diesem Deployment gehören. Die Vorlage beschreibt, wie neue Pods erstellt werden sollen. Beide Bestandteile müssen aufeinander abgestimmt bleiben, damit das Deployment die vorgesehenen Pods korrekt verwaltet.
Prüfen Sie zunächst, ob Sie sich im Projektverzeichnis befinden:
cd ~/project
Erstellen Sie mit nano eine neue Datei namens deployment.yaml:
nano deployment.yaml
Fügen Sie die folgende Konfiguration in die Datei ein. Achten Sie besonders auf die Zeile replicas: 3 – hier legen Sie die Teamgröße fest.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Zum Speichern drücken Sie Ctrl+X, dann Y und anschließend Enter.
Diese Datei weist Kubernetes an: „Erstelle ein Deployment namens nginx-deployment. Stelle sicher, dass immer 3 Pods mit dem Image nginx:1.14.2 ausgeführt werden. Wenn du diese Pods finden musst, suche nach den Pods mit dem Label app: nginx.“
Anwenden und beobachten
Nachdem die Aufgabenbeschreibung vorliegt, stellen Sie nun den Manager ein. Wenden Sie die Konfiguration auf den Cluster an:
Beim Erstellen eines Deployments legt Kubernetes normalerweise im Hintergrund ein weiteres Objekt namens ReplicaSet an. Das ReplicaSet ist direkt dafür verantwortlich, die gewünschte Anzahl von Pods am Leben zu halten. Als Anfänger müssen Sie ReplicaSets noch nicht direkt verwalten. Es ist jedoch hilfreich zu wissen, dass sie existieren, da sie häufig in der Befehlsausgabe erscheinen.
kubectl apply -f deployment.yaml
Kubernetes bestätigt den Vorgang mit: deployment.apps/nginx-deployment created.
Das Deployment (der Manager) beginnt sofort damit, 3 Pods zu erstellen. Führen Sie den folgenden Befehl aus, um sie schnell anzuzeigen:
kubectl get pods
Sie sollten 3 verschiedene Pods sehen, deren Namen alle mit nginx-deployment- beginnen:
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-8j64w 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-d95l2 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-lzr5w 1/1 Running 0 5s
Sie können auch den Status des Deployments selbst prüfen:
kubectl get deployments
In der Ausgabe sollte READY 3/3 angezeigt werden. Das bestätigt, dass alle 3 angeforderten Replikate gestartet wurden und ausgeführt werden.
Selbstheilung testen
Eine der leistungsfähigsten Funktionen von Kubernetes ist die Selbstheilung. Das Deployment stellt sicher, dass die tatsächliche Anzahl der Pods immer der gewünschten Anzahl (3) entspricht. Wenn ein Pod fehlt, wird er sofort ersetzt.
Das funktioniert, weil Kubernetes den tatsächlichen Zustand ständig mit dem gewünschten Zustand abgleicht. Das Löschen eines Pods ändert nicht die im Deployment gespeicherte gewünschte Anzahl der Replikate. Daher erkennt das System die Löschung als Abweichung und erstellt einen Ersatz.
Testen Sie dies, indem Sie einen der Pods manuell löschen.
Listen Sie zunächst die Pods erneut auf:
kubectl get pods
Kopieren Sie den vollständigen Namen eines Pods, zum Beispiel nginx-deployment-66b6c48dd5-8j64w.
Löschen Sie nun genau diesen Pod:
kubectl delete pod <paste-pod-name-here>
Kubernetes meldet, dass der Pod gelöscht wurde. Führen Sie sofort erneut kubectl get pods aus:
kubectl get pods
Sie werden etwas Bemerkenswertes sehen:
- Der alte Pod wird beendet oder ist bereits verschwunden.
- Ein neuer Pod mit einem anderen Namen und einem sehr niedrigen Alter (zum Beispiel 2 Sekunden) ist bereits erschienen.
Das Deployment hat bemerkt, dass ein Mitarbeiter fehlte, und sofort einen neuen eingestellt, damit die Teamgröße bei 3 bleibt. Dadurch bleibt Ihre Anwendung auch dann online, wenn einzelne Server oder Container ausfallen.
Hochskalieren
Stellen Sie sich vor, Ihre Website wird beliebter. 3 Webserver reichen nicht mehr aus; Sie benötigen 5. Müssen Sie neue Dateien manuell erstellen oder eilig weitere Pods anlegen?
Durch das Skalieren eines Deployments ändern Sie die gewünschte Anzahl, nicht nur die aktuell ausgeführten Prozesse. Deshalb bleibt die neue Größe über eine einzelne manuelle Aktion hinaus bestehen. Die Controller behandeln die aktualisierte Replikatanzahl weiterhin als maßgeblich, bis Sie sie erneut ändern.
Nein. Sie weisen den Manager einfach an, die Anzahl zu erhöhen.
Mit dem Befehl kubectl scale können Sie die Anzahl der Replikate direkt ändern.
Ändern Sie die Anzahl der Replikate von 3 auf 5:
kubectl scale deployment/nginx-deployment --replicas=5
Beobachten Sie nun, was passiert:
kubectl get pods
Jetzt sollten 5 Pods ausgeführt werden. Zwei neue Pods wurden gestartet, um die neue Vorgabe zu erfüllen.
Sie können auch herunterskalieren. Wenn der Datenverkehr abnimmt, können Sie Ressourcen sparen, indem Sie die Anzahl reduzieren:
kubectl scale deployment/nginx-deployment --replicas=2
Führen Sie kubectl get pods erneut aus. Sie werden sehen, dass Kubernetes die überzähligen Pods beendet, bis nur noch 2 übrig sind.
Diese dynamische Skalierung ist der Grund, warum Unternehmen Kubernetes schätzen.
Zusammenfassung
In diesem Lab haben Sie das Deployment kennengelernt – den intelligenten Manager, der dafür sorgt, dass Ihre Anwendungen ausgeführt werden.
Sie haben erfolgreich:
- Ein Deployment mit 3 Mitarbeiter-Pods erstellt.
- Überprüft, dass das Deployment ausgefallene Pods automatisch ersetzt (Selbstheilung).
- Die Anzahl der Replikate mit einem einzigen Befehl erhöht und verringert (Skalierung).
Jetzt verstehen Sie, warum eigenständige Pods nur selten direkt erstellt werden. Deployments bieten Zuverlässigkeit und Flexibilität und übernehmen die komplexe Arbeit der Planung und des Neustarts, sodass Sie sich darum nicht kümmern müssen.


