2016-07-06 23 views
13

Ho usato K8S ConfigMap e Secret per gestire le nostre proprietà. Il mio design è piuttosto semplice, mantiene i file delle proprietà in un repository git e usa il build server come Thoughtworks GO per distribuirli automaticamente in ConfigMaps o Secrets (a condizione di scelta) al mio cluster k8s.Aggiorna k8s ConfigMap o Secret senza cancellare quello esistente

Attualmente ho trovato che non è realmente efficace che devo eliminare sempre la configMap esistente e segreto e creare uno nuovo per aggiornare come di seguito

step1: kubectl eliminare configMap foo

Step2: kubectl creare configMap foo --from-file foo.properties

Esiste un modo semplice e gradevole per eseguire oltre un passaggio e più efficiente dell'eliminazione della corrente? potenzialmente quello che sto facendo ora potrebbe compromettere il contenitore che usa queste configmap se tenta di montare mentre la vecchia configmap viene cancellata e la nuova non è stata creata.

Grazie in anticipo

risposta

32

È possibile ottenere YAML dal comando kubectl create configmap e tubo a kubectl replace, in questo modo:

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

tubo del comando è la strada da percorrere, non pensava di --dry-run, che sembra essere il parte fondamentale del comando! –

+1

Per quello che vale, questo stesso modello può funzionare per Secrets in aggiunta all'esempio di ConfigMaps mostrato qui. – rwehner

10

Per riferimento futuro, kubectl replace ora è un modo molto pratico per raggiungere questo obiettivo

kubectl replace -f some_spec.yaml Lasciate che si aggiorna un configMap completo (o altri oggetti)

See doc e esempi direttamente in https://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

Copia/incollato da l'aiuto:

# 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 
Problemi correlati