Kustomize 适合在共同基础上表达少量环境差异。若每个 overlay 都复制完整 Deployment,安全修复和字段升级很快会变成多处人工同步。
保持目录职责清晰
deploy/
base/
components/monitoring/
overlays/dev/
overlays/prod/
base 包含所有环境共有且可直接构建的资源;overlay 只表达副本、域名、资源额度等差异;可复用的可选能力放入 component。
patches:
- target:
kind: Deployment
name: api
patch: |-
- op: replace
path: /spec/replicas
value: 6
在 CI 验证最终结果
kubectl kustomize deploy/overlays/prod > rendered.yaml
kubectl apply --server-side --dry-run=server -f rendered.yaml
只审查 patch 不足以理解最终资源。流水线还应检查策略、镜像标签、命名空间和废弃 API。
控制复杂度
- overlay 不嵌套多层继承
- patch 目标使用稳定名称和明确类型
- Secret 通过外部密钥系统引用
- 多环境相同的改动优先回收到 base
收尾清单
定期比较各环境渲染结果,将预期差异写成机器可检查的规则。若大量 patch 都在重写同一资源,应重新划分 base,而不是继续叠加例外。