如何在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
相关产品推荐
相关产品推荐

