Am Laufen halten
Der Webshop eines Ladens muss den ganzen Tag erreichbar sein. Wenn der Rechner, auf dem er läuft, nachts um drei ausfällt, muss ihn jemand woanders neu starten. Kubernetes übernimmt diese Arbeit: Du sagst, was laufen soll, und es hält es am Laufen und startet eine neue Kopie, sobald eine verschwindet.
Am Ende dieser Lektion
Notiz
Ich kann sagen, was ein Deployment tut und was passiert, wenn einer seiner Pods gelöscht wird.
Schlüsselwörter
- Cluster: die Maschinen, auf denen Kubernetes deine Programme ausführt.
- Node (Knoten): eine Maschine des Clusters.
- Pod: eine laufende Kopie eines Programms, aus einem oder mehreren Containern.
- Deployment: dein Wunsch nach einer Anzahl gleicher Pods, den Kubernetes wahr hält.
- Namespace: ein benannter Ordner, der die Dinge einer Gruppe von denen einer anderen trennt.
- kubectl: der Befehl, der mit dem Cluster spricht.
Zum Start: Was du schon weißt
Notiz
Antworte im Kopf. 1. Was ist ein Container? 2. Was geht schief, wenn ein Programm nur auf einem Rechner läuft und dieser Rechner ausfällt? 3. Was bedeutet es, ein Programm zu skalieren? Alle drei Antworten brauchst du gleich.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten. Dieses Lab ist eine ganze Ubuntu-Maschine nur für dich, mit einem kleinen Kubernetes-Cluster, k3s, darin, und braucht deshalb beim ersten Mal einige Minuten zum Starten. Jede Schaltfläche Ausführen tippt ihren Befehl ins Terminal der Maschine, einen nach dem anderen in derselben Sitzung. Wenn eine meldet, dass der Cluster nicht bereit ist, warte eine Minute und drücke sie noch einmal. Um zuzusehen oder eigene Befehle zu tippen, klicke in der Leiste auf Terminal öffnen. Kubernetes braucht 2 GB Arbeitsspeicher: Das ist die Maschine eines Einrichtungskontos, die eines kostenlosen Kontos hat 1 GB.
Ein Cluster, den man lesen kann
Dieser Cluster ist eine einzige Maschine, hat also einen Node. kubectl get nodes listet ihn auf: Sein STATUS ist Ready, seine Rolle control-plane, und die letzte Spalte ist die k3s-Version. kubectl get pods -A listet die Pods aller Namespaces auf. Die in kube-system hat Kubernetes selbst gestartet: coredns gibt dem Cluster Namen, und local-path-provisioner gibt Pods einen Ort für Dateien.
kubectl get nodesHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
kubectl get pods -AHier 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 hält Pods am Laufen
Zuerst ein eigener Namespace, demo, damit hier nichts dem Lab in den Weg kommt. Dann ein Deployment namens hello: drei Kopien eines kleinen Programms, busybox mit sleep. Diese Maschine erreicht keine Image-Registry, deshalb nutzt jeder Pod in diesem Lab das eine Image, das sie hat, busybox. kubectl get pods -n demo listet drei Pods auf, deren Namen mit hello- beginnen und mit zufälligen Buchstaben enden. Nach ein paar Sekunden sind sie Running, bis dahin Pending oder ContainerCreating.
kubectl create namespace demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
kubectl create deployment hello --image=busybox:1.37.0 --replicas=3 -n demo -- 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.
kubectl get pods -n demoHier 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, das Löschen eines Pods beende das Programm. Das stimmt nicht. Das Deployment will weiterhin drei Pods und macht einen neuen. Um das Programm zu beenden, löscht man das Deployment oder skaliert es herunter.
Lösche die Pods, und sie kommen zurück
Lösche jetzt alle drei Pods auf einmal. --grace-period=1 stoppt sie nur schnell. Der Befehl gibt drei Zeilen aus, eine für jeden gelöschten Pod. Liste die Pods dann noch einmal auf: Es sind drei, mit neuen Namen und einem AGE von ein paar Sekunden. Niemand hat Kubernetes gesagt, sie zu starten. Das Deployment hat bemerkt, dass es keinen mehr hatte, und drei gemacht.
kubectl delete pods -n demo -l app=hello --grace-period=1Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
kubectl get pods -n demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Warum sind es noch drei Pods, nachdem du alle drei gelöscht hast? Antwort: Das Deployment ist ein Wunsch nach drei Pods, und Kubernetes macht diesen Wunsch immer wieder wahr.
Skaliere es und räume auf
Skalieren heißt, die Zahl im Wunsch zu ändern. kubectl scale verlangt fünf. Das Deployment zeigt READY als 3/5, während die zwei neuen Pods starten, dann 5/5. Der letzte Befehl löscht den Namespace, und alles darin verschwindet mit ihm, bereit für das Lab.
kubectl scale deployment hello -n demo --replicas=5Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
kubectl get deployment hello -n demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
kubectl delete namespace demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Jetzt das Lab machen
Tipp
Du hast gesehen, wie ein Deployment drei Pods hält. Dein Lab verlangt mehr: drei Webserver hinter dem einen Namen eines Service, ein ConfigMap, aus dem die Seiten gemacht werden, und drei kaputte Deployments, die du reparierst, indem du liest, was Kubernetes sagt. Öffne die Datei README.md in deinem Home-Ordner mit cat README.md im Terminal.
Abschlusscheck
Tipp
Antworte, ohne zurückzuschauen. 1. Was tut ein Deployment? 2. Was passiert, wenn du einen Pod eines Deployments mit drei Pods löschst? 3. Was ändert kubectl scale? 4. Wofür ist ein Namespace da? Antworten: Es hält eine Anzahl gleicher Pods am Laufen; es macht einen neuen, sodass es wieder drei gibt; die Anzahl der Pods, die das Deployment will; die Dinge einer Gruppe von denen einer anderen zu trennen.
Für Lehrkräfte
Tipp
Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab gehalten wird: Die Schritte und die Ausführen-Schaltflächen sind die Lektion, und das Lab ist die Kopie jeder lernenden Person. Sie wird in einem VM-Lab gehalten: Jede lernende Person hat eine eigene Ubuntu-Maschine mit einem Kubernetes-Cluster aus einem Node (k3s), und eine Ausführen-Schaltfläche tippt in deren Terminal und zeigt die Ausgabe. Kernpunkte: 1. Ein Deployment ist ein Wunsch nach einer Anzahl Pods. 2. Kubernetes hält den Wunsch wahr, ein gelöschter Pod kommt also zurück. 3. Skalieren ändert die Zahl. Häufiger Fehler: glauben, das Löschen eines Pods beende das Programm. Material: das Lab und ein Browser sowie ein Einrichtungskonto, weil der Cluster 2 GB braucht. Tipp: Fragen Sie die Klasse vor dem Löschen der Pods, was passieren wird und warum. Das Lab selbst hat eine Prüfung, die den Cluster bewertet. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektions-Editor eine neue von Grund auf.