kustomize edit set image在多基础配置场景下不生效如何解决
Kustomize多环境批量替换镜像标签解决方案
根因说明
kustomize edit set image默认仅修改当前工作目录下的kustomization.yaml文件,而你根目录的kustomization.yaml未声明镜像转换规则,子目录overlay中的镜像规则仅作用于子目录本地的构建上下文,根目录执行编辑命令不会向下透传到各环境的配置文件,因此全局构建时标签不会生效。
可选方案(按推荐优先级排序)
方案1:使用build命令内置镜像覆盖参数(无需修改任何配置文件,最高效)
kustomize build原生支持--image参数,可在构建时临时全局替换所有匹配的镜像,直接在根目录执行以下命令即可:
kustomize build . --image my-app=gcr.io/my-platform/my-app:0.0.2
该方式不会修改本地任何yaml文件,所有匹配name: my-app的镜像规则都会被覆盖,一次性生成所有带正确标签的环境部署清单。
方案2:镜像规则统一收敛到根目录(适合镜像规则全局统一的场景)
将各环境overlay中重复的镜像规则移动到根目录的kustomization.yaml中,调整后根目录配置如下:
resources: - ./dev - ./staging - ./production images: - name: my-app newName: gcr.io/my-platform/my-app
后续在根目录执行kustomize edit set image命令就会直接修改根目录的镜像规则,全局构建时所有子环境资源都会继承该规则,标签自动生效。
方案3:批量更新各环境overlay配置(适合各环境需单独管理镜像的场景)
如果需要保留各环境独立的镜像配置能力,可通过shell循环批量执行编辑命令:
# 批量给三个环境设置镜像标签 for env in dev staging production; do (cd $env && kustomize edit set image my-app=gcr.io/my-platform/my-app:0.0.2) done # 再执行全局构建 kustomize build .
内容的提问来源于stack exchange,提问作者Arian
相关产品推荐
相关产品推荐

