GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So verwenden Sie ConfigMaps für die Kubernetes-Konfiguration

Eine ConfigMap ist eine Kubernetes-Ressource zum Einfügen von Konfigurationen in Ihre Container. Sie ermöglichen es Ihnen, die Einstellungen Ihres Stacks getrennt von seinem Code zu verwalten. So arbeiten Sie mit ConfigMaps und stellen sie Ihren Pods bereit.

Wozu dienen ConfigMaps?

ConfigMaps wurden speziell entwickelt, um kleine Mengen nicht sensibler Konfigurationsdaten zu kapseln. Sie sind ein Mechanismus, um beliebige Schlüssel-Wert-Paare in Ihre Pods zu bekommen. Sie werden häufig verwendet, um die IP-Adresse Ihres Datenbankservers, die ausgehende E-Mail-Adresse für Ihre Anwendung und andere anwendungsspezifische Einstellungen zu speichern, die Sie außerhalb Ihrer Pods konfigurieren müssen.

Mit der ConfigMap können Sie diese Daten in einer dedizierten Kubernetes-Ressource verwalten. Pods erhalten die Schlüssel-Wert-Paare als Umgebungsvariablen oder Dateien in einem gemounteten Volume.

Wofür sollte man sie nicht verwenden?

Es gibt einige Situationen, in denen eine ConfigMap nicht sollte verwendet werden.

ConfigMaps werden nicht sicher gespeichert und ihre Werte sind nicht verschlüsselt. Sie dürfen keine sensiblen oder vertraulichen Daten enthalten, die bei einem Durchsickern ein Sicherheits- oder Datenschutzrisiko darstellen würden.

Fügen Sie keine Passwörter, API-Schlüssel oder Verschlüsselungsschlüssel in eine ConfigMap ein – verwenden Sie stattdessen ein Kubernetes-Secret, da diese ähnlich wie ConfigMaps funktionieren, jedoch mit zusätzlichem Schutz. Systeme, die eine Datenbankverbindung benötigen, sollten den Hostnamen in einer ConfigMap und die Anmeldeinformationen in einem separaten Secret platzieren.

Einzelne ConfigMaps dürfen eine Größe von 1 MB nicht überschreiten. Systeme, die mehr Konfigurationsschlüssel benötigen, sind möglicherweise besser mit einem alternativen Ansatz bedient, wie z. B. dem Einfügen manuell generierter Konfigurationsdateien über ein Volume.

Wenn Sie bei ConfigMaps bleiben möchten, sollten Sie Ihre Konfiguration auf mehrere ConfigMap-Ressourcen aufteilen. Dieser Ansatz sollte die 1-MB-Obergrenze vermeiden, während Sie jeden Ihrer Pods mit dem minimalen Satz an Konfigurationsschlüsseln versorgen können, den er benötigt.

ConfigMap-Werte können entweder UTF-8-Strings oder binäre Daten sein, die als Base64-String codiert sind. Schlüsselnamen können alphanumerische Zeichen enthalten, . (Punkt), - (Bindestrich) und _ (Unterstrich) Zeichen. Einige Programmiersprachen und Frameworks haben möglicherweise eine andere Konvention für Konfigurationsvariablen. Stellen Sie daher sicher, dass Sie ein Format verwenden, das sowohl von Kubernetes als auch von Ihrer App unterstützt wird.

Erstellen einer ConfigMap

ConfigMaps haben einfache YAML-Manifeste. Jede ConfigMap benötigt einen name im Standard-Kubernetes-Format und ein data Feld mit Ihren Schlüssel-Wert-Paaren:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  database_host: "192.168.0.10"
  system_email: "[email protected]"

Die data Das Feld dient zum Angeben von Schlüsseln mit Zeichenfolgenwerten. Sie können binaryData verwenden stattdessen oder sowie data zum Hinzufügen von base64-codierten Binärwerten. Schlüssel müssen für beide data eindeutig sein und binaryData .

Wenden Sie das Manifest mithilfe von kubectl auf Ihren Cluster an oder Ihr bevorzugtes Tool.

Verknüpfung von ConfigMaps und Pods

Eine ConfigMap allein macht nichts. Sie haben Ihrem Cluster einige Daten hinzugefügt; Verknüpfen wir es jetzt mit einem Pod:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      envFrom:
        - configMapRef:
            name: example-configmap

Die envFrom field ruft Umgebungsvariablen ab, die von einer anderen referenzierten Ressource definiert wurden. In diesem Fall eine configMapRef identifiziert die zuvor erstellte ConfigMap. Die Container des Pods werden mit database_host gestartet und system_email Umgebungsvariablen definiert.

Selektives Hinzufügen von Umgebungsvariablen

envFrom ist nützlich, wenn Sie jeden Schlüssel in der ConfigMap verwenden möchten und sicher sind, dass es keine Konflikte mit den anderen Umgebungsvariablen Ihres Pods gibt. Verwenden Sie in kontrollierteren Situationen ein normales env Abschnitt, definieren Sie individuelle Schlüssel und ziehen Sie den Wert jedes Schlüssels aus der ConfigMap:

