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 文件,避免每个环境复制同一段内容。