1. Helm 概述
1.1 Helm 是什么
Helm 是 Kubernetes 生态中最流行的包管理工具,类比于操作系统中的 apt/yum 或编程语言中的 npm/pip。它通过预定义的模板和参数化机制,将复杂的 Kubernetes 资源(Deployment、Service、ConfigMap 等)打包为一个可重复部署的单元,从而解决以下核心痛点:
- 手动管理 YAML 碎片:一个微服务通常需要 5~10 个 YAML 文件,Helm 将其整合为单一 Chart。
- 环境差异:开发/测试/生产环境的镜像标签、副本数、域名等参数通过 Values 文件动态注入,无需复制多套 YAML。
- 版本回滚:Helm 保留每次部署的 Release 历史,支持一键回退到任意历史版本。
- 依赖管理:一个 Chart 可以依赖其他 Chart(如应用依赖 MySQL),Helm 自动解析并安装依赖。
一句话定义:Helm = Kubernetes 的包管理器 + 模板引擎 + 版本控制器。
1.2 核心概念
| 概念 | 定义 | 类比 |
|---|---|---|
| Chart | 一个预配置的 Kubernetes 资源包,包含模板文件、默认值、依赖描述等。 | 软件安装包(.deb/.rpm) |
| Release | Chart 在特定集群上的一次运行实例。同一个 Chart 可以部署多次,每次生成一个独立的 Release。 | 进程实例 |
| Repository | Chart 的存储仓库,支持 HTTP/HTTPS 协议,用于分发和共享 Chart。 | 软件源(apt repo) |
关键区别:Chart 是“安装包”,Release 是“已安装的程序”。
helm install my-release bitnami/nginx 中,bitnami/nginx 是 Chart,my-release 是 Release 名称。
1.3 Helm 架构组件
Helm 的架构经历了从 v2 到 v3 的重大演进,核心变化是移除了 Tiller 服务端组件,大幅提升了安全性和简洁性。
1.3.1 Helm v2 架构(Tiller 时代)
- Helm CLI:客户端,负责本地 Chart 开发、打包、与 Tiller 通信。
- Tiller:服务端,运行在集群内,拥有集群管理员权限,负责解析 Chart、安装 Release、管理 Release 版本。
- gRPC 通信:Helm CLI 通过 gRPC 向 Tiller 发送指令。
- 安全风险:Tiller 拥有过高权限,且默认不开启认证,容易成为攻击入口。
1.3.2 Helm v3 架构(去 Tiller)
- Helm CLI 直接调用 Kubernetes API:所有操作通过 kubeconfig 文件中的用户权限执行,遵循 RBAC 原则。
- Release 信息存储在 Secret 中:v3 将 Release 版本记录以 Secret 资源保存在集群内,不再依赖 Tiller 数据库。
- Chart 推送至 OCI 仓库:v3 支持将 Chart 推送至符合 OCI 标准的容器镜像仓库(如 Harbor、Docker Hub)。
- 移除 tiller-namespace:不再需要为 Tiller 单独创建命名空间,简化运维。
升级注意:从 v2 迁移到 v3 时,需要使用
helm 2to3 插件迁移 Release 数据,否则历史 Release 会丢失。
1.4 Helm 工作流程
一次典型的 Helm 部署流程包含以下步骤:
- Chart 准备:开发者编写 Chart 模板(Go template 语法)和 values.yaml 默认值。
- Chart 打包:
helm package ./mychart生成.tgz归档文件。 - Chart 发布:将
.tgz上传至 Chart Repository 或 OCI 仓库。 - Chart 安装:
helm install my-release bitnami/nginx --values prod-values.yaml。 - 模板渲染:Helm 将 Chart 模板与用户提供的 Values 合并,生成最终的 Kubernetes YAML。
- 资源创建:Helm 通过 Kubernetes API 创建 Deployment、Service 等资源。
- Release 记录:v3 将 Release 元数据(Chart 版本、Values、资源清单)写入 Secret。
模板渲染示例:假设 values.yaml 中定义
replicaCount: 3,模板中 {{ .Values.replicaCount }} 会被渲染为 3,最终生成包含 replicas: 3 的 Deployment YAML。
1.5 本章小结
- Helm 是 Kubernetes 的包管理、模板化和版本控制工具。
- 三大核心概念:Chart(包)、Release(实例)、Repository(仓库)。
- Helm v3 移除 Tiller,直接调用 K8s API,Release 信息存储在 Secret 中,安全性显著提升。
- 工作流程:Chart + Values → 模板渲染 → YAML 生成 → 资源创建 → Release 记录。