Ich habe K8S ConfigMap und Secret verwendet, um unsere Eigenschaften zu verwalten. Mein Design ist ziemlich einfach: Es speichert Eigenschaftendateien in einem Git-Repo und verwendet Build-Server wie Thoughtworks GO, um sie automatisch als ConfigMaps oder Secrets (unter Auswahlbedingungen) für meinen k8s-Cluster bereitzustellen.
Derzeit habe ich festgestellt, dass es nicht wirklich effizient ist, immer die vorhandene ConfigMap und Secret zu löschen und die neue zu erstellen, um sie wie folgt zu aktualisieren:
kubectl delete configmap foo
kubectl create configmap foo --from-file foo.properties
Gibt es eine schöne und einfache Möglichkeit, über einen Schritt hinaus effizienter zu arbeiten als das Löschen von Strom? Möglicherweise kann das, was ich jetzt mache, den Container gefährden, der diese Konfigurationszuordnungen verwendet, wenn versucht wird, ihn bereitzustellen, während die alte Konfigurationszuordnung gelöscht und die neue nicht erstellt wurde.
Danke im Voraus.
quelle
Antworten:
Sie können yaml vom
kubectl create configmap
Befehl abrufen undkubectl replace
wie folgt weiterleiten :quelle
error: error validating "STDIN": error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false
kubectl apply
stattkubectl replace
funktioniert sowohl für neue als auch für vorhandene KonfigurationskartenZum späteren Nachschlagen
kubectl replace
ist dies nun ein sehr praktischer Weg, um dies zu erreichenkubectl replace -f some_spec.yaml
Sie können eine vollständige configMap (oder andere Objekte) aktualisieren.Siehe Dokument und Beispiele direkt hier
Aus der Hilfe kopieren / einfügen:
quelle
--from-file
Anforderung. Configmaps können aus einer beliebigen Datei erstellt werden, nicht nur aus dem Yaml.--force
, welche Option es uns ermöglichen würde, den Annäherungsbefehl<dry-run ConfigMap creation> | kubectl replace --force -f -
auch beim ersten Mal zu verwenden, wenn die ConfigMap noch nicht vorhanden ist. Ich bin mir jedoch nicht sicher, ob das Löschen der ConfigMap sicher ist, da Pods während des Fehlens möglicherweise beschädigt werden, weil sie nicht gefunden werden. Vielleicht ist es besser der Ansatz<dry-run ConfigMap creation> | kubectl apply -f -
? Dieser Punkt wurde von @ karthic-c eingeführt. Was denkst du? Also @ jordan-liggitt was denkst du?configMap
Verwenden Sie für kleine Änderungen inedit
Dadurch wird configMap im
vi
Editor geöffnet . Nehmen Sie die Änderungen vor und speichern Sie sie.quelle
kubectl replace
schlägt fehl, wenn bereits eine Konfigurationskarte vorhanden ist:Die beste Lösung ist die Verwendung einer
kubectl apply
Konfigurationskarte, wenn diese nicht vorhanden ist. Andernfalls wird die Konfigurationskarte aktualisiert, wenn sie vorhanden ist:quelle
kubectl replace
schlägt fehl, wenn eine Konfigurationskarte noch nicht existiert".