0%

Helm的安装与使用

玩 K8s 的朋友肯定都有过这种体验:部署一个微服务,Deployment、Service、ConfigMap、Ingress…… 一堆 YAML 文件写得头晕眼花。换个环境还得挨个改配置,一旦升级出错,回滚更是噩梦。

这时候,你就需要 Helm 了。

作为 K8s 事实上的“包管理器”,Helm 能把这些零散的资源打包,让你像用 apt 或 yum 装软件一样,一条命令搞定复杂应用的部署。这篇文章不整虚的,直接带你搞懂 Helm 的核心逻辑,并手把手完成安装和基础配置。

一、为什么 K8s 需要 Helm?

1.1 原生 Kubernetes 部署的痛点

假设你要部署一个微服务应用,它通常包含:

  • Deployment(部署)
  • Service(服务暴露)
  • ConfigMap(配置)
  • Secret(敏感信息)
  • Ingress(路由)
  • PersistentVolumeClaim(存储)

你需要维护数十甚至上百个 YAML 文件,且每个环境(开发、测试、生产)的配置还有差异。更麻烦的是,版本升级时你要小心翼翼地修改参数,回滚时更是噩梦——因为 Kubernetes 原生并不提供“应用级”的版本管理。

1.2 Helm 的解法

Helm 的出现,正是为了解决上述问题。它的灵感来自 Linux 的包管理器(如 apt、yum)——就像 apt install nginx 能帮你搞定所有依赖和配置一样,Helm 让你用一条命令就能安装一个完整的应用栈。

  • 诞生时间:2015 年,由 Deis 公司开源,后来成为 CNCF(云原生计算基金会)的顶级项目。
  • 核心目标:定义、安装、升级复杂的 Kubernetes 应用,并管理其生命周期。

1.3 Helm 的核心概念

要理解 Helm,只需记住三个关键词:

概念 类比 解释
Chart 软件包(如 .deb/.rpm) 包含运行一个应用所需的所有 K8s 资源 YAML 模板和元数据。
Release 运行中的实例(如一个已安装的软件) 当你在集群中安装一个 Chart 后,就产生了一个 Release,可以多次安装同一个 Chart 得到多个 Release(如 dev-nginx、prod-nginx)。
Repository 软件源(如 APT 仓库) 存放 Chart 的 HTTP 服务器,Helm 从仓库中拉取 Chart。

有了这三个抽象,Helm 就能像管理软件包一样管理你的应用。


二、Helm的核心能力

日常使用中,Helm 主要帮你干这几件事:

  1. 一键部署与升级:用 helm install 部署,用 helm upgrade 更新。改个配置或换个镜像,K8s 资源会自动滚动更新。
  2. 后悔药(回滚):Helm 会记录每次升级的 Revision(修订版号)。生产环境出事故时,一句 helm rollback 就能瞬间回到上一个正常版本。
  3. 模板化配置:Chart 内部使用 Go 模板。你只需维护一个 values.yaml,就能用同一套模板适配 dev、test、prod 不同环境。
  4. 依赖与钩子:支持应用依赖管理(如 WordPress 自动拉取 MySQL);支持生命周期钩子(Hooks),可以在安装前后自动执行数据库初始化等 Job。

三、Helm安装指南

注:Helm v3 之后已经移除了服务端组件 Tiller,所以现在安装 Helm,实际上就是安装客户端 CLI 工具。

这里提供两种最常用的安装方式。

3.1 方式一:官方脚本一键安装(推荐,最快捷)

适合所有 Linux 发行版,脚本会自动检测系统架构并下载对应二进制文件。

1
2
3
4
5
6
7
# 下载安装脚本并执行(自动检测最新版本)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4
chmod 700 get_helm.sh
./get_helm.sh

# 或者简单粗暴的一行命令版:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 | bash

原理:脚本会检测系统架构,从 GitHub Releases 下载对应二进制文件,并放到 /usr/local/bin/helm。

安装完成后,检查版本:

1
2
helm version
# 输出类似: version.BuildInfo{Version:"v3.18.5", ...}

国内网络如果拉取 GitHub 脚本较慢,建议配置代理,或者直接使用下面的 APT 方式

3.2 方式二:APT 包管理器安装(适合 Ubuntu/Debian)

利用 APT 管理,优点是支持签名校验和后续的自动更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 定义Helm官方APT仓库密钥指纹,用于校验密钥合法性,防止密钥被篡改
HELM_BUILDKITE_APT_KEY_ID="DDF78C3E6EBB2D2CC223C95C62BA89D07698DBC6"

# 安装必备工具:curl下载文件、gpg校验密钥、apt-transport-https支持https源;--yes自动确认安装
sudo apt-get install curl gpg apt-transport-https --yes

# 静默下载Helm仓库GPG公钥,保存到临时目录,无TMPDIR则默认存/tmp/helm.gpg
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey > "${TMPDIR:-/tmp}/helm.gpg"

