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 repohelm search hub 可以搜索 Chart
  • 支持关键词、正则表达式、版本号等多种搜索方式
  • 使用 --versions 可以查看所有版本历史

虽然我们通常倾向于使用最新版本的 Chart,但在某些场景下,例如环境一致性要求较高时,通过版本筛选来部署特定版本的 Chart 是非常必要的。掌握这些技巧可以帮助你更好地管理 Helm Chart 的生命周期。


原始标题:Helm Chart Searching and Versioning