Understand Kubernetes ConfigMaps

Abgeschlossen

Im Anwendungsrepository gibt es eine Konfigurationsdatei, die in die Datei index.html geladen wird, damit die Umgebungsvariablen aktualisiert werden können, ohne dass ein vollständiges Image erstellt werden muss.

Die Konfigurationsdatei enthält keine vertraulichen Informationen, sie muss nur zusammen mit dem Container geladen werden. Wie können wir die Datei in den Container einbinden, ohne dass Verschlüsselung oder Codierung erforderlich ist?

Grundlegendes zu ConfigMaps

ConfigMaps sind Gegenstücke zu Secrets. Während Geheimnisse eine Möglichkeit zum Speichern und Bereitstellen von sensiblen Daten bieten, sind ConfigMaps Objekte, die eine Möglichkeit bieten, nicht sensible Daten mit derselben Schlüssel-Wert-Struktur wie ein Geheimnis zu speichern. Mit dem ConfigMaps-Objekt können Sie Konfigurationen von Containerimages entkoppeln, sodass die Images zustandslos bleiben können.

Sie erstellen eine ConfigMap, um Konfigurationsdaten getrennt vom Anwendungscode zu speichern und sie ähnlich wie Geheimnisobjekte in den Pod zu laden. Sie können nur auf ConfigMaps verweisen, indem Sie eine Umgebungsvariable verwenden oder sie als Datei in einem Volume im Container bereitstellen.

ConfigMaps haben weisen Einschränkung hinsichtlich der Datengröße auf. Sie können bis zu 1 MiB Daten darin speichern. Die Größenbeschränkung unterstützt Sie bei der Vermeidung großer, komplexer Konfigurationsdateien, indem Sie gezwungen sind, große Konfigurationen in kleinere Blöcke aufzuteilen. Mit ConfigMaps können Sie nur die erforderlichen Konfigurationsdateien in Ihre Container einbinden, was eine höhere Granularität ermöglicht.

Wie Geheimnisse sind ConfigMaps an einen Namespace gebunden. Sie können nur auf eine ConfigMap-Datei zugreifen und diese bereitstellen, indem Sie die Container verwenden, die im selben Namespace vorhanden sind, in dem sie erstellt wurde.

Configmaps werden auch häufig von anderen Tools wie Helm und Kubernetes-Operatoren zum Speichern und Lesen von Zuständen verwendet.

ConfigMap-Aktualisierungen

Alle ConfigMaps, die in einem Pod als Volumes eingebunden werden, werden automatisch aktualisiert, sobald ihr Wert geändert wird. Diese Änderung tritt aufgrund der Kubelet-Konfiguration möglicherweise nicht sofort in Kraft, erfolgt aber automatisch, sodass der Pod nicht neu gestartet werden muss.

Wenn eine ConfigMap-Datei an Umgebungsvariablen gebunden ist, wird sie nicht automatisch aktualisiert. In diesen Fällen ist es erforderlich, den Pod neu zu starten, damit die Änderungen wirksam werden.

Erstellen und Verwenden von ConfigMaps

Sie können eine ConfigMap mit dem gleichen Ansatz wie bei einem Geheimnis erstellen: eine YAML-Datei. Die ConfigMap-Spezifikation lautet wie folgt:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-name
  namespace: default
data:
  key-name: "value as key"
  key.name: |
    multi line
    property, called "file-like" values

Sie können auf ConfigMaps mit mindestens einem Schlüssel in der Spezifikation eines Pods oder einer Bereitstellung verweisen, wie im folgenden Beispiel gezeigt:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: ENVIRONMENT_VARIABLE_NAME
          valueFrom:
            configMapKeyRef:
              name: configmap-name
              key: key-name

Sie können sie auch als Dateien innerhalb des Pods mit schreibgeschützten Volumes bereitstellen, wie im folgenden Beispiel gezeigt:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      volumeMounts:
      - name: volume-name
        mountPath: "/path/to/mount"
        readOnly: true
  volumes:
    - name: volume-name
      configMap:
        name: configmap-name
        items:
        - key: "key-name"
          path: "path/to/mount/the/key"

Überprüfen Sie Ihr Wissen

1.

Warum sollten Sie ConfigMaps verwenden?

2.

Wie können Sie ConfigMaps in einer Anwendung verwenden?

3.

Bedeutet der Namespace eine Einschränkung für ConfigMaps?