1. Helm 基础入门
1.1 Helm 的起源与核心价值
Helm 诞生于 2015 年,由 Deis 公司(后被微软收购)发起,最初作为 Kubernetes 生态中第一个应用包管理工具,旨在解决 Kubernetes 原生 YAML 资源编排的三大痛点:重复编写、环境差异和版本管理缺失。2019 年 Helm 加入 CNCF 并晋升为毕业项目,成为 Kubernetes 应用交付的事实标准。
| 维度 | 原生 YAML 痛点 | Helm 核心价值 |
|---|---|---|
| 复用性 | 每个环境(开发/测试/生产)需复制粘贴大量 YAML | 通过模板引擎 + values.yaml 实现参数化,一份 Chart 多环境复用 |
| 依赖管理 | 手动管理 MySQL、Redis 等中间件 YAML 顺序与版本 | Chart 依赖声明自动解析,一键安装/升级整个应用栈 |
| 版本回滚 | 无原生机制,回滚需手动恢复旧 YAML | 内置 Release 版本记录,helm rollback 秒级回退 |
| 分发共享 | YAML 散落在 Git 仓库或文档中,难以发现 | Chart 仓库(OCI/HTTP)统一存储,helm search 快速发现 |
工程视角:Helm 的核心价值不在于"减少 YAML 行数",而在于将 Kubernetes 资源从静态配置升级为可编程、可版本化、可共享的交付单元。在微服务架构中,一个服务通常包含 Deployment、Service、ConfigMap、Ingress 等 5~10 个资源,Helm 将其封装为一个 Chart,显著降低运维心智负担。
1.2 Helm 3 架构解析
Helm 3 于 2019 年 11 月发布,相比 Helm 2 做了重大架构简化。核心变化是移除了 Tiller 服务端组件,改为纯客户端架构,直接通过 Kubernetes API 与集群交互。下图展示了 Helm 3 的核心组件与工作流程:
1.3 Helm 与 Kubernetes 的关系
Helm 不是 Kubernetes 的替代品,而是其上层抽象。Kubernetes 提供资源声明式 API,Helm 在此基础上提供模板化、打包、版本管理能力。两者在职责上严格分层:
| 层次 | Kubernetes 职责 | Helm 职责 |
|---|---|---|
| 资源定义 | 提供 Deployment、Service、Ingress 等 API 对象 | 通过 Go 模板生成最终 YAML,注入 values 参数 |
| 生命周期 | 管理 Pod 调度、副本数、滚动更新 | 管理 Chart 的 install / upgrade / rollback / uninstall |
| 依赖 | 无原生依赖解析 | 声明式依赖(dependencies 字段),自动拉取子 Chart |
| 版本 | 资源版本通过 annotation 或标签管理 | Release 版本号递增,支持历史版本查询与回滚 |
最佳实践:在 CI/CD 流水线中,Helm 负责"生成并提交 YAML 到集群",Kubernetes 负责"确保集群状态与 YAML 一致"。两者配合时,建议将 Helm 的
--atomic 参数与 Kubernetes 的 progressDeadlineSeconds 结合使用,实现失败自动回滚。
1.4 Helm 的安装与初始化
Helm 3 的安装非常简洁,只需下载二进制文件并配置仓库即可。以下是主流操作系统安装步骤:
1.4.1 安装 Helm CLI
方式一:脚本安装(推荐)
# 自动检测系统架构并安装最新版
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version --short
# 输出示例:v3.15.0+ge7c0f0c
方式二:包管理器安装
# macOS (Homebrew)
brew install helm
# Ubuntu/Debian (apt)
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
# Windows (Chocolatey)
choco install kubernetes-helm
1.4.2 初始化 Chart 仓库
安装完成后,需要添加官方或第三方 Chart 仓库:
# 添加官方稳定仓库
helm repo add stable https://charts.helm.sh/stable
# 添加 Bitnami 仓库(生产环境常用)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 更新仓库索引
helm repo update
# 查看已添加的仓库
helm repo list
# 搜索可用 Chart
helm search repo nginx
1.4.3 验证 Helm 与集群连通性
Helm 依赖 kubeconfig 文件与集群通信。执行以下命令验证:
# 查看当前 kubeconfig 上下文
kubectl config current-context
# 测试 Helm 能否访问集群(创建一个测试 Release)
helm install test-release bitnami/nginx --dry-run --debug
# 查看 Helm 环境信息
helm env
常见问题:如果
1.
2.
3. 集群 API Server 地址是否可从当前网络访问(如 Minikube 需运行
helm install 报错 Kubernetes cluster unreachable,请检查:1.
kubectl cluster-info 是否正常返回2.
KUBECONFIG 环境变量是否指向正确的 kubeconfig 文件3. 集群 API Server 地址是否可从当前网络访问(如 Minikube 需运行
minikube start)
1.4.4 初始化流程总结
以下表格汇总了 Helm 安装与初始化的关键步骤及验证命令:
| 步骤 | 操作 | 验证命令 |
|---|---|---|
| 1 | 安装 Helm 二进制 | helm version |
| 2 | 添加 Chart 仓库 | helm repo list |
| 3 | 更新仓库索引 | helm repo update |
| 4 | 验证集群连通性 | helm install test --dry-run bitnami/nginx |
| 5 | (可选)启用 Shell 自动补全 | helm completion bash > /etc/bash_completion.d/helm |