Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine kleine App mit Deployment, Service und ConfigMap

Nach dieser Lektion: Ich kann eine kleine App aus Deployment, Service und ConfigMap bauen und ändern.

Lektion, 70 Min.13 BefehleKubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Wie arbeiten die drei Objekte zusammen?

Eine kleine App in Kubernetes besteht meist aus drei Objekten. Das Deployment hält die Pods, der Service gibt den Namen und die ConfigMap die Einstellungen. Jedes tut eine Sache, und erst zusammen ergeben sie eine App.

Die Kantine einer Fachhochschule in Stuttgart zeigt ihren Tagesplan auf einer Seite. Der Plan steht in einer ConfigMap. Zwei Pods liefern die Seite aus, und ein Service gibt ihnen einen Namen.

Am Ende dieser Lektion

Notiz

Ich kann eine kleine App aus Deployment, Service und ConfigMap bauen und ändern.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Deploymenthält eine Zahl gleicher Pods am Laufen
Servicegibt einer Gruppe von Pods einen festen Namen
ConfigMaphält Einstellungen getrennt vom Programm
Manifesteine Beschreibung eines Objekts als Textkind: Deployment
Selectordie Labels, an denen ein Service seine Pods erkennt
Rolloutdas Ersetzen der alten Pods durch neue

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Jedes Objekt tut genau eine Sache

Das Deployment hält die Pods am Laufen und gibt ihnen Labels. Der Service sucht Pods mit diesen Labels und gibt ihnen einen Namen. Die ConfigMap liefert die Werte, die beim Start in die Pods kommen.

Sie hängen nur an zwei Stellen zusammen. Der Selector des Services muss zu den Labels der Pods passen. Das Deployment muss die ConfigMap beim Namen nennen.

Den Namespace kurs6 anlegen

Befehl
kubectl create namespace kurs6

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 ConfigMap mit dem Speiseplan anlegen

Befehl
kubectl create configmap speiseplan -n kurs6 --from-literal=GERICHT=Linsensuppe --from-literal=PREIS=4,20

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 App entsteht in drei Schritten

Erst das Deployment: zwei Pods, deren Programm eine Seite aus GERICHT, PREIS und dem eigenen Namen macht. Dann verbinden wir es mit der ConfigMap. Zuletzt legen wir den Service an.

Der Selector des Services wird dabei vom Deployment übernommen. Er passt also zu den Labels der Pods, ohne dass Sie ihn schreiben.

Das Deployment kantine mit zwei Pods anlegen

Befehl
kubectl create deployment kantine -n kurs6 --image=busybox:1.37.0 --replicas=2 --port=8080 -- sh -c 'mkdir -p /www; echo "Heute: $GERICHT fuer $PREIS Euro (Pod $HOSTNAME)" > /www/index.html; trap "exit 0" TERM; httpd -f -p 8080 -h /www & wait'

Hier 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 mit der ConfigMap verbinden

Befehl
kubectl set env deployment/kantine -n kurs6 --from=configmap/speiseplan

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Service für das Deployment anlegen

Befehl
kubectl expose deployment kantine -n kurs6 --port=80 --target-port=8080

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Auf den Austausch der Pods warten

Befehl
kubectl rollout status deployment/kantine -n kurs6 --timeout=90s

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 drei Objekte der App auflisten

Befehl
kubectl get deployment,service,configmap -n kurs6 -o name

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 App antwortet über den Namen des Services

Wir fragen die App wie ein anderes Programm im Cluster. Ein kurzer Pod tmp stellt eine Anfrage an den Namen kantine und verschwindet danach.

Die Seite nennt Gericht, Preis und den Pod, der geantwortet hat. Bei der nächsten Anfrage kann es der andere Pod sein.

Die App über den Service anfragen

Befehl
kubectl run -n kurs6 tmp --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kantine

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Änderung braucht zwei Schritte

Jetzt wechselt das Gericht. Der erste Schritt ändert die ConfigMap. Der zweite ersetzt die Pods, damit sie die neuen Werte lesen. Danach wartet rollout status, bis die neuen Pods laufen.

Fragen Sie die App erst nach dem Warten. Kommt direkt nach dem Neustart eine Fehlermeldung zur Route, warten Sie einige Sekunden und drücken Sie erneut Ausführen.

Das Gericht in der ConfigMap ändern

Befehl
kubectl patch configmap speiseplan -n kurs6 -p '{"data":{"GERICHT":"Gemuesecurry"}}'

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 ersetzen

Befehl
kubectl rollout restart deployment/kantine -n kurs6

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Auf den Austausch warten

Befehl
kubectl rollout status deployment/kantine -n kurs6 --timeout=90s

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 App noch einmal anfragen

Befehl
kubectl run -n kurs6 tmp --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kantine

Hier 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, eine App sei fertig, sobald alle drei Objekte da sind. Sie müssen aber zueinander passen. Ein Selector ohne Treffer, ein falscher Port oder eine ConfigMap mit anderem Namen: Jedes Objekt sieht gesund aus, und die App antwortet trotzdem nicht.

Den Namespace kurs6 wieder löschen

Befehl
kubectl delete namespace kurs6

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: Kubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.