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 的核心组件与工作流程:

Helm 3 架构与工作流程 用户 / CI Helm CLI Chart 仓库 本地 Chart 缓存 Kubernetes API Release 记录 (Secret 存储) 集群资源 Deployment Service / ConfigMap 架构关键变化(Helm 2 → Helm 3) 1. 移除 Tiller:不再需要集群内服务端组件,安全性大幅提升(Helm 2 的 Tiller 拥有集群管理员权限) 2. Release 存储:从 ConfigMap 改为 Secret(默认),支持加密存储敏感信息 3. 引入 OCI 支持:Chart 可直接存储在 OCI 兼容的容器镜像仓库中 4. 移除 Chart 索引本地 serve 命令:不再内置 Chart 仓库服务器

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
常见问题:如果 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