更新k8s ConfigMap或Secret而不删除现有的

我一直使用K8S ConfigMap和Secret来pipe理我们的属性。 我的devise非常简单,它将属性文件保存在git仓库中,并使用构build服务器(例如Thoughtworks GO)自动将它们configuration为ConfigMaps或Secrets(在select条件下)到我的k8s集群。

目前我发现我不得不总是删除现有的ConfigMap和Secret,创build一个新的更新如下

第一步:kubectl删除configmap foo

第二步:kubectl创buildconfigmap foo –from-file foo.properties

有没有一个很好的和简单的方法,使一步之内,更有效地比删除当前? 潜在我现在正在做的事情可能会危及使用这些configmaps的容器,如果它尝试挂载而旧的configuration图被删除,而新的configuration没有被创build。

提前致谢

您可以从kubectl create configmap命令中获取yaml,并将其pipe理到kubectl replace ,如下所示:

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

为了将来的参考, 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