如何在Kustomize中先执行Image Transformer再生成ConfigMap?
解决方案
核心问题分析
你的配置存在两个关键问题:
resources字段中的CronJob模板会被Kustomize解析为Kubernetes资源并输出,导致模板被渲染。configMapGenerator直接读取磁盘上的原始模板文件,未经过images字段的镜像更新处理。
方案一:两步构建(推荐)
通过分阶段处理,先完成镜像更新,再生成ConfigMap,同时避免CronJob资源被输出。
步骤1:创建镜像更新的Kustomize配置
新建transform-templates/kustomization.yaml,用于处理CronJob模板的镜像更新:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../cronjob-template-a.yaml - ../cronjob-template-b.yaml - ../cronjob-template-c.yaml images: - name: image/a newTag: v1.0.0 - name: image/b newTag: v1.0.0 - name: image/c newTag: v1.0.0
执行命令将处理后的模板导出到transformed目录:
kustomize build transform-templates --output-dir ./transformed
步骤2:创建ConfigMap生成的Kustomize配置
新建generate-cm/kustomization.yaml,基于处理后的模板生成ConfigMap:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization configMapGenerator: - name: generated-config-map files: - ../transformed/cronjob-template-a.yaml - ../transformed/cronjob-template-b.yaml - ../transformed/cronjob-template-c.yaml
执行命令生成最终的ConfigMap:
kustomize build generate-cm
方案二:单配置文件(自定义文件替换)
如果需要单命令完成,可使用Kustomize的Replacer transformer直接修改模板文件的镜像标签,无需将模板放入resources字段:
步骤1:创建自定义替换规则
新建image-replacer.yaml:
apiVersion: builtin kind: Replacer metadata: name: imageTagReplacer replacements: - source: kind: ConfigMap name: image-tags fieldPath: data.image-a-tag target: kind: File path: cronjob-template-a.yaml fieldPath: spec.jobTemplate.spec.template.spec.containers[0].image - source: kind: ConfigMap name: image-tags fieldPath: data.image-b-tag target: kind: File path: cronjob-template-b.yaml fieldPath: spec.jobTemplate.spec.template.spec.containers[0].image - source: kind: ConfigMap name: image-tags fieldPath: data.image-c-tag target: kind: File path: cronjob-template-c.yaml fieldPath: spec.jobTemplate.spec.template.spec.containers[0].image
步骤2:根Kustomize配置
修改根目录的kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization # 定义镜像标签 configMapGenerator: - name: image-tags literals: - image-a-tag=image/a:v1.0.0 - image-b-tag=image/b:v1.0.0 - image-c-tag=image/c:v1.0.0 # 应用镜像标签替换规则 transformers: - image-replacer.yaml # 基于替换后的模板生成ConfigMap configMapGenerator: - name: generated-config-map files: - cronjob-template-a.yaml - cronjob-template-b.yaml - cronjob-template-c.yaml
执行命令完成构建:
kustomize build .
关键注意事项
- 方案一中,两步构建完全分离了镜像更新和ConfigMap生成逻辑,避免了CronJob资源被输出。
- 方案二中,无需将模板放入
resources字段,因此不会被渲染为Kubernetes资源输出。
内容的提问来源于stack exchange,提问作者dennbagas
相关产品推荐
相关产品推荐

