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 已于 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 生命周期
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 提供更好的安全性,建议保留默认。