# 校验下载的公钥指纹和预设指纹是否一致,防止中间人篡改密钥
# gpg --show-keys --with-colons:机器可读格式输出密钥信息
# awk -F: '$1 == "fpr" {print $10}':提取指纹字段
# head -n 1:取第一条指纹
# 不一致则打印错误并直接退出脚本
if [ "$(gpg --show-keys --with-colons "${TMPDIR:-/tmp}/helm.gpg" | awk -F: '$1 == "fpr" {print $10}' | head -n 1)" != "${HELM_BUILDKITE_APT_KEY_ID}" ]; then echo "ERROR: Unexpected Helm APT key ID: potential key compromise"; exit 1; fi

# 将明文GPG密钥转为apt兼容的二进制密钥,保存到系统可信密钥目录,屏蔽标准输出
cat "${TMPDIR:-/tmp}/helm.gpg" | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null

# 写入Helm软件源配置文件,指定该源使用上面导入的密钥校验包签名
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

# 更新apt软件源索引,读取刚添加的helm源
sudo apt-get update

# 通过apt包管理器安装helm客户端
sudo apt-get install helm


# 卸载
apt remove helm

3.3 验证安装与配置

安装完毕后,运行 helm version,如果显示客户端版本信息,则成功。

注意:Helm 默认使用 ~/.kube/config 与集群通信,所以请确保你的 kubectl 已正确配置。如果没有,Helm 命令会报错。

四、日常高频命令速查

装好 Helm 后,把下面这些命令混个脸熟,日常运维基本够用了。

4.1 仓库管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 添加仓库(以知名的 Bitnami、Higress 为例)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add higress https://higress.io/helm-charts

# 更新仓库索引(安装前务必执行)
helm repo update


# 确认harbor版本存在
helm search repo harbor/harbor --versions | head
# 确认mysql版本存在
helm search repo mysql --versions | head

# 查看已添加的仓库列表
helm repo list

# 删除仓库
helm repo remove higress

4.2 安装与升级

1
2
3
4
5
6
7
8
9
10
11
# 基本安装(创建命名空间)
helm install my-nginx bitnami/nginx -n my-ns --create-namespace

# 指定自定义 values.yaml 安装
helm install my-app ./my-chart -f values-prod.yaml

# 安装特定版本
helm install my-app bitnami/nginx --version 15.0.0

# 升级(如果 release 不存在则执行 install)
helm upgrade my-app bitnami/nginx -n my-ns --install -f new-values.yaml

4.3 查看与调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 列出所有命名空间的 Release
helm list -A

# 查看 Release 状态
helm status my-app -n my-ns

# 查看历史版本(含 Revision 编号)
helm history my-app -n my-ns

# 只渲染 YAML 而不实际安装(用于调试模板)
helm template my-app ./my-chart

# 模拟执行(dry-run)
helm upgrade my-app ./my-chart --dry-run

4.4 回滚与卸载

1
2
3
4
5
6
7
8
# 回滚到上一个版本
helm rollback my-app -n my-ns

# 回滚到指定 Revision(如 2)
helm rollback my-app 2 -n my-ns

# 卸载 Release
helm uninstall my-app -n my-ns

4.5 导出配置与查看 Chart 信息

1
2
3
4
5
6
7
8
# 查看 Chart 的默认 values(调参必看)
helm show values bitnami/nginx

# 查看 Chart 的 README
helm show readme bitnami/nginx

# 导出当前 Release 的已生效配置(用于备份)
helm get values my-app -n my-ns -o yaml > current-values.yaml

五、最佳实践与避坑指南

  1. 始终使用 --dry-run 预览:在正式安装或升级前,先执行 --dry-run 和 --debug,检查生成的 YAML 是否符合预期,避免直接犯错。

  2. 管理 values 文件:将不同环境的配置(dev/staging/prod)分离,不要直接在命令行传参,否则难以维护。

  3. 善用 Helm 钩子(Hooks):如果 Chart 提供了 pre-install、post-upgrade 等钩子,利用它们来做数据库迁移等初始化操作。

  4. 注意 CRD 管理:Helm 默认不会升级 CRD(自定义资源),请参考 Chart 官方文档单独处理。

  5. 国内网络优化:如果从 GitHub 下载脚本慢,可以设置代理或使用 APT 方式(已经过 CDN 加速)。

六、结语

Helm 早就成了 K8s 生态里绕不开的基础设施,把 Helm 玩溜了,你的 K8s 交付效率绝对能翻倍。

从这篇的安装和基础命令开始,你已经掌握了 Helm 的核心玩法。接下来,我打算写一期实战,用 Helm 部署 NFS 动态存储 Provisioner 和 Harbor 镜像仓库,真正将理论落地到生产级别的环境中。

大家在安装或使用 Helm 时踩过什么坑?或者有什么好用的私有 Chart 仓库推荐?欢迎在评论区交流,我们下期见。

您的打赏,是我创作的动力!不给钱?那我只能靠想象力充饥了。