
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 configmap
ist
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 configmap
aus 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 edit
klicken configmap
. Dies liegt daran, dass configmap
aus 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 configmap
basierend 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.