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 的移除如何简化部署流程:

Helm v2(Tiller) vs Helm v3(无 Tiller)架构对比 Helm v2 Helm Client Tiller K8s API Server Tiller 拥有集群级权限 Release 存储在 Tiller Namespace Helm v3 Helm Client K8s API Server 直接使用 kubeconfig 权限 Release 存储在应用所在 Namespace 关键变化: Tiller 被移除 → 安全模型简化;Release 存储位置变更 → 多租户隔离增强; 客户端直接与 API Server 交互 → 部署流程更轻量、更透明。

1.3 Helm 核心术语

理解 Helm 的三个核心术语是掌握 Helm 使用的基础:Chart、Release、Repository。它们之间的关系可以用下图概括:

Helm 核心术语关系图 Repository Chart 存储仓库 Chart 应用打包模板 Release 运行中的实例 存储 安装 术语详解 Chart:一个 Helm 包,包含描述 Kubernetes 应用所需的所有资源文件(YAML 模板)和配置文件(values.yaml)。 Release:Chart 在 Kubernetes 集群中运行的一个实例。同一个 Chart 可以安装多次,每次生成一个独立的 Release。 Repository:用于存放和共享 Chart 的 HTTP 服务器。Helm 客户端通过 repo 命令添加、更新、搜索 Chart。 工作流程:从 Repository 获取 Chart → 使用 helm install 在集群中创建 Release → 通过 helm upgrade/rollback 管理 Release 版本。

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