2016-07-06 27 views
13

我一直使用K8S ConfigMap和Secret來管理我們的屬性。我的設計非常簡單,它將屬性文件保存在git倉庫中,並使用構建服務器(例如Thoughtworks GO)將它們自動部署爲ConfigMaps或Secrets(在選擇條件下)到我的k8s羣集。更新k8s ConfigMap或Secret而不刪除現有的

目前,我發現它不是真正有效的,我要永遠刪除現有ConfigMap和祕密,並創建新的更新如下

第一步:kubectl刪除configmap富

第二步:kubectl創建configmap FOO --from-file foo.properties

有沒有一種簡單而有效的方法可以在一步之內完成,而且比刪除當前效率更高效?潛在我現在正在做的事情可能會危害使用這些configmaps的容器,如果它嘗試掛載而舊的configmap被刪除並且新的配置文件沒有被創建。

在此先感謝

回答

32

你可以從kubectl create configmap命令和管道它YAML到kubectl replace,像這樣:

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

管的命令去了,沒有想到這似乎是在--dry運行方式命令的關鍵部分! –

+1

對於它的價值,除了此處顯示的ConfigMaps示例之外,此相同的模式可以用於祕密。 – rwehner

10

以供將來參考,kubectl replace現在是實現這個

一個非常方便的方法

kubectl replace -f some_spec.yaml讓你更新一個完整的configMap(或其他對象)

查看文檔和https://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

複製/從幫助直接粘貼示例:

# 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