Wie verknüpfe ich die Konfigurationskarte mit einer externen Datei?

Wie verknüpfe ich die Konfigurationskarte mit einer externen Datei?

Damit können wir eine mit einer externen Datei verknüpfte Konfigurationskarte erstellen.

kubectl create configmap database-config --from-file=database.properties

Aber wenn wir das YAML bearbeiten, wird angezeigt, dass der gesamte Dateiinhalt dorthin übertragen wird.

Gibt es eine Möglichkeit, auch einfach auf eine Datei in YAML zu verweisen, sodass ich die Eigenschaftendatei im selben Ordner wie die YAML-Konfigurationskarte behalte und den Ordner mit Folgendem auf alle YAML-Dateien anwende:

kubectl apply -f target_folder\

Bitte vorschlagen.

Antwort1

Was configmapist

Eine ConfigMap ist ein API-Objekt, das zum Speichern nicht vertraulicher Daten in Schlüssel-Wert-Paaren verwendet wird. Pods können ConfigMaps als Umgebungsvariablen, Befehlszeilenargumente oder als Konfigurationsdateien in einem Volume verwenden.

Mit einer ConfigMap können Sie umgebungsspezifische Konfigurationen von Ihren Container-Images entkoppeln, sodass Ihre Anwendungen problemlos portierbar sind.

Mit anderen Worten, wenn configmapaus einer externen Datei (wie in Ihrem Fall) oder aus anderen Werten erstellt wird, überprüft der API-Server, ob alles korrekt ist, und speichert es dann in etcd. Dies erklärt auch, warum Sie den gesamten Kontext sehen, wenn Sie auf editklicken configmap. Dies liegt daran, dass configmapaus gelesen wird etcd, nicht aus externen Quellen.

Dies ist auch einer der Gründe, warum es nicht empfohlen wird, große Dateien als Konfigurationszuordnungen oder Geheimnisse zu speichern – dies beeinträchtigt die Leistung des Kubernetes-Clusters, da alle Objekte des Clusters darin gespeichert sind etcd.

Anpassen

Dies ist eine Möglichkeit, Ihre Anforderung zu erfüllen, einen Befehl zum Erstellen/Konfigurieren configmapbasierend auf der Datei im selben Verzeichnis auszuführen. Es ist ein eigenständiges Tool zum Anpassen von Kubernetes-Objekten über eine Kustomization-Datei.

Ich habe ein kurzes und einfaches Beispiel erstellt, um die Idee zu veranschaulichen:

$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files

$ cat kustomization.yaml 
generatorOptions:
  disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
  files:
  - application.properties

$ cat application.properties 
listen.url=localhost:9010
client.url=some_url:3000

Testen Sie dies, dieser Befehl wirdnur rendernconfigmap, es wird es noch nicht erstellen:

$ kubectl kustomize application.settings/
apiVersion: v1
data:
  application.properties: |
    listen.url=localhost:9010
    client.url=some_url:3000
kind: ConfigMap
metadata:
  name: application-config

Der letzte Schritt besteht darin,anwendenEs:

$ kubectl apply -k application.settings/
configmap/application-config created

$ kubectl get cm
NAME                 DATA   AGE
application-config   1      23s

Kurze Erklärung zum obigen Befehl:

Um diese Ressourcen anzuwenden, führen Sie kubectl apply mit dem Flag --kustomize oder -k aus.

verwandte Informationen