2016-07-06 9 views
13

Ich habe K8S ConfigMap und Secret verwendet, um unsere Eigenschaften zu verwalten. Mein Design ist ziemlich einfach, das hält Eigenschaften-Dateien in einem Git Repo und Build-Server wie Thoughtworks GO verwenden, um sie automatisch zu ConfigMaps oder Secrets (nach Wahl Bedingung) zu meinem k8s-Cluster bereitzustellen.Update k8s ConfigMap oder Secret ohne das vorhandene zu löschen

Zeit fand ich es nicht wirklich effizient ist, dass ich immer die bestehende ConfigMap und geheime löschen und neu erstellen, wie unter

Schritt 1 zu aktualisieren: kubectl configmap foo

schritt2 löschen: kubectl configmap foo erstellen --von-Datei foo.properties

Gibt es eine schöne und einfache Möglichkeit, über einen Schritt und effizienter als das Löschen von Strom zu machen? möglicherweise was ich jetzt mache, kann den Container, der diese configmaps benutzt, kompromittieren, wenn er mount, während die alte configmap gelöscht wird und die neue nicht erstellt wurde.

Vielen Dank im Voraus

Antwort

32

Sie können yaml vom kubectl create configmap Befehl und eine Pipe an kubectl replace, wie diese:

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f - 
+0

Rohr der Befehl ist der Weg zu gehen, war nicht der --dry-run denken, die das zu sein scheint wichtiger Teil des Befehls! –

+1

Für das, was es wert ist, kann das gleiche Muster für Secrets neben dem hier gezeigten ConfigMaps-Beispiel funktionieren. – rwehner

10

Für die Zukunft, kubectl replace ist jetzt eine sehr praktische Art und Weise dieses

zu erreichen

kubectl replace -f some_spec.yaml Lassen Sie eine komplette configMap aktualisieren (oder andere Objekte)

See doc und Beispiele direkt in https://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

Copy/aus Hilfe eingefügt:

# Replace a pod using the data in pod.json. 
kubectl replace -f ./pod.json 

# Replace a pod based on the JSON passed into stdin. 
cat pod.json | kubectl replace -f - 

# Update a single-container pod's image version (tag) to v4 
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - 

# Force replace, delete and then re-create the resource 
kubectl replace --force -f ./pod.json 
Verwandte Themen