更新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