You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kustomize中先执行Image Transformer再生成ConfigMap?

解决方案

核心问题分析

你的配置存在两个关键问题:

  1. resources字段中的CronJob模板会被Kustomize解析为Kubernetes资源并输出,导致模板被渲染。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:45:32