如何替换Kubernetes ConfigMap中嵌入YAML的指定嵌套map属性
解决方案
首选工具是 yq v4,比kustomize适配这类场景的成本低很多。
你之前用kustomize不生效的原因很简单:patchesStrategicMerge 仅支持对K8s资源的顶层字段做合并逻辑,而你ConfigMap里的application.yaml本质是字符串类型的内嵌yaml内容,kustomize不会自动解析这个字符串的内部结构做深层合并,所以才会出现输出只有补丁内容的问题,如果你非要用kustomize实现需要写非常繁琐的JSON6902格式补丁,完全没必要。
yq单命令修改方案
你只要安装好yq v4版本,执行一行命令就能直接完成修改:
yq e '.data."application.yaml" |= (fromyaml | .config.my-map-property = {"1":5, "2":6, "3":7, "4":8} | toyaml)' my-configMap.yaml
命令逻辑说明:
- 先用
fromyaml把application.yaml的字符串内容转成可编辑的yaml结构体 - 直接修改结构体下的
config.my-map-property为你需要的新map值 - 最后用
toyaml把修改后的结构体转回字符串,写回原字段
如果需要直接将修改后的ConfigMap应用到集群,直接管道给kubectl即可:
yq e '.data."application.yaml" |= (fromyaml | .config.my-map-property = {"1":5, "2":6, "3":7, "4":8} | toyaml)' my-configMap.yaml | kubectl apply -f -
内容的提问来源于stack exchange,提问作者hudi
相关产品推荐
相关产品推荐

