1. Helm 架构总览:核心组件与概念解析

Helm v3 是 Kubernetes 生态中最流行的包管理工具,其架构设计在 v3 版本中经历了重大简化——最显著的变化是移除了 Tiller 组件。本章从架构组件、Chart、Repo、Release 四个维度,系统梳理 Helm v3 的核心概念与调度逻辑。

1.1 Helm v3 架构组件:Tiller 移除后的变化

Helm v2 采用客户端-服务端架构,客户端(Helm CLI)与集群内的 Tiller 服务端通信,Tiller 负责管理 Release 状态并执行安装/升级操作。这种设计带来了权限过大、多租户隔离困难、升级风险高等问题。

Helm v3 彻底移除了 Tiller,改为纯客户端架构。Helm CLI 直接通过 Kubernetes API Server 与集群交互,Release 状态信息存储在 Kubernetes Secret 中,而非由 Tiller 维护。

对比维度 Helm v2 Helm v3
服务端组件 Tiller(集群内运行) 无(纯客户端)
Release 状态存储 Tiller 内存 + ConfigMap Kubernetes Secret
权限模型 Tiller 拥有集群级权限 使用当前 kubeconfig 用户权限
多租户支持 弱(Tiller 共享) 强(按命名空间隔离)
升级回滚 依赖 Tiller 状态 依赖 Secret 历史记录
安装复杂度 需先部署 Tiller 直接使用 helm 命令
关键变化:Helm v3 移除了 Tiller 后,Helm CLI 直接调用 Kubernetes API,每个用户使用自己的 kubeconfig 权限,不再存在“超级管理员”Tiller。Release 信息以 Secret 形式存储在目标命名空间中,天然支持多租户隔离。
Helm v2 与 v3 架构对比 Helm v2 架构 Helm CLI Tiller K8s API ConfigMap Helm v3 架构 Helm CLI K8s API Secret Tiller 移除,架构简化

1.2 Chart:应用打包与描述标准

Chart 是 Helm 的应用打包格式,本质是一个遵循特定目录结构的文件集合。一个 Chart 包含描述应用元数据的 Chart.yaml、定义 Kubernetes 资源模板的 templates/ 目录、以及默认配置值文件 values.yaml。

标准 Chart 目录结构如下:

mychart/
├── Chart.yaml          # Chart 元数据(名称、版本、描述等)
├── values.yaml         # 默认配置值
├── values.schema.json  # (可选)值校验 schema
├── charts/             # (可选)子 Chart 依赖
├── templates/          # Kubernetes 资源模板(Go template 语法)
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl    # 模板辅助函数
│   └── NOTES.txt       # 安装后提示信息
├── crds/               # (可选)CRD 定义
└── README.md           # 使用说明
最佳实践:Chart 版本号遵循 SemVer 2.0 规范(如 1.2.3)。Chart.yaml 中的 appVersion 字段用于标识应用版本,version 字段标识 Chart 包版本,两者可以不同。

1.3 Repo:Chart 分发与索引机制

Helm Repo(仓库)是 Chart 包的存储和分发中心。一个 Repo 本质上是一个 HTTP/HTTPS 服务器,提供 index.yaml 索引文件和 Chart 压缩包(.tgz)。

Repo 的核心工作流程:

  1. 索引构建:Chart 维护者将 Chart 打包为 .tgz 并上传到 Repo 服务器,同时生成 index.yaml 索引文件。
  2. 仓库添加:用户通过 helm repo add 将 Repo URL 注册到本地缓存。
  3. 索引同步:helm repo update 从远程 Repo 拉取最新的 index.yaml 到本地。
  4. Chart 搜索与下载:helm search repo 在本地索引中查找 Chart,helm pull 下载 Chart 包。
命令 作用 示例
helm repo add 添加 Chart 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo list 列出已添加的仓库 helm repo list
helm repo update 更新本地仓库索引 helm repo update
helm search repo 在仓库中搜索 Chart helm search repo nginx
helm pull 下载 Chart 包到本地 helm pull bitnami/nginx --version 15.0.0
Chart Repo 工作流程 Chart 维护者 Repo 服务器 index.yaml Chart .tgz helm pull helm install index.yaml 包含 Chart 名称、版本、 依赖、下载 URL 等元数据

1.4 Release:Chart 的运行实例

Release 是 Chart 在 Kubernetes 集群中的一次具体部署实例。每次执行 helm install 都会创建一个新的 Release,并分配一个唯一的 Release Name。Release 记录了 Chart 版本、配置值、部署时间、状态等完整信息。

Release 的生命周期包含以下状态:

  • pending-install:安装请求已提交,资源尚未完全创建。
  • deployed:Release 已成功部署,资源正常运行。
  • failed:安装或升级过程中发生错误。
  • pending-upgrade:升级请求已提交,正在执行。
  • pending-rollback:回滚请求已提交,正在执行。
  • superseded:被新版本替代的历史 Release 版本。
  • uninstalled:Release 已被卸载,但历史记录保留。
注意:Helm v3 中,Release 信息存储在目标命名空间的 Secret 中,Secret 名称格式为 sh.helm.release.v1.<release-name>.v<revision>。不要手动修改这些 Secret,否则可能导致 Release 状态不一致。

1.5 核心概念关系总结

Chart、Repo、Release 三者构成了 Helm 的完整工作链路:

概念 类比 核心作用 存储位置
Chart 应用安装包(如 .deb/.rpm) 定义应用的所有 Kubernetes 资源模板 本地文件系统或 Repo 服务器
Repo 软件源(如 apt/yum 源) Chart 的索引与分发中心 HTTP/HTTPS 服务器
Release 已安装的应用实例 记录部署状态、版本历史、配置值 Kubernetes Secret(目标命名空间)

Helm v3 通过移除 Tiller,将 Release 管理下沉到 Kubernetes 原生资源(Secret),既简化了架构,又提升了安全性和可扩展性。后续章节将深入探讨如何通过 Chart 模板实现控制平面调度策略与资源映射。