1. 核心概念
Helm 是什么?
- Helm 就是用来安装 Chart 包的工具,而 Chart 包就是一系列相关的 yaml 的集合体。
为何要用 Helm 命令?
- 对于复杂的应用来说,涉及到相关的 yaml 文件非常的多,把它都组织到一起形成一个 Chart 包,然后用 Helm 统一进行安装与卸载会非常方便。
Helm 本身不持有任何凭证。在 Helm v3 中,它完全依赖于底层的 kubectl
工具来获取和使用访问 Kubernetes 集群的凭证。简单来说:Helm 使用与 kubectl
相同的凭证和上下文(Context)。
Helm 主要包括以下组件:
- Chart:Helm 软件包,包含一个应用所需资源对象的YAML文件,通常以 .tgz 压缩包形式提供,也可以是文件夹形式。
- Repository(仓库):用于存储和共享 Chart 的仓库。
- Config(配置数据):部署时设置到 Chart 中的配置数据。
- Release:基于 Chart 和 Config 部署到 Kubernetes 集群中运行的一个实例。一个 Chart 可以被部署多次,每次的 Release 都不相同。
基于 Helm 的工作流程如下:
- 开发人员将开发好的 Chart 上传到 Chart 仓库。
- Chart 仓库中的 Chart 可用于共享和分发。
- 运维人员基于 Chart 的定义,设置必要的配置数据(Config),使用 Helm 命令行工具将应用一键部署到 Kubernetes 集群中,以 Release 概念管理后续的更新、回滚等。
Chart 是包含一系列文件的集合,目录名称就是 Chart 名称(不包含版本信息),例如,一个WordPress 的 Chart 会被存储在名为“wordpress”的目录下。
wordpress/
Chart.yaml # 包含 Chart 信息的 YAML文件
LICENSE # 可选:包含Chart许可证的文本文件
README.md # 可选:README 文件
values.yam1 # Chart默认的配置值
values.schema.json # 可选:JSON结构的values.yaml 文件
charts/ # 包含 Chart 依赖的其他 Chart
crds/ # 自定义资源的定义
templates/ # 模板目录,与values.yaml组合为完整的资源对象配置文件
templates/NOTES.txt # 可选:包含简要使用说明的文本文件
Bash2. Helm 安装
下载地址:https://github.com/helm/helm/releases
# 下载压缩包
wget https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.14.4-linux-amd64.tar.gz
# 将二进制文件移动到系统 PATH 目录下
sudo mv linux-amd64/helm /usr/local/bin/helm
# 验证安装,查看版本
helm version
Bash3. Helm-Chart 仓库
Helm v3 不再提供默认的 Chart 仓库,用户需要通过 helm repo 命令来添加、查询、删除 Chart 仓库。只有添加了Chart 仓库后才能安装 Chart。
可以通过 Helm 提供的 Artifact Hub 来查询公开的 Chart 包所在的仓库。示例:
# 查找有 wordpress Chart 包的仓库
helm search hub wordpress --list-repo-url
# 默认是表格(table)格式,当列太多时会被截断。我们可以指定输出为更宽的格式。
helm search hub wordpress --list-repo-url -o yaml
# URL:该 Helm Chart 在 Artifact Hub 网站上的详细页面地址。
# CHART VERSION:Helm Chart 本身的版本号。
# APP VERSION:这个 Helm Chart 所部署的“应用程序”的版本号。
# DESCRIPTION:对该 Helm Chart 功能的简短文字描述。
# REPO URL:仓库地址。
Bash添加 Chart 仓库:
# 尽量选择来源可靠的仓库,或者自己搭建
# 最常用的是官方的 Bitnami 仓库,它包含了大量高质量的应用程序。
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
Bash更新仓库信息:
# 确保获取到仓库中最新的 Chart 列表。
helm repo update # 更新所有仓库
helm repo update bitnami
Bash搜索 Chart:
helm search repo bitnami/nginx # 搜索 Bitnami 仓库中的 Nginx
helm search repo mysql # 在所有已添加的仓库中搜索 MySQL
Bash查看已添加的仓库:
helm repo list
Bash删除仓库:
helm repo remove bitnami
Bash4. Helm 部署应用
默认配置部署:
# 直接部署
helm install nginx-1 bitnami/nginx --version 21.1.23
# nginx-1:自定义的 release 名字
# bitnami:仓库名字
# nginx:chart 包名字
# --version 21.1.23:指定版本,不指定默认安装最新版
# 让 helm 自动生成 release 名字
helm install bitnami/nginx --version 21.1.23 --generate-name
Bash查看 release 的状态:
helm status nginx
Bash查看部署的 release 列表:
helm list
Bash注意:Helm 命令属于名称空间级别,不指定名称空间时为默认名称空间。
自定义配置部署:
在实际情况下需要先根据环境信息先修改默认配置,再部署。
# 查看 Chart 的可配置项,本质就是查看的 Chart 包下 values.yaml 的内容
helm show values bitnami/nginx
# 编写一个 yaml 文件来覆盖默认配置
# 或者将 Helm Chart 从仓库下载到本地,进行自定义修改或离线安装
helm pull bitnami/nginx --version 21.1.23 --untar
# --untar:下载后会自动解压压缩包到一个目录中
# 在安装的时候用 -f 选型执行自己的 my_values.yaml
helm install nginx-1 bitnami/nginx --version 21.1.23 --namespace kube-system --dry-run -f my_values.yaml
# --namespace:指定将应用程序部署到哪个 Kubernetes 命名空间中
# --dry-run:它不会真正执行安装操作,而是模拟安装过程,并将最终会生成的 Kubernetes YAML 清单文件渲染并输出到终端。
# 安装 pull 到本地的 Chart 包
helm install nginx-1 ./nginx --namespace kube-system -f my_values.yaml
# 或者在安装的时候用 --set 选型传入 key=value,例如:--set imageTag="xxxx"
BashChart 包的多种部署方法:
# 在使用 helm install 部署应用时,Chart 包可以有多种来源
# Chart 仓库,如上文示例。
# 本地的 Chart 压缩包
helm install <release_name> ./xxxxx.tgz
# 解压缩的 Chart 目录
helm install <release_name> ./chart 包的目录
# 一个 Chart 压缩包的 URl
helm install <release_name> http://mirror.azure.cn/kubernetes/charts/mariadb-7.3.9.tgz
Bash5. 升级与回滚
# 对于已经安装的 release,进行升级安装,例如:修改了配置或 Chart 包更新了版本等
$ helm upgrade nginx-1 bitnami/nginx -f my_values.yaml
# 升级后通过 helm list 命令查看 release 信息,会发现 release 被更新为 2
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-1 default 2 2025-09-05 12:38:38.028292092 +0800 CST deployed nginx-21.1.23 1.29.1
# 查看历史版本
$ helm history nginx-1
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Fri Sep 5 11:38:03 2025 superseded nginx-21.1.23 1.29.1 Install complete
2 Fri Sep 5 12:38:38 2025 deployed nginx-21.1.23 1.29.1 Upgrade complete
# 回滚到之前某个版本
$ helm rollback nginx-1 1
$ helm history nginx
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Fri Sep 5 11:38:03 2025 superseded nginx-21.1.23 1.29.1 Install complete
2 Fri Sep 5 12:38:38 2025 superseded nginx-21.1.23 1.29.1 Upgrade complete
3 Fri Sep 5 12:43:15 2025 deployed nginx-21.1.23 1.29.1 Rollback to 1
# 注意:release 版本号是持续增加的,每次升级或回滚时都会增加 1
Bash6. 卸载应用
在 Helm v3 版本中删除 release 不会保留删除记录。可以使用 –keep-history 参数保留删除记录。
helm uninstall nginx-1
helm uninstall nginx-1 --keep-history
# 查看删除记录
helm history nginx-1
# 再次使用 helm uninstall nginx-1 则可以清除记录
Bash注意:以删除的 release 就不能再回滚到某个历史版本。