首页 文章

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

提问于
浏览
25

我一直在使用K8S ConfigMap和Secret来管理我们的属性 . 我的设计很简单,它将属性文件保存在git仓库中,并使用构建服务器(例如Thoughtworks GO)将它们自动部署为我的k8s集群的ConfigMaps或Secrets(在选择条件下) .

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

step1:kubectl删除configmap foo

step2:kubectl创建configmap foo --from-file foo.properties

有没有一种简单明了的方法来实现上一步,比删除当前更有效?我现在正在做的可能会破坏使用这些配置映射的容器,如果它在删除旧的configmap并且尚未创建新的configmap时尝试挂载 .

提前致谢

2 回答

  • 57

    您可以从 kubectl create configmap 命令获取yaml并将其传递给 kubectl replace ,如下所示:

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

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

相关问题