1. 简介
随着 Kubernetes 容器编排系统的不断发展,它已经成为管理大规模部署的重要工具。随之而来的问题是,如何有效地管理这些部署所依赖的定义文件本身。为了解决这个问题,Helm —— Kubernetes 的包管理器应运而生。它不仅能够像传统包管理器一样管理“Chart”(即 Helm 的包),还支持查看每个 Chart 的多个版本。
在本教程中,我们将探讨 Helm Chart 的版本管理机制,以及如何通过 Helm 进行 Chart 的搜索与过滤。我们会先回顾一下与 Chart 相关的版本概念,然后演示如何安装特定版本的 Chart,接着深入讲解如何搜索、列出和筛选 Chart,最后介绍如何查看 Chart 的所有可用版本。
我们测试本教程中的命令时使用的是 Debian 12(Bookworm)系统,GNU Bash 5.2.15 和 Helm 3.14。除非特别说明,这些命令在大多数符合 POSIX 标准的环境中都应能正常运行。
2. 包版本与 Helm Chart
软件不断更新迭代,包管理器及其管理的“包”也不例外。因此,版本的概念在软件包管理中非常重要。
不同的软件包版本可能会根据以下因素进行区分:
- 版本号(version)
- 架构(architecture)
- 其他特性(characteristics)
例如,APT 包管理器中一个包的展示如下:
$ apt list iputils-ping
Listing... Done
iputils-ping/stable,now 3:20221126-1 amd64 [installed]
在包名 iputils-ping
后面,我们看到版本分类 stable
,实际版本号是一个日期 20221126-1
,以及架构 amd64
。
类似地,Helm 中的 Chart 本质上就是“包”,它们的版本管理也遵循类似的逻辑。下面是一个 Chart 列表示例:
URL CHART VERSION APP VERSION DESCRIPTION
https://artifacthub.io/packages/helm/waldur/waldur 0.1.0 4.4.2 Waldur - Open-Source Cloud Marketplace
https://artifacthub.io/packages/helm/truecharts... 4.2.3 1.34.0 Open source, self-hostable watched list
https://artifacthub.io/packages/helm/kubeblocks... 0.8.0 1.18.0 Weaviate is an open-source vector database. It ...
https://artifacthub.io/packages/helm/djjudas21/... 2.2.8 2.1.18 Open-source online collaborative genealogy appl...
https://artifacthub.io/packages/helm/geek-cookb... 2.2.0 2.0.19 Open-source online collaborative genealogy appl...
接下来我们将学习如何使用这些信息来查找和安装特定版本的 Chart。
3. 安装特定版本的 Helm Chart
默认情况下,Helm 会安装某个 Chart 的最新版本。但在某些场景下,这并不是我们想要的。
例如,某些 Chart 只兼容特定版本的 Kubernetes。如果我们不想因为某个 Chart 而升级整个 Kubernetes 集群,选择一个兼容的旧版本 Chart 就变得很有必要。
要安装特定版本的 Chart,可以在 helm install
命令中使用 --version
参数:
$ helm install --version <CHART_VERSION> stable/<CHART_NAME>
例如:
$ helm install --version 0.0.4 banzaicloud-stable/satellite
⚠️ 关键点:你必须事先知道 Chart 的版本号。虽然这个信息通常可以在 Chart 的仓库页面或项目文档中找到,但 Helm 也提供了更方便的方式来查找。
4. Helm Chart 搜索
和大多数包管理器一样,Helm 提供了基于关键词、仓库、正则表达式等多种方式来搜索 Chart。
主要命令是 helm search
,支持以下常用参数:
--output
(-o
):控制输出格式(如 json、yaml)--max-col-width
:限制列宽,避免输出过长--version
:按 Chart 版本筛选--devel
:包含开发版本(如 alpha、beta)--versions
:显示所有版本信息--regexp
(-r
):使用正则表达式进行匹配
4.1. 通过 Artifact Hub 搜索
Helm Artifact Hub 是 Helm Chart 的官方仓库索引。使用以下命令可以搜索所有公开的 Chart:
$ helm search hub
这个命令会列出超过 12,000 个 Chart,适用于新 Kubernetes 集群的默认安装源。
4.2. 按仓库搜索
添加了 Helm 仓库后,可以使用 repo
子命令搜索该仓库下的所有 Chart:
$ helm search repo <REPO_NAME>
例如,先查看已添加的仓库列表:
$ helm repo list
NAME URL
gabe565 https://charts.gabe565.com
banzaicloud-stable https://kubernetes-charts.banzaicloud.com
然后搜索 gabe565
仓库中的所有 Chart:
$ helm search repo gabe565 | head
NAME CHART VERSION APP VERSION DESCRIPTION
gabe565/adguard-home 0.3.17 v0.107.44 Free and open source, powerful network-wide ads...
gabe565/ascii-movie 0.13.2 1.7.2 Star Wars movie SSH and Telnet server
[...]
⚠️ 注意:这个仓库虽然不算大,但仍然列出了 39 个 Chart。
4.3. 按 Chart 名称搜索
你可以直接指定仓库和 Chart 名称来精确查找:
$ helm search repo|hub <REPO_NAME>/<CHART_NAME>
例如,搜索 banzaicloud-stable
仓库中的 satellite
Chart:
$ helm search repo banzaicloud-stable/satellite
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/satellite 0.0.4 A Helm chart for satellite
这个命令返回了一个精确匹配的结果。
4.4. 使用关键词搜索
Helm 支持使用关键词进行模糊搜索,不一定要完全匹配 Chart 名称:
$ helm search repo sate
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/satellite 0.0.4 A Helm chart for satellite
即使没有指定仓库名或完整 Chart 名,也能匹配到结果。
你还可以根据描述信息进行搜索:
$ helm search repo Enterprise
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/pipeline-enterprise 0.23.0 0.23.0 Banzai Cloud Pipeline Enterprise platform.
banzaicloud-stable/pipeline 2.0.0 0.82.0 A Helm chart for Banzai Cloud Pipeline, a solut...
这个例子中,第二个结果的关键词出现在描述的隐藏部分。
4.5. 使用正则表达式搜索
如果你需要更灵活的匹配方式,可以使用 --regexp
参数:
$ helm search repo --regexp "sa....ite"
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/satellite 0.0.4 A Helm chart for satellite
这种方式特别适合在描述中进行模糊匹配。
4.6. 版本相关搜索
Helm 提供了多种与版本相关的搜索选项。
✅ 按具体版本搜索
$ helm search repo --version 0.0.4
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/aws-autoscaling-exporter 0.0.4 An aws autoscaling exporter Helm chart for Kube...
banzaicloud-stable/aws-spot-price-history-poller 0.0.4 AWS Spot Price History Poller
[...]
✅ 显示所有版本
使用 --versions
参数可以列出所有版本的 Chart:
$ helm search repo --versions
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/acquia-docs 1.0.1 1.0.1 Acquia docs
banzaicloud-stable/acquia-docs 1.0.0 1.0.0 Acquia docs
banzaicloud-stable/anchore-policy-validator 0.8.3 0.5.6 A Helm chart for anchore-policy-validator admis...
banzaicloud-stable/anchore-policy-validator 0.8.2 0.5.5 A Helm chart for anchore-policy-validator admis...
[...]
✅ 查看特定 Chart 的所有版本
$ helm search repo banzaicloud-stable/satellite --versions
NAME CHART VERSION APP VERSION DESCRIPTION
banzaicloud-stable/satellite 0.0.4 A Helm chart for satellite
banzaicloud-stable/satellite 0.0.3 A Helm chart for satellite
banzaicloud-stable/satellite 0.0.2 A Helm chart for satellite
这样你就能看到某个 Chart 的所有历史版本,方便选择合适的版本部署。
5. 总结
在本文中,我们介绍了 Helm Chart 的版本管理机制,以及如何通过 Helm 命令搜索、筛选和安装特定版本的 Chart。
✅ 关键点总结如下:
- Helm Chart 是 Kubernetes 的“包”,支持版本管理
- 使用
--version
可以安装特定版本 - 使用
helm search repo
和helm search hub
可以搜索 Chart - 支持关键词、正则表达式、版本号等多种搜索方式
- 使用
--versions
可以查看所有版本历史
虽然我们通常倾向于使用最新版本的 Chart,但在某些场景下,例如环境一致性要求较高时,通过版本筛选来部署特定版本的 Chart 是非常必要的。掌握这些技巧可以帮助你更好地管理 Helm Chart 的生命周期。