env:
  - name: DATABASE_HOST_IP
    valueFrom:
      configMapKeyRef:
        name: example-configmap
        key: database_host

Dieses Beispiel zeigt, wie ein Pod nur mit database_host gestartet werden kann Schlüssel aus der ConfigMap. Der Schlüssel wird vor der Injektion auch umbenannt, sodass der Pod ihn als DATABASE_HOST_IP empfängt .

Verwenden von ConfigMaps mit Volumes

ConfigMaps können als Dateien in Pods gemountet werden. Kubernetes erstellt ein Volume, fügt den Inhalt der ConfigMap als Dateisatz ein und stellt das Volume in Ihrem Pod bereit.

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      volumeMounts:
        - name: app-config
          mountPath: "/etc/config-data"
          readOnly: true
  volumes:
    - name: app-config
      configMap:
        name: example-configmap

Dieses Pod-Manifest erstellt ein Volume namens app-config . Die configMap wird das Volume mit den Daten in der angegebenen ConfigMap vorbelegt.

Der Pod stellt das Volume in /etc/config-data bereit . Ihre Container können die Dateien im Verzeichnis lesen, um auf Ihre Konfigurationswerte zuzugreifen. Jeder ConfigMap-Schlüssel hat seine eigene Datei innerhalb des Einhängepunkts.

Aktualisieren von ConfigMap-Werten

Da eine ConfigMap eine standardmäßige Kubernetes-API-Ressource ist, können Sie Werte jederzeit aktualisieren, indem Sie Ihr Manifest ändern und erneut auf Ihren Cluster anwenden. Wie die neuen Werte Ihre Pods erreichen, hängt von dem Injektionsmechanismus ab, den Sie verwenden.

Gemountete Volumes

ConfigMaps, die über ein Volume in Pods bereitgestellt werden, werden von Kubernetes aktualisiert. Änderungen an ConfigMaps werden regelmäßig überprüft; Wenn ein Unterschied festgestellt wird, werden die Dateien in Ihrem Volume aktualisiert, sodass Ihr Pod die neuen Daten empfängt. Die Verzögerung hängt vom Synchronisierungsintervall ab, das für die Kubelet-Instanzen auf Ihren Worker-Knoten konfiguriert ist.

Umgebungsvariablen

Das Ändern der Umgebungsvariablen eines Pods ist nicht möglich, sodass ConfigMap-Änderungen keine vorhandenen Pods erreichen, die über diesen Mechanismus auf Schlüssel verweisen. Sie müssen Ihre Pods ersetzen, um die neuen Daten zu verwenden.

Neu erstellte Pods erhalten immer die aktuellen ConfigMap-Daten, unabhängig davon, ob Sie Volumes oder Umgebungsvariablen verwenden. Wenn Sie eine Konfigurationsaktualisierung erzwingen müssen, ändern Sie eine Anmerkung auf Ihrem Pod, damit Kubernetes sie neu erstellt.

Unveränderliche ConfigMaps

ConfigMaps haben einen optionalen immutable Feld, das verhindert, dass sie aktualisiert werden. Wenn dieses Feld gesetzt ist, können Sie die Daten der ConfigMap nicht aktualisieren oder den unveränderlichen Status entfernen.

apiVersion: v1
kind: ConfigMap
metadata:
  name: immutable-configmap
data:
  foo: bar
immutable: true

Dies kann nützlich sein, wenn Sie sicher sind, dass sich die Konfigurationswerte nie ändern werden. Es verbessert die Sicherheit, indem es die Möglichkeit versehentlicher Änderungen beseitigt. Die Leistung kann auch verbessert werden, da Kubernetes die ConfigMap nicht mehr überwachen muss, um Wertänderungen an Ihre Pods weiterzugeben.

Zusammenfassung

ConfigMaps sollte Ihre Anlaufstelle für die Bereitstellung nicht sensibler Konfigurationsschlüssel für Ihre Kubernetes-Pods sein. Sie sind eine erstklassige API-Ressource, die Sie als Umgebungsvariablen oder gemountete Dateien in Volumes nutzen können.

Passwörter und andere Anmeldeinformationen gehören in Secrets. Diese funktionieren sehr ähnlich wie ConfigMaps und werden von Pods auf die gleiche Weise referenziert. Ersetzen Sie configMapRef mit secretRef um einen Schlüssel aus einem benannten Secret anstelle einer ConfigMap zu ziehen.


Docker
  1. Wie ich Ansible und Anacron für die Automatisierung verwende

  2. So verwenden Sie erweitertes rsync für große Linux-Backups

  3. So verwenden Sie systemd-nspawn für die Linux-Systemwiederherstellung

  4. So verwenden Sie Podman innerhalb von Kubernetes

  5. So verwenden Sie den Terraform Kubernetes-Anbieter

So verwenden Sie den SCP-Befehl für die Dateiübertragung

So suchen Sie unter Linux nach Listening Ports (Ports in use)

So verwenden Sie Avidemux für die Videobearbeitung

So installieren und verwenden Sie Logwatch unter Ubuntu 20.04

So verwenden Sie Bluetooth unter Ubuntu für die Dateiübertragung

So verwenden Sie Docker:Bild speichern und zum Teilen exportieren