Helm 与 Chart

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    # 可选:包含简要使用说明的文本文件
Bash

2. 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
Bash

3. 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
Bash

4. 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"
Bash

Chart 包的多种部署方法:

# 在使用 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
Bash

5. 升级与回滚

# 对于已经安装的 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 
Bash

6. 卸载应用

在 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 就不能再回滚到某个历史版本。

上一篇
下一篇