44 ConfigMaps in Kubernetes

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.

44.1 Anwendungsfälle und Vorteile

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.

44.2 Erstellung von ConfigMaps

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>

44.3 Verwendung von ConfigMaps

Pods verwenden ConfigMaps über Volumes oder Umgebungsvariablen. Ein Pod kann mehrere ConfigMaps oder mehrere Schlüssel aus einer einzigen ConfigMap referenzieren.

44.3.1 Beispiel: Konfiguration über Umgebungsvariablen

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>

44.3.2 Beispiel: Konfiguration über Volumes

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>

44.4 Sicherheitsaspekte

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.

44.5 Limitationen und Best Practices

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.

44.6 Erzeugung von ConfigMaps mit kubectl

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.

44.6.1 Erstellung einer ConfigMap aus Literalwerten

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.

44.6.2 Erstellung einer ConfigMap aus einer Datei

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.

44.6.3 Erstellung einer ConfigMap aus einem Verzeichnis

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.

44.6.3.1 Hinweise zur Verwendung

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.