2.3 编排工具大乱斗:Helm vs Kustomize,谁才是应用定义的终极答案?
1. 引言:YAML 工程师的烦恼
Kubernetes 很强大,但它也被称为“YAML 工程师的噩梦”。
部署一个简单的 Nginx,你需要写 Deployment、Service、Ingress、ConfigMap… 加起来几百行 YAML。
如果你有 50 个微服务,还要部署到 Dev、Test、Prod 三个环境,那就是50 * 3 = 150套 YAML。
手写?复制粘贴?那是走向“配置漂移”和“维护地狱”的捷径。
为了解决这个问题,云原生社区诞生了两大流派:
- Helm:我是包管理器!我用模板生成 YAML!(就像 apt/yum)
- Kustomize:我是补丁工具!我修改 YAML!(就像 git patch)
它们经常打架。有人说“Helm 太复杂”,有人说“Kustomize 不够强”。
本节将带你深入这场“编排工具大乱斗”的现场,通过代码级的对比,帮你找到最适合你的终极答案。
2. Helm:云原生的 Yum/Apt
Helm 是 Kubernetes 的包管理器。它的核心概念是Chart(图表)。
2.1 核心原理:模板引擎 (Go Template)
Helm 认为,Dev 和 Prod 的区别,无非就是几个参数不一样(镜像版本、副本数、域名)。
所以,Helm 把 YAML 变成了模板,把参数提取到values.yaml里。
Structure:
mychart/ Chart.yaml # 元数据 (Name, Version) values.yaml # 默认参数 templates/ # 模板文件 deployment.yamltemplates/deployment.yaml:
apiVersion:apps/v1kind:Deploymentmetadata:name:{{.Release.Name}}-app# 变量替换spec:replicas:{{.Values.replicaCount}}# 读取 values.yaml{