1. Helm 整体架构概述
Helm 是 Kubernetes 生态中最流行的包管理器,其核心职责是将应用打包为 Chart,并通过模板引擎渲染为 Kubernetes 可识别的 YAML 清单。理解 Helm 的架构演进与组件职责划分,是掌握控制平面与 Chart 仓库数据传输设计的前提。
1.1 Helm v3 架构组件:Tiller 移除前后对比
Helm v3 最重大的架构变更是从客户端-服务端模式(v2)转变为纯客户端模式(v3),移除了集群内的 Tiller 组件。下表从多个维度对比两个版本的架构差异:
| 对比维度 | Helm v2(含 Tiller) | Helm v3(无 Tiller) |
|---|---|---|
| 架构模式 | 客户端(CLI)+ 服务端(Tiller) | 纯客户端(CLI) |
| Tiller 角色 | 运行在集群内,负责接收 CLI 请求、渲染 Chart、执行安装/升级/删除 | 已移除,所有操作由 Helm CLI 直接通过 Kubernetes API 完成 |
| 权限模型 | Tiller 拥有集群级 ServiceAccount,存在安全风险 | 使用用户当前的 kubeconfig 权限,遵循最小权限原则 |
| Release 存储 | Tiller 将 Release 信息存储在集群内的 ConfigMap 中 | Helm CLI 将 Release 信息存储在集群内的 Secret 中(默认) |
| Chart 渲染位置 | 服务端(Tiller 内完成模板渲染) | 客户端(Helm CLI 本地完成模板渲染) |
| 网络依赖 | CLI 需与 Tiller 建立 gRPC 连接 | CLI 直接与 Kubernetes API Server 通信 |
| 多租户支持 | 困难,Tiller 共享一个 ServiceAccount | 原生支持,每个用户使用独立凭据 |
架构演进要点: Helm v3 通过移除 Tiller,消除了集群内的特权服务端组件,将安全模型对齐到 Kubernetes RBAC,同时简化了部署流程。所有 Chart 渲染逻辑移至客户端,使得控制平面与数据平面的交互路径更加清晰。
1.2 控制平面与数据平面的职责划分
在 Helm 架构中,控制平面与数据平面的职责边界清晰,二者通过标准化的 HTTP/HTTPS 协议进行 Chart 包的分发与同步。
控制平面(Helm CLI / Client)
- Chart 管理: 负责 Chart 的本地打包(
helm package)、依赖解析(helm dependency)、模板渲染与验证。 - Release 生命周期: 执行安装(
helm install)、升级(helm upgrade)、回滚(helm rollback)、卸载(helm uninstall)等操作。 - 仓库索引管理: 维护本地仓库缓存(
helm repo update),解析 Chart 版本与依赖关系。 - 安全与认证: 处理 Chart 签名验证(Provenance)、仓库认证(Basic Auth / OAuth / TLS)。
- 与 Kubernetes API 交互: 将渲染后的 YAML 清单提交给 API Server,并监控部署状态。
数据平面(Chart 仓库)
- Chart 存储: 以静态文件形式存储打包后的
.tgz文件,以及对应的index.yaml索引文件。 - 索引服务: 提供
index.yaml的 HTTP GET 响应,该文件包含所有 Chart 的元数据、版本号、依赖关系及下载 URL。 - 文件分发: 通过 HTTP/HTTPS 提供 Chart 包的下载服务,支持断点续传与缓存加速。
- 版本管理: 维护 Chart 的多个版本,支持语义化版本控制(SemVer 2.0)。
- 访问控制: 可集成认证网关,限制 Chart 的拉取与推送权限。
职责边界提示: 控制平面负责“如何部署”与“部署什么”,数据平面负责“存储什么”与“提供什么”。Helm CLI 从不直接修改仓库中的 Chart 文件,仓库也从不参与模板渲染或 Release 管理。这种松耦合设计使得 Chart 仓库可以独立扩展、镜像或迁移。
1.3 控制平面与数据平面的交互流程
一次典型的 Chart 安装操作,完整展示了控制平面与数据平面的协作过程:
- 仓库索引同步:
helm repo update从数据平面拉取index.yaml,更新本地缓存。 - Chart 搜索与选择: 控制平面解析本地索引,确定目标 Chart 名称与版本。
- Chart 包下载: 控制平面根据索引中的 URL,从数据平面下载对应的
.tgz包。 - 本地模板渲染: 控制平面在客户端完成 Chart 模板渲染,生成 Kubernetes YAML 清单。
- 提交 Kubernetes API: 控制平面将渲染后的清单提交给 API Server,触发资源创建。
- Release 记录存储: 控制平面将 Release 元数据写入集群内的 Secret 中。
注意: 在 Helm v3 中,Chart 包下载后仅在客户端内存或临时目录中存在,不会持久化到集群内。每次
helm install 或 helm upgrade 都会重新从仓库拉取 Chart(除非使用本地路径)。因此,Chart 仓库的可用性与响应速度直接影响部署效率。
1.4 核心组件总结
| 组件 | 所属平面 | 核心功能 | 通信协议 |
|---|---|---|---|
| Helm CLI | 控制平面 | Chart 管理、Release 生命周期、模板渲染 | gRPC(v2)/ HTTP REST(v3) |
| Chart 仓库 | 数据平面 | Chart 包存储、索引服务、文件分发 | HTTP/HTTPS |
| Kubernetes API Server | 基础设施 | 接收 Helm 提交的 YAML 清单,创建/更新资源 | HTTPS(REST) |
| Secret(Release 存储) | 基础设施 | 持久化 Release 元数据,支持回滚与查询 | Kubernetes API |