Lab 11: Arbeiten mit ConfigMaps¶
In dieser Serie von Aufgaben lernen wir den Umgang mit ConfigMaps kennen. Fast alle Konzepte für ConfigMaps lassen sich später auf Secrets übertragen.
Übung 1: Erstellen einer ConfigMap¶
Wir erstellen eine ConfigMap mit dem Namen my-config, die zwei Schlüssel-Wert-Paare enthält: key1: value1 und
key2: value2.
Wir werden sowohl imperative als auch deklarative Methoden verwenden, um die ConfigMap zu erstellen.
Imperative Methode¶
Der folgende Befehl legt eine ConfigMap mit Namen "my-config" an und enthält zwei Schlüssel-Wert-Kombinationen.
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
Lasst euch nun den Inhalt der neuen ConfigMap ausgeben:
kubectl get configmap my-config -o "jsonpath= {.data.key1}"
jsonpath dient dabei dazu, den Wert des Schlüssels key1 direkt herauszusuchen und auszugeben. Um genauer zu
verstehen, warum .data.key übergeben wird, könnt ihr euch einmal den Inhalt ohne jsonpath ausgeben lassen:
kubectl get configmap my-config -o json
Ihr werdet sehen, dass die Schlüssel-Wert-Kombinationen im Unterfeld data enthalten sind.
Um anschließend die ConfigMap wieder zu löschen:
kubectl delete configmap my-config
Deklarative Methode¶
Die Datei declarative-config.yaml enthält die gleiche ConfigMap, die wir oben angelegt haben, als YAML. Wir können sie direkt mit kubectl anwenden.
declarative-config.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key1: "value1"
key2: "value2"
kubectl apply -f declarative-config.yaml
Lasst euch nun den Inhalt der neuen ConfigMap ausgeben um zu prüfen, dass das Ergebnis wie erwartet ist:
kubectl get configmap my-config -o "jsonpath= {.data.key1}"
Um die ConfigMap wieder zu löschen:
kubectl delete configmap my-config
Übung 2: Verwenden einer ConfigMap in einem Pod¶
Die Datei config-pod.yaml enthält die Deklarationen einer ConfigMap sowie einen Pod. Dieser loggt das
env aus und stoppt danach. Wir können das Ergebnis in den Logs sehen.
config-pod.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key1: "value1"
key2: "value2"
---
apiVersion: v1
kind: Pod
metadata:
name: config-pod
spec:
containers:
- name: busybox
image: busybox:1.36.1
command: ["sh", "-c", "env"]
envFrom:
- configMapRef:
name: my-config
readinessProbe:
exec:
command: ["sh", "-c", "true"]
initialDelaySeconds: 1
periodSeconds: 10
livenessProbe:
exec:
command: ["sh", "-c", "true"]
initialDelaySeconds: 5
periodSeconds: 20
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
restartPolicy: Never
kubectl apply -f config-pod.yaml
Überprüfen wir nun die Pod-Logs um zu sehen, ob die Umgebungsvariablen wirklich vorhanden sind:
kubectl logs config-pod
In den Logs seht ihr alle Umgebungsvariablen, die der Pod kennt. Unter anderem sollten auch key1 und key2 enthalten
sein.
Aufräumen:
kubectl delete configmap my-config
Übung 3: Mappen von ConfigMap-Werten auf Volumen¶
Die Datei volume-pod.yaml enthält eine ConfigMap, die per Volume in einen Pod gemountet wird. Wie im vorletzten Beispiel wird das Ergebnis geloggt, aber der Container wartet einige Zeit, bis er stoppt. Wir können ihn also mit exec untersuchen.
volume-pod.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key1: "value1"
key2: "value2"
---
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: busybox
image: busybox:1.36.1
command: ["sleep", "3600"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
readinessProbe:
exec:
command: ["sh", "-c", "true"]
initialDelaySeconds: 1
periodSeconds: 10
livenessProbe:
exec:
command: ["sh", "-c", "true"]
initialDelaySeconds: 5
periodSeconds: 20
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
volumes:
- name: config-volume
configMap:
name: my-config
restartPolicy: Never
Anwenden der Datei:
kubectl apply -f volume-pod.yaml
Wir prüfen nun, ob die Dateien erfolgreich in den Pod gemountet wurden:
kubectl exec -it volume-pod -- ls /etc/config
kubectl exec -it volume-pod -- cat /etc/config/key1
Im ersten Fall seht ihr alle Dateien, die angelegt wurden im Rahmen des Mountens. Der zweite Befehl gibt mit cat den
Inhalt der Datei key1 aus, welche den ersten Konfigurationswert enthält.
Haltet jetzt noch einmal einen moment inne und führt euch vor Augen, dass Kubernetes dem Pod für jede Schlüssel-Wert-Kombination in der ConfigMap eine Datei zur Verfügung stellt. Die Dateien enthalten jeweils die in der ConfigMap genannten Werte.
Aufräumen:
kubectl delete configmap/my-config
kubectl delete pod/volume-pod
sample.txt:
Hallo Welt