ConfigMaps sind ein API-Objekt in Kubernetes, das Konfigurationsdaten in Schlüssel-Wert-Paaren speichert. Diese können verwendet werden, um konfigurierbare Parameter in einem Pod bereitzustellen, ohne dass Hardcoding-Werte erforderlich sind. Sie sind besonders nützlich in Umgebungen, in denen Anwendungen über mehrere Umgebungen wie Entwicklung, Test und Produktion verteilt sind und unterschiedliche Konfigurationen erfordern.
ConfigMaps bieten eine Methode zur Trennung von Konfigurationsartefakten von Image-Inhalten, was die Anwendungsbereitstellung vereinfacht. Typische Anwendungsfälle umfassen:
Die Verwendung von ConfigMaps bringt mehrere Vorteile, wie etwa die Flexibilität bei der Konfigurationsänderung ohne Neuerstellung des Docker-Images oder die Möglichkeit, Konfigurationen wiederzuverwenden.
ConfigMaps können imperativ über das kubectl
Kommandozeilen-Tool oder deklarativ durch eine YAML-Konfigurationsdatei
erstellt werden. Hier ein Beispiel für den imperativen Ansatz:
kubectl create configmap <map-name> --from-literal=<key>=<value>
Für die deklarative Methode würde eine YAML-Datei wie folgt definiert:
apiVersion: v1
kind: ConfigMap
metadata:
name: <map-name>
data:
<key>: <value>Pods verwenden ConfigMaps über Volumes oder Umgebungsvariablen. Ein Pod kann mehrere ConfigMaps oder mehrere Schlüssel aus einer einzigen ConfigMap referenzieren.
apiVersion: v1
kind: Pod
metadata:
name: <pod-name>
spec:
containers:
- name: <container-name>
image: <image-name>
env:
- name: <env-var-name>
valueFrom:
configMapKeyRef:
name: <map-name>
key: <key>apiVersion: v1
kind: Pod
metadata:
name: <pod-name>
spec:
containers:
- name: <container-name>
image: <image-name>
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: <map-name>ConfigMaps sind nicht für die Speicherung sensibler Daten wie Passwörter geeignet. Für solche Daten sollten Secrets verwendet werden. ConfigMaps sind standardmäßig unverschlüsselt und können von jedem gelesen werden, der Zugriff auf die API hat.
Es gibt einige Limitationen bei der Verwendung von ConfigMaps:
Best Practices beinhalten:
ConfigMaps sind ein leistungsstarkes Tool im Kubernetes Ökosystem, das die Konfigurationsverwaltung erleichtert und somit zu den bewährten Praktiken für Cloud-native Anwendungen gehört.
ConfigMaps sind Schlüssel-Wert-Paare, die Konfigurationsdaten
enthalten und von Kubernetes-Pods verwendet werden können. Die
kubectl-CLI stellt verschiedene Möglichkeiten zur
Verfügung, um ConfigMaps zu erstellen.
Die Erstellung einer ConfigMap aus Literalwerten erfolgt mit dem
--from-literal Parameter. Jedes Schlüssel-Wert-Paar wird
als separates Argument übergeben:
kubectl create configmap cus-conf --from-literal=KEY1=Value1 --from-literal=KEY2=Value2
Diese Methode ist für die Definition einfacher Konfigurationen direkt auf der Kommandozeile geeignet.
Eine einzelne Datei kann direkt in eine ConfigMap umgewandelt werden. Der Schlüssel im ConfigMap-Objekt wird dabei standardmäßig auf den Dateinamen gesetzt:
kubectl create configmap cus-conf --from-file=/path/to/config-map.txt
Inhalt von config-map.txt:
This is Config Value.
Die Datei config-map.txt wird in eine ConfigMap
umgesetzt, wobei der Dateiinhalt dem Schlüssel
config-map.txt zugeordnet wird.
Um alle Dateien in einem Verzeichnis in eine ConfigMap zu übernehmen, wird das Verzeichnis als Argument übergeben:
kubectl create configmap cus-conf --from-file=/path/to/Directory
Dieser Befehl erstellt eine ConfigMap, die ein Schlüssel-Wert-Paar für jede Datei im angegebenen Verzeichnis enthält. Der Schlüsselname entspricht dem Dateinamen, der Wert ist der Dateiinhalt.
--from-file kann man auch einen
Schlüssel explizit angeben:
--from-file=keyname=/path/to/file.Secrets verwendet werden.Die erstellten ConfigMaps können anschließend in Pods eingebunden werden, indem man sie als Umgebungsvariablen oder Volumes einbindet. Änderungen an einer ConfigMap sind nicht unmittelbar für Anwendungen innerhalb von Pods sichtbar, sondern werden beim Neustart der Pods angewendet.