kustomize通过base与overlay分层机制实现多环境配置管理:base定义通用资源,overlay用补丁声明式定制环境差异,支持kubectl原生apply与kustomize预览,敏感信息通过generator安全分离。

直接用 Kustomize 的分层叠加机制就能做到——Base 定义通用配置,Overlay 按环境打补丁,原始 YAML 一份不动,所有差异通过独立文件声明式管理。
明确 Base 和 Overlay 的职责分工
Base 是所有环境共享的“不变部分”,比如基础 Deployment、Service、ConfigMap 结构;Overlay 是每个环境专属的“可变部分”,比如 dev 调低 CPU 限制、prod 增加副本数、staging 注入灰度标签。
- Base 目录只放纯资源定义(deployment.yaml、service.yaml),不写任何环境相关字段
- 每个 Overlay 目录下只放 kustomization.yaml 和 patch 文件(如 replica-patch.yaml),不复制 Base 的任何 YAML
- kustomization.yaml 中用 resources 指向 Base,用 patches 引入差异化修改
用 patch 文件精准控制环境差异
Kustomize 支持 JSON6902 补丁和 strategic merge patch 两种方式。日常调整镜像、副本、资源限制等,用 strategic merge 更直观。
- 改镜像:在 dev/patch.yaml 里写
image: myapp:v1.2-dev,再在 kustomization.yaml 中patches:引用它 - 调副本数:staging/kustomization.yaml 直接写
replicas: 2,Kustomize 会自动合并进 deployment - 加环境标签:prod/kustomization.yaml 里用
commonLabels:统一注入env: prod
用 kubectl apply -k 一键部署对应环境
不需要额外安装 Kustomize CLI,只要 kubectl 版本 ≥ 1.14,就能直接使用内置支持。
- 部署开发环境:
kubectl apply -k overlays/dev - 部署生产环境:
kubectl apply -k overlays/prod - 预览生成结果(不实际应用):
kubectl kustomize overlays/staging
敏感信息与配置分离处理
Secret 和 ConfigMap 中的敏感字段(如数据库密码、API Key)不能硬编码在 Base 或 Overlay 的 YAML 里。
- 用
secretGenerator在 Overlay 中按需生成加密 Secret,不同环境用不同 literals 或 files - 用
configMapGenerator管理非敏感配置,支持从 env 文件或 literal 字段生成 - 确保 .gitignore 排除含密钥的源文件(如 .env.prod),只提交生成后的 base64 内容











