1. Helm 基础概念

1.1 Helm 是什么

Helm 是 Kubernetes 生态中最流行的包管理工具,其角色类似于操作系统中的 apt/yum(Linux)或 Homebrew(macOS)。Helm 将 Kubernetes 资源(Deployment、Service、ConfigMap、Ingress 等)打包为一个统一的发布单元,并提供版本管理、参数化配置、依赖管理和一键部署/回滚能力。

核心价值:将复杂的 Kubernetes 应用定义从“手动拼装 YAML”升级为“可复用、可配置、可版本化的 Chart 包”,显著降低运维复杂度。
对比维度 原生 Kubernetes YAML Helm Chart
复用性 每个环境需复制/修改整套 YAML 通过 values.yaml 参数化,一套 Chart 多环境复用
版本管理 依赖 Git 或手动备份 内置 Release 版本号,支持一键回滚
依赖管理 需手动编排依赖顺序 Chart.yaml 声明依赖,自动解析安装顺序
部署复杂度 逐条 kubectl apply 单条 helm install/upgrade 命令完成

1.2 Helm 架构演进:Tiller vs Helm 3

Helm 架构经历了从 Helm 2(Tiller 模式)到 Helm 3(无 Tiller 模式)的重大变革。理解这一演进对掌握 Helm 安全模型和运维方式至关重要。

Helm 2(Tiller 模式)vs Helm 3(无 Tiller 模式) Helm 2 架构 helm CLI Tiller Server Release 管理 Chart 渲染 K8s API 交互 ConfigMaps ⚠️ Tiller 拥有集群级权限,存在安全风险 需额外配置 RBAC 和 gRPC 加密 Helm 3 架构 helm CLI Kubernetes API Chart 本地渲染 SDK 直接调用 无服务端组件 Secrets(默认) ConfigMaps(可选) ✅ 移除 Tiller,使用 kubeconfig 认证 完全继承 Kubernetes RBAC 权限模型
迁移建议:Helm 2 已于 2020 年 11 月进入 End of Life,不再接收安全更新。所有新项目应直接使用 Helm 3,存量 Helm 2 环境建议使用 helm 2to3 插件迁移。

1.3 Helm 核心术语

掌握以下三个核心术语是理解 Helm 工作流的基础:

术语 定义 类比 关键特征
Chart Kubernetes 资源的打包格式,包含模板、默认配置和依赖声明 软件包(.deb/.rpm) 可版本化、可依赖、可发布到仓库
Release Chart 在 Kubernetes 集群中的一次运行实例 进程实例 每个 Release 有唯一名称和版本号,支持升级/回滚
Repository Chart 包的存储和分发仓库 APT/YUM 源 支持 HTTP/HTTPS 协议,可添加/更新/索引

Chart 目录结构

一个标准的 Helm Chart 目录结构如下:

mychart/
├── Chart.yaml          # Chart 元数据(名称、版本、依赖)
├── values.yaml         # 默认配置值
├── values.schema.json  # (可选)values 的 JSON Schema 校验
├── charts/             # (可选)子 Chart 依赖
├── templates/          # Go 模板文件,渲染后生成 Kubernetes YAML
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── _helpers.tpl    # 模板辅助函数
│   └── tests/          # 测试模板
└── README.md           # 使用说明

Release 生命周期

Release 生命周期 helm install DEPLOYED helm upgrade DEPLOYED helm rollback 每次 upgrade 生成新 Revision 回滚即切换到历史 Revision

Repository 操作

Helm 支持多种类型的 Chart 仓库:

  • 官方仓库:https://charts.helm.sh/stable(已归档),推荐使用 Artifact Hub(https://artifacthub.io)作为统一发现入口
  • OCI 仓库:Helm 3.8+ 支持将 Chart 存储为 OCI 镜像,兼容 Harbor、Docker Registry、AWS ECR 等
  • 自建仓库:使用 helm repo index 生成索引,配合 Nginx/MinIO 或 GitHub Pages 分发
注意:Helm 3 默认 Release 信息存储在 Kubernetes Secrets 中(Helm 2 使用 ConfigMaps)。可通过 --store 参数切换存储后端,但 Secrets 提供更好的安全性,建议保留默认。