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 会丢失。
Helm v2 vs v3 架构对比 Helm v2(含 Tiller) Helm CLI Tiller K8s API ConfigMap gRPC Release 记录 Helm v3(去 Tiller) Helm CLI K8s API Secret OCI 仓库 直接调用 Release 记录 Chart 分发 核心变化 v2:Helm CLI → gRPC → Tiller → K8s API(Tiller 拥有集群管理员权限) v3:Helm CLI → 直接调用 K8s API(权限由 kubeconfig 控制,更安全)

1.4 Helm 工作流程

一次典型的 Helm 部署流程包含以下步骤:

  1. Chart 准备:开发者编写 Chart 模板(Go template 语法)和 values.yaml 默认值。
  2. Chart 打包:helm package ./mychart 生成 .tgz 归档文件。
  3. Chart 发布:将 .tgz 上传至 Chart Repository 或 OCI 仓库。
  4. Chart 安装:helm install my-release bitnami/nginx --values prod-values.yaml。
  5. 模板渲染:Helm 将 Chart 模板与用户提供的 Values 合并,生成最终的 Kubernetes YAML。
  6. 资源创建:Helm 通过 Kubernetes API 创建 Deployment、Service 等资源。
  7. Release 记录:v3 将 Release 元数据(Chart 版本、Values、资源清单)写入 Secret。
模板渲染示例:假设 values.yaml 中定义 replicaCount: 3,模板中 {{ .Values.replicaCount }} 会被渲染为 3,最终生成包含 replicas: 3 的 Deployment YAML。
Helm 工作流程(从 Chart 到 Release) Chart 模板 Values 参数 Helm 引擎 Kubernetes YAML Release (Secret) 集群资源 Go template 合并 渲染 记录 创建

1.5 本章小结

  • Helm 是 Kubernetes 的包管理、模板化和版本控制工具。
  • 三大核心概念:Chart(包)、Release(实例)、Repository(仓库)。
  • Helm v3 移除 Tiller,直接调用 K8s API,Release 信息存储在 Secret 中,安全性显著提升。
  • 工作流程:Chart + Values → 模板渲染 → YAML 生成 → 资源创建 → Release 记录。