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

Kubernetes ConfigMap verwenden

Nach dieser Lektion: Ich kann eine Einstellung in einer ConfigMap ändern und sagen, wann ein Pod sie sieht.

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

Wie ändert man eine Einstellung in Kubernetes?

Eine ConfigMap ist in Kubernetes ein Objekt, das Einstellungen als Paare aus Name und Wert speichert, getrennt vom Programm. So ändern Sie eine Einstellung, ohne das Programm neu zu bauen.

Die Mensa einer Hochschule in Köln zeigt auf ihrer Webseite die Öffnungszeit. Sie ändert sich im Semester. Steht die Zeit in einer ConfigMap, ändern Sie einen Wert und müssen das Programm nicht anfassen.

Am Ende dieser Lektion

Notiz

Ich kann eine Einstellung in einer ConfigMap ändern und sagen, wann ein Pod sie sieht.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
ConfigMapein Objekt mit Einstellungen als Paaren aus Name und Wert
Umgebungsvariableein Wert, den ein Programm beim Start von außen erhältGRUSS
Schlüsselder Name eines Wertes in der ConfigMap
Rolloutdas Ersetzen der alten Pods durch neue
Patcheine kleine Änderung an einem vorhandenen Objekt
Imagedas fertige Paket, aus dem ein Container entstehtbusybox:1.37.0

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

Einstellungen gehören nicht ins Image

Steht die Öffnungszeit im Programm selbst, müssen Sie es für jede Änderung neu bauen und neu ausliefern. Das ist langsam und fehleranfällig.

Eine ConfigMap hält die Werte getrennt. Ein Schlüssel nennt den Wert, hier GRUSS und OEFFNUNG. Der Befehl unten legt sie im Namespace kurs4 an. Zuerst brauchen Sie den Namespace.

Den Namespace kurs4 anlegen

Befehl
kubectl create namespace kurs4

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 ConfigMap mit zwei Schlüsseln anlegen

Befehl
kubectl create configmap begruessung -n kurs4 --from-literal=GRUSS=Willkommen --from-literal=OEFFNUNG=9

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 Werte der ConfigMap lesen

Befehl
kubectl get configmap begruessung -n kurs4 -o jsonpath='{.data}'

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 Pod bekommt die Werte als Umgebungsvariablen

Ein Programm liest die Werte als Umgebungsvariablen. Kubernetes setzt sie beim Start des Pods aus der ConfigMap.

Der erste Befehl legt ein Deployment seite an. Sein Programm macht beim Start aus GRUSS und OEFFNUNG eine Seite. Der zweite verbindet das Deployment mit der ConfigMap. Das ersetzt den Pod, und rollout status wartet, bis der neue läuft.

Ein Deployment anlegen, das die Seite baut

Befehl
kubectl create deployment seite -n kurs4 --image=busybox:1.37.0 --port=8080 -- sh -c 'mkdir -p /www; echo "$GRUSS, wir oeffnen um $OEFFNUNG Uhr" > /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/seite -n kurs4 --from=configmap/begruessung

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 neuen Pod warten

Befehl
kubectl rollout status deployment/seite -n kurs4 --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 Variable im Pod lesen

Befehl
kubectl exec -n kurs4 deployment/seite -- printenv GRUSS

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 laufender Pod sieht eine Änderung nicht

Jetzt ändern wir den Gruß in der ConfigMap. patch ändert nur das, was Sie angeben.

Prüfen Sie danach zweimal. Die ConfigMap enthält den neuen Wert. Der laufende Pod gibt aber weiter den alten aus, denn Kubernetes setzt Umgebungsvariablen nur beim Start. Seine Seite zeigt den alten Gruß ebenfalls.

Den Gruß in der ConfigMap ändern

Befehl
kubectl patch configmap begruessung -n kurs4 -p '{"data":{"GRUSS":"Guten Tag"}}'

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 neuen Wert in der ConfigMap lesen

Befehl
kubectl get configmap begruessung -n kurs4 -o jsonpath='{.data.GRUSS}'

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

Denselben Wert im laufenden Pod lesen

Befehl
kubectl exec -n kurs4 deployment/seite -- printenv GRUSS

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, ein Pod bemerke eine geänderte ConfigMap sofort. Kubernetes liest die Werte aber nur beim Start des Pods. Der Pod muss ersetzt werden, bevor er den neuen Wert sieht. Wer die ConfigMap ändert und die Seite alt bleibt, hat nichts falsch gemacht.

Ein Neustart ersetzt die Pods und lädt neu

kubectl rollout restart ersetzt alle Pods eines Deployments durch neue. Die neuen lesen die ConfigMap beim Start und sehen den neuen Wert.

Warten Sie mit rollout status, bis der Austausch fertig ist. Läuft ein Befehl direkt nach dem Neustart in eine Fehlermeldung zur Route, warten Sie einige Sekunden und drücken Sie erneut Ausführen.

Die Pods des Deployments ersetzen

Befehl
kubectl rollout restart deployment/seite -n kurs4

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/seite -n kurs4 --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 Variable im neuen Pod lesen

Befehl
kubectl exec -n kurs4 deployment/seite -- printenv GRUSS

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 Namespace kurs4 wieder löschen

Befehl
kubectl delete namespace kurs4

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.