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

如何在Kustomize清单中定义可复用变量统一管理提交ID等公共配置

Kustomize 内部复用自定义变量解决方案

原生Kustomize从v4.1版本开始支持replacements特性,无需依赖外部环境变量或第三方模板工具,即可实现单处修改变量、多处自动同步的需求,完全适配你当前的ArgoCD目录结构,具体实现步骤如下:

实现步骤

1. 集中定义变量

在环境层kustomization.yaml中通过ConfigMapGenerator集中维护commit-id变量,这是后续发布唯一需要修改的位置。

# /overlays/[环境名]/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
- ./job.yaml

# 全局开关:禁用ConfigMap自动哈希后缀(可选)
generatorOptions:
  disableNameSuffixHash: true

# 唯一需要修改的变量配置区
configMapGenerator:
- name: commit-meta
  literals:
  - commit-id=abc1234 # 每次发布仅修改此处的commit ID即可

# 镜像配置先留占位符
images:
- name: our-aws-repo-url
  newName: our-aws-repo-url
  newTag: PLACEHOLDER_COMMIT_ID

# 可选:如果不需要把变量ConfigMap部署到集群,添加删除补丁
patches:
- target:
    kind: ConfigMap
    name: commit-meta
  patch: |-
    $patch: delete

2. 配置替换规则

在同一个kustomization.yaml中添加replacements字段,定义变量到各个目标位置的映射规则:

# 接上述kustomization.yaml内容
replacements:
  # 规则1:同步commit-id到镜像标签
  - source:
      kind: ConfigMap
      name: commit-meta
      fieldPath: data.commit-id
    targets:
      - select:
          kind: Kustomization
        fieldPaths:
          - images.[name=our-aws-repo-url].newTag

  # 规则2:同步commit-id到Job名称
  - source:
      kind: ConfigMap
      name: commit-meta
      fieldPath: data.commit-id
    targets:
      - select:
          kind: Job
          name: job-PLACEHOLDER_COMMIT_ID
        fieldPaths:
          - metadata.name
        options:
          delimiter: '-'
          index: 1 # 替换job-xxx的第二部分为commit-id

  # 规则3:同步commit-id到initContainer的监听参数
  - source:
      kind: ConfigMap
      name: commit-meta
      fieldPath: data.commit-id
    targets:
      - select:
          kind: Deployment
          name: 你的Deployment实际名称
        fieldPaths:
          - spec.template.spec.initContainers.[name=wait-for-job].args.1
        options:
          delimiter: '-'
          index: 1 # 替换job-xxx的第二部分为commit-id

3. 对应资源添加占位符

在需要引用变量的资源中填写固定占位符即可,无需每次修改:

Job配置示例

# /overlays/[环境名]/job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: job-PLACEHOLDER_COMMIT_ID
spec:
  template:
    spec:
      containers:
      - name: alembic
        image: our-aws-repo-url # 镜像标签会被自动替换,无需手动填写
        command: ["alembic", "upgrade", "head"]

Deployment initContainer配置示例

# /base/deployment.yaml 或环境层的Deployment补丁
initContainers:
- name: wait-for-job
  image: groundnuty/k8s-wait-for:v1.4
  imagePullPolicy: IfNotPresent
  args: 
   - "job"
   - "job-PLACEHOLDER_COMMIT_ID"

方案优势

  • 完全符合Kustomize原生设计规范,ArgoCD默认支持,无需额外插件
  • 所有变量集中在环境层kustomization.yaml的一处配置,发布时仅需修改一次,无多文件修改导致的不一致问题
  • 不依赖任何外部环境变量或模板工具,所有配置都存储在代码仓库中,可溯源可评审

内容的提问来源于stack exchange,提问作者tech4242

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:18:04