Eine ConfigMap ist ein Objekt in Kubernetes, das Konfigurationsdaten als Schlüssel-Wert-Paare speichert – etwa Umgebungsvariablen, Einstellungsdateien oder Kommandozeilenparameter. Die Idee dahinter ist die Trennung von Code und Konfiguration: Das Container-Image bleibt unverändert, die Einstellungen liegen als eigenständige Ressource im Cluster und können je Umgebung (Entwicklung, Test, Produktion) unterschiedlich sein.
Wie wird eine ConfigMap verwendet?
Eine ConfigMap wird im Namespace angelegt und von Pods konsumiert. Es gibt drei typische Wege:
- Umgebungsvariablen: Einzelne Werte oder die gesamte ConfigMap werden dem Container über
envbzw.envFrombereitgestellt. - Volumes: Die ConfigMap wird als Datei in ein Verzeichnis des Containers gemountet – ideal für Konfigurationsdateien wie
application.properties. - Kommandozeilenargumente: Werte lassen sich in die
argseines Containers einsetzen.
Ein Beispiel: kubectl create configmap app-config --from-literal=log-level=info legt eine ConfigMap mit einem Eintrag an. Die Definition erfolgt wie bei allen Kubernetes-Objekten in YAML.
Wichtige Eigenschaften
- Größenlimit: Eine ConfigMap darf höchstens 1 MiB groß sein – größere Daten gehören in einen PersistentVolume-Speicher.
- Kein automatisches Reload: Ändert sich eine ConfigMap, aktualisieren laufende Pods ihre Werte nicht von selbst; ein Pod-Neustart (etwa über ein Deployment-Rollout) ist nötig.
- Unveränderbar: Mit
immutable: true(stabil seit Kubernetes 1.21) lässt sich eine ConfigMap gegen spätere Änderungen sperren – das verbessert Sicherheit und Performance.
ConfigMap oder Secret?
ConfigMaps speichern nicht-vertrauliche Konfiguration im Klartext. Für Passwörter, Tokens und Schlüssel ist das Secret die richtige Ressource – auch wenn es äußerlich ähnlich aussieht, gelten dort andere Sicherheitsanforderungen. Beide Objekttypen werden in Helm-Charts häufig gemeinsam ausgerollt.