首页/开发/CI/CD 与发布速查/Kustomize 环境叠加
环境与配置管理60 条

Kustomize 环境叠加

base 描述通用资源、overlays 按环境打补丁:同一份声明派生多环境差异,diff 清晰可评审。

CI/CD 与发布速查开发更新于 2026-10-13

Kustomize 环境叠加是什么

Kustomize 用「base + overlays」组织多环境声明:base 目录描述通用资源(Deployment、Service 等),overlays 目录按环境只写差异——镜像 tag、副本数、资源额度、环境变量。同一份声明派生多环境,diff 清晰可评审,这是它相对复制多份 YAML 的关键优势。常用手段包括 patches(结构化补丁)、images(改镜像)、namePrefix/nameSuffix、configMapGenerator(生成 ConfigMap 并自动挂版本哈希)。构建产物用 kubectl kustomize 或 kustomize build 输出,可直接接 GitOps 控制器。

基本信息

结构base/(通用)+ overlays/dev、overlays/prod(差异)
手段patches、images、namePrefix、configMapGenerator 等
构建kubectl kustomize overlays/prod 或 kustomize build
原则环境差异越小越好,大段覆盖视为重构信号

典型使用场景

  • 多环境部署:dev/staging/prod 共享 base,仅维护差异部分。
  • 多集群同构:不同集群用不同 overlay 指定镜像仓库与副本数。
  • 评审友好:改哪个环境改什么,diff 一目了然。
  • 配置生成:configMapGenerator 把配置随内容哈希一起更新,改动自动触发滚动。
  • GitOps 接入:build 产物作为控制器输入,声明与集群状态可对账。

overlay 示例

overlay 示例
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base
images:
  - name: registry.example.com/app
    newTag: 1.8.0
patches:
  - path: replicas-patch.yaml
# 构建核对: kubectl kustomize overlays/prod

常用手段读法

手段作用
patches结构化补丁,精确改字段
images替换镜像名与 tag
namePrefix/Suffix多环境命名隔离
configMapGenerator生成配置并附内容哈希
环境差异越小越好:把大段覆盖视为信号,回头简化 base 结构,而不是在每个 overlay 里重复填坑。
构建产物要核对再提交:kubectl kustomize 输出的最终清单才是事实,发布前 diff 对比上次产物。
与 Helm 的分工:Helm 负责 chart 打包与模板渲染,Kustomize 负责声明体系内的环境差异;两者也可串联,先渲染再 overlay 打补丁。
configMapGenerator 的内容哈希会让关联的 Deployment 在配置变化时自动滚动更新,这是让配置变更生效的推荐方式。
删除资源的 patch 要当心:评审时容易被忽略,用构建产物 diff 确认资源集合的实际变化。
overlay 数量增长后防重复:公共补丁抽成 components 或共享 patch 文件,避免每个环境复制同一段内容。

易错点

  • overlay 里大段整文件替换:差异演化成两套系统,用 patch 精确定位改动字段。
  • 新环境复制粘贴旧 overlay:共享逻辑回收到 base,减少漂移。
  • 补丁目标不存在时静默通过:patch 打空是常见坑,核对构建产物确认改动生效。
  • images 只改 tag 不改仓库:本地测试用私有仓、发布忘记切换,用 overlay 显式管理镜像来源。
  • base 频繁被直接改动:改了 base 影响所有环境,base 变更要跑全部环境渲染检查。

数据来源与参考

  • Kustomize 文档(kubernetes-sigs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