Wie hält Kubernetes drei Kopien am Laufen?
Ein Deployment ist in Kubernetes der Auftrag, eine feste Zahl gleicher Pods am Laufen zu halten. Fällt ein Pod aus, startet Kubernetes von selbst einen neuen.
Der Onlineshop eines Fahrradhändlers in Leipzig nimmt Bestellungen an. Läuft das Programm nur einmal, sind alle Bestellungen weg, sobald es abstürzt. Mit drei Kopien bedient der Shop weiter, auch wenn eine ausfällt.
Am Ende dieser Lektion
Notiz
Ich kann drei Kopien eines Pods am Laufen halten.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Deployment | der Auftrag, eine Zahl gleicher Pods am Laufen zu halten | |
| Replica | eine der gleichen Kopien eines Pods | replicas: 3 |
| ReplicaSet | die Liste, mit der ein Deployment seine Pods zählt | |
| Soll-Zustand | das, was Sie sich wünschen | |
| Skalieren | die gewünschte Zahl der Kopien ändern | |
| Label | ein Schild mit Name und Wert an einem Pod | app=bestellungen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Deployment ist ein Wunsch an Kubernetes
Sie sagen nicht, wie Pods gestartet werden. Sie sagen, wie viele Sie wollen. Das ist der Soll-Zustand.
Kubernetes vergleicht den Soll-Zustand ständig mit dem, was läuft. Fehlt ein Pod, startet es einen. Sind es zu viele, beendet es einen. Die Befehle unten legen den Namespace kurs2 an und darin das Deployment bestellungen mit drei Replicas.
Den Namespace kurs2 anlegen
kubectl create namespace kurs2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Deployment mit drei Replicas anlegen
kubectl create deployment bestellungen --image=busybox:1.37.0 --replicas=3 -n kurs2 -- sleep 3600Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Deployment anzeigen
kubectl get deployment bestellungen -n kurs2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
So lesen Sie die Tabelle eines Deployments
| Spalte | Das steht darin |
|---|---|
| READY | 3/3 heißt: Drei Pods laufen, drei sind gewünscht |
| UP-TO-DATE | Wie viele Pods nach der neuesten Vorlage gebaut sind |
| AVAILABLE | Wie viele Pods Anfragen annehmen |
| AGE | Wie lange das Deployment schon besteht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das ReplicaSet zählt die Pods
Ein Deployment zählt nicht selbst. Es legt ein ReplicaSet an, und dieses hält die Zahl der Pods richtig. Das ReplicaSet erkennt seine Pods an einem Label, hier app=bestellungen.
Der Befehl unten zeigt es. DESIRED ist der Wunsch, CURRENT die Zahl der vorhandenen Pods, READY die Zahl der bereiten. Der Name enthält eine Kennung, die bei jedem Lauf anders ist.
Das ReplicaSet anzeigen
kubectl get replicasets -n kurs2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein gelöschter Pod wird ersetzt
Löschen Sie einen Pod, fehlt dem Soll-Zustand einer. Das ReplicaSet merkt es sofort und startet einen neuen Pod mit neuem Namen.
Der erste Befehl löscht den ersten Pod der Liste. --grace-period=1 beendet ihn schnell, sonst wartet Kubernetes bis zu dreißig Sekunden. Danach laufen wieder drei Pods, einer davon ist nur wenige Sekunden alt.
Genau einen Pod löschen
kubectl delete -n kurs2 --grace-period=1 $(kubectl get pods -n kurs2 -o name | head -n 1)Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Pods nach dem Löschen anzeigen
kubectl get pods -n kurs2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Skalieren ändert nur die gewünschte Zahl
Skalieren heißt, die Zahl der Replicas zu ändern. Der Befehl kubectl scale setzt eine neue Zahl. Das Deployment startet oder beendet dann genau so viele Pods, dass die Zahl stimmt.
Wir gehen hier auf zwei herunter. Ein Pod bleibt etwa eine halbe Minute im Status Terminating, weil sleep das Beenden nicht annimmt. Gezählt werden deshalb nur die Pods mit Status Running.
Auf zwei Replicas herunterskalieren
kubectl scale deployment bestellungen -n kurs2 --replicas=2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die gewünschte Zahl abfragen
kubectl get deployment bestellungen -n kurs2 -o jsonpath='{.spec.replicas}'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die laufenden Pods zählen
kubectl get pods -n kurs2 --no-headers | grep -c RunningHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, ein Deployment starte seine Pods einmal und lasse sie dann in Ruhe. Es vergleicht aber ständig Wunsch und Wirklichkeit. Deshalb ersetzt es einen gelöschten Pod, solange das Deployment besteht. Nur wer das Deployment löscht oder auf null skaliert, beendet das Programm.
Das Deployment mit seinen Pods löschen
kubectl delete deployment bestellungen -n kurs2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.