1. Helm 基础概念
1.1 Helm 是什么
Helm 是 Kubernetes 生态中最流行的包管理工具,其定位类似于 Linux 中的 yum/apt 或 Node.js 中的 npm。Helm 将 Kubernetes 资源(Deployment、Service、ConfigMap、Ingress 等)打包为一个可重复安装、可版本管理的Chart,并通过模板引擎实现环境差异化配置。
使用 Helm 的核心收益包括:
- 标准化交付:将复杂应用的所有 YAML 清单统一管理,避免手动拼写错误。
- 参数化部署:通过
values.yaml和模板变量,一套 Chart 可适配开发、测试、生产多环境。 - 版本控制与回滚:每次
helm install或helm upgrade都会生成 Release 版本,支持快速回退。 - 依赖管理:Chart 可声明依赖其他 Chart(如数据库、消息队列),Helm 自动解析并安装。
一句话总结:Helm = Kubernetes 应用的“安装包 + 版本管理器 + 模板引擎”。
1.2 Helm 架构演进:Tiller vs Helm 3
Helm 架构在 v2 到 v3 之间发生了根本性变化,核心差异在于是否保留服务端组件 Tiller。下表对比了两种架构的关键区别:
| 对比维度 | Helm v2(Tiller 架构) | Helm v3(无 Tiller) |
|---|---|---|
| 服务端组件 | Tiller 以 Pod 形式运行在集群内 | 无服务端组件,纯客户端架构 |
| 权限模型 | Tiller 拥有集群级权限,存在安全风险 | 使用当前 kubeconfig 上下文权限,遵循 RBAC |
| Release 存储 | ConfigMap(默认)或 Secrets,存储在 Tiller 所在 Namespace | Secrets(默认),存储在 Release 所在 Namespace |
| 安装与升级 | 客户端 → Tiller → API Server | 客户端 → API Server(直接交互) |
| 安全审计 | Tiller 需要单独管理证书和权限 | 天然继承 Kubernetes RBAC,审计更简单 |
| 当前状态 | 已停止维护,不推荐新项目使用 | 官方推荐,社区活跃 |
迁移建议:如果你还在使用 Helm v2,请尽快迁移到 v3。Helm v2 已于 2020 年 11 月正式停止安全更新,且 Tiller 架构在多租户场景下存在严重的安全隐患。
下图展示了 Helm v2 与 Helm v3 的架构对比,清晰呈现了 Tiller 的移除如何简化部署流程:
1.3 Helm 核心术语
理解 Helm 的三个核心术语是掌握 Helm 使用的基础:Chart、Release、Repository。它们之间的关系可以用下图概括:
1.4 术语对比速查表
为了帮助你快速区分三个核心概念,下表从多个维度进行了对比:
| 维度 | Chart | Release | Repository |
|---|---|---|---|
| 本质 | 文件包(模板 + 配置) | 运行实例(状态 + 版本) | 存储服务(索引 + 归档) |
| 生命周期 | 开发阶段创建、更新 | 从安装到删除的完整运行周期 | 持续存在,可添加/删除 Chart 版本 |
| 存储位置 | 本地文件系统或 Repository | Kubernetes Secrets(集群内) | HTTP 服务器(如 OSS、Nginx、ChartMuseum) |
| 版本管理 | Chart 版本(chart version) | Release 版本(release revision) | Chart 版本索引 |
| 常用命令 | helm create、helm package |
helm install、helm upgrade、helm rollback |
helm repo add、helm repo update |
实战记忆口诀:Chart 是“菜谱”,Repository 是“菜谱仓库”,Release 是“按菜谱做出来的一道菜”。同一个菜谱(Chart)可以在不同餐厅(Namespace)做出多道菜(多个 Release)。
1.5 一个完整的 Helm 工作流示例
以下命令序列展示了从添加仓库到部署 Release 的完整流程:
# 1. 添加 Bitnami 仓库(Repository)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 2. 更新仓库索引
helm repo update
# 3. 搜索可用的 Chart
helm search repo bitnami/nginx
# 4. 安装 Chart 生成 Release
helm install my-nginx bitnami/nginx --namespace web --create-namespace
# 5. 查看 Release 状态
helm list -n web
# 6. 升级 Release(修改配置)
helm upgrade my-nginx bitnami/nginx --set replicaCount=3 -n web
# 7. 回滚到上一个版本
helm rollback my-nginx 1 -n web
# 8. 卸载 Release
helm uninstall my-nginx -n web