◎Kustomize 核心定位
Kustomize 是 Kubernetes 原生的声明式配置管理工具,专门用于定制和管理 Kubernetes YAML 清单文件。自 Kubernetes 1.14 起,它被内置到 kubectl 中(kubectl apply -k)。
解决核心问题:如何在保持上游配置不变的前提下,为不同环境(开发、测试、生产)定制 Kubernetes 资源?
遵循 DRY(Don't Repeat Yourself) 原则,通过"基础配置 + 环境差异层"的架构来管理多环境部署。
◈核心概念体系
Base(基础配置)
- 存放原始的、可复用的 Kubernetes YAML 清单
- 不特定于任何环境
- 通常包含 Deployment、Service、ConfigMap 等资源
Overlay(覆盖层)
- 针对特定环境的定制配置
- 通过引用 Base 并应用差异来生成最终配置
- 不同环境(dev/staging/prod)各自拥有独立的 Overlay 目录
Kustomization 文件
每个目录通过 kustomization.yaml 定义对该目录下资源如何处理。
▣功能矩阵
| 功能 | 说明 |
|---|---|
| resources | 引用的原始 YAML 文件 |
| commonLabels | 为所有资源添加统一标签 |
| commonAnnotations | 为所有资源添加统一注解 |
| namePrefix / nameSuffix | 批量修改资源名称前缀 / 后缀 |
| namespace | 为所有资源指定命名空间 |
| images | 批量替换镜像名和标签 |
| replicas | 修改副本数量 |
| configMapGenerator / secretGenerator | 动态生成 ConfigMap / Secret |
| patches | 精细修改资源的任意字段 |
| transformers | 自定义转换逻辑 |
◉实际使用示例
典型的目录结构:
myapp/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/
├── dev/
│ └── kustomization.yaml
└── prod/
└── kustomization.yaml
开发环境 Overlay 使用 namePrefix、images 替换和 patches 修改副本数。
生产环境 Overlay 使用不同的镜像标签和更大的副本数。
构建最终配置:
kustomize build overlays/prod
或直接应用:
kubectl apply -k overlays/prod
◆Patches 技术详解
Kustomize 支持两种 Patch 格式:
- Strategic Merge Patch — 通过
patchesStrategicMerge引用 - JSON Patch(RFC 6902) — 更精确,支持任意字段修改
◇Kustomize vs Helm 对比
| 维度 | Kustomize | Helm |
|---|---|---|
| 理念 | 配置覆盖与转换 | 模板化与参数化 |
| 语法 | 纯 YAML,无逻辑代码 | Go Template(含条件、循环) |
| 学习曲线 | 低(会 YAML 即可) | 较高(需学模板语法) |
| 包管理 | 无(Git 子目录引用) | 有(Charts 仓库、版本、依赖) |
| 动态生成 | 有限(Generator) | 强大(模板函数) |
| 生态 | Kubernetes 原生 | 成熟的 Charts 生态 |
| 发布管理 | 不管理 | 支持升级、回滚 |
选择建议:配置差异较小、团队偏好声明式、需要严格版本控制时选择 Kustomize;复杂应用分发、需要参数化时选择 Helm。两者也可以结合使用。
✦高级特性
ConfigMap / Secret 生成器
configMapGenerator和secretGenerator动态生成资源- Kustomize 自动为生成的资源名添加哈希后缀,触发关联 Pod 滚动更新
组件(Components)
Kustomize v2.1.0+ 支持将通用修改封装为可复用组件,通过 components 字段在 Overlay 中引用。
✶典型使用场景
1
多环境部署
dev / staging / prod 共享基础配置,各自 Overlay 差异
2
多租户隔离
为不同客户 / 团队定制 namespace、标签、资源限制
3
GitOps 工作流
与 ArgoCD、Flux 配合实现声明式持续交付
4
第三方资源定制
Fork 上游配置,通过 Overlay 添加 sidecar、修改镜像
⌘常用命令速查
- kustomize build <dir>
- kubectl apply -k <dir>
- kustomize cfg tree
- kustomize edit set image nginx=mynginx:v2