1. 简介

Helm 是 Kubernetes 环境中用于管理、组织和复用部署的包管理工具。Helm Chart 是其基本的打包单位,类似于其他系统的软件包。Chart 会根据部署环境和功能需求有所不同。有时我们希望安装特定版本的 Chart,避免使用某些版本;有时默认的 Chart 并不能满足我们的部署需求。

在本文中,我们将探讨 Helm Chart 的高级安装与管理技巧。我们会从启用自动补全开始,帮助你更高效地使用 Helm;接着介绍 Chart 的主要来源、如何列出可用 Chart 及其版本;最后重点讲解如何安装 Chart,包括稳定性控制、自定义配置和版本选择。

本文中的示例代码在 Debian 12 (Bookworm) 上测试通过,使用 GNU Bash 5.2.15 和 Helm 3.14。除非特别说明,应适用于大多数 POSIX 兼容环境。


2. Helm 自动补全

由于 Helm 的命令体系较为复杂,启用自动补全是提升效率的第一步。

Helm 提供了 completion 子命令,用于生成适用于不同 Shell 的自动补全脚本,包括:

  • bash
  • fish
  • zsh
  • powershell

以 Bash 为例,启用自动补全的方式如下:

$ source <(helm completion bash)

上述命令会生成一个脚本并加载到当前 Shell 环境中,之后输入 helm 命令时即可使用 Tab 键自动补全:

$ helm [Tab]
completion  (生成指定 Shell 的自动补全脚本)
create      (创建一个新的 Chart)
dependency  (管理 Chart 的依赖)
env         (显示 Helm 客户端环境信息)
get         (获取指定 release 的详细信息)
help        (帮助命令)
history     (查看 release 的历史记录)
install     (安装一个 Chart)
lint        (检查 Chart 是否存在问题)
list        (列出所有已部署的 release)
package     (将 Chart 目录打包成归档文件)
plugin      (安装、列出或卸载 Helm 插件)
pull        (从仓库下载 Chart 并可选解压)
push        (推送 Chart 到远程仓库)
registry    (登录或登出镜像仓库)
repo        (添加、列出、移除、更新和索引 Chart 仓库)
rollback    (将 release 回滚到之前的版本)
search      (搜索关键字相关的 Chart)
show        (显示 Chart 的信息)
status      (显示指定 release 的状态)
template    (本地渲染模板)
test        (运行 release 的测试)
uninstall   (卸载 release)
upgrade     (升级 release)
verify      (验证 Chart 是否已签名且有效)
version     (显示客户端版本信息)

不仅如此,补全还支持子命令和参数:

$ helm search [Tab]
hub   (在 Artifact Hub 或私有实例中搜索 Chart)
repo  (在已配置的仓库中搜索 Chart)

甚至可以补全命令参数:

$ helm search hub --[Tab]
[...]
--list-repo-url                  (输出 Chart 所在仓库的 URL)
--max-col-width                  (设置输出表格每列的最大宽度)
--namespace                      (为请求设置命名空间作用域)
--output                         (指定输出格式,如 table、json 等)
--qps                            (与 Kubernetes API 通信时的每秒请求数)
--repository-config              (指定包含仓库名称和 URL 的配置文件路径)

有了自动补全,我们可以在命令行中快速查看可用命令和参数,提升操作效率。


3. Artifact Hub 与仓库

Artifact Hub 是 Helm Chart 的集中仓库,目前既是默认仓库,也是 Kubernetes 包的发布、查找和安装平台。它替代了原先分散在互联网上的多个仓库,提供统一的界面和数据库。

虽然我们仍可使用私有仓库,但使用 Artifact Hub 这样的中心仓库可以简化 Chart 的管理和查找。

默认 Helm 安装即已配置了 Artifact Hub,我们可以直接搜索:

$ helm search hub | wc --lines
12254

可以看到,Artifact Hub 中包含了成千上万的 Chart。掌握搜索和浏览技巧,能极大提升部署效率。


4. 查看 Chart 及其版本

要查看 Artifact Hub 或已配置仓库中的 Chart 及其所有版本,可以使用 helm search 命令。

要列出所有仓库中 Chart 的所有版本,可以使用:

$ helm search repo --versions --max-col-width 100 --output=table
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        [...]
banzaicloud-stable/anchore-policy-validator  0.8.2          0.5.5        [...]
[...]

其中:

  • --versions 显示所有版本
  • --max-col-width 控制每列最大宽度
  • --output 设置输出格式(默认为 table)

⚠️ 注意:--versions 在使用 hub 源时不生效。但我们可以使用 --list-repo-url 来获取 Chart 所属仓库的 URL:

$ helm search hub --list-repo-url --max-col-width 100 --output=table
URL                                                              CHART VERSION  APP VERSION  DESCRIPTION  REPO URL
https://artifacthub.io/packages/helm/mya/12factor                24.1.2                      [...]        https://mya.sh
https://artifacthub.io/packages/helm/gabibbo97/389ds             0.1.0          fedora-32    [...]        https://gabibbo97.github.io/charts/
https://artifacthub.io/packages/helm/four-allportal/4allportal   20.0.1         3.10.38      [...]        https://4allportal.github.io/helm-charts
[...]

拿到 REPO URL 后,可以使用 helm repo add 添加仓库,并使用 helm search repo 查看版本。


5. Helm Chart 安装

Helm 本质上是 Kubernetes 的“包管理器”,因此“安装”通常等同于“部署”,这比安装 Linux 包要复杂得多。

标准安装命令如下:

$ helm install [NAME] [CHART] [flags]

⚠️ 注意:参数顺序很重要。

5.1. 安装名称

每个安装都需要一个名称,用于标识同一个 Chart 的不同部署。

可以通过以下方式指定:

  • 直接传入 NAME:helm install my-release stable/mychart
  • 使用 --generate-name 自动生成:helm install --generate-name stable/mychart

5.2. 安装源类型

Helm 支持多种安装源:

  • 仓库引用:<REPO_NAME>/<CHART_NAME>
  • Chart 包路径:.tgz.tar.gz
  • Chart 目录路径
  • URL:如 https://example.com/charts/mychart-1.0.0.tgz
  • OCI 地址:如 oci://example.com/charts/mychart

这意味着你可以不配置仓库,直接安装某个远程 Chart。

5.3. 自定义安装

Helm 提供多种方式在安装时覆盖默认值:

  • --set: 覆盖值
  • --set-string: 覆盖字符串值
  • --set-literal: 覆盖字面字符串值
  • --set-json: 覆盖 JSON 格式的值
  • --set-file: 为每个值指定文件
  • --values-f: 指定 YAML 文件或 URL 覆盖值

通过这些参数,我们可以灵活定制部署配置。

5.4. 原子化部署

Chart 通常包含多个相互依赖的组件。若其中一部分失败,整个部署可能不可用。

因此,生产环境建议使用 --atomic 标志:

$ helm install [...] --atomic

✅ 优点:

  • 安装失败时自动回滚,确保集群状态一致
  • --atomic 会隐式启用 --wait,等待所有资源(如 Pod、PVC、Service)就绪
  • 安装超时可由 --timeout 控制

5.5. 钩子(Hooks)

Helm Chart 可以包含安装钩子脚本(如 Job、ConfigMap 等),用于执行初始化或清理任务。但在某些情况下,这些钩子可能导致重复执行问题。

使用 --no-hooks 可跳过所有钩子:

$ helm install [...] --no-hooks

✅ 场景:升级前测试、避免重复初始化等。

5.6. Dry Run(试运行)

在正式部署前,使用 --dry-run 可以预览部署内容:

$ helm install --dry-run [...]

默认不连接集群,仅渲染模板。也可指定 --dry-run=server 来测试集群连接。

示例:

$ helm install --dry-run satellite banzaicloud-stable/satellite
NAME: satellite
LAST DEPLOYED: Sun Mar  3 03:03:24 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: satellite/templates/service.yaml
[...]

可以看到每个资源文件内容,提前发现潜在问题。

5.7. 安装特定版本

默认 Helm 安装最新版本,但你可以通过 --version 指定版本:

$ helm install --version ^6.6.6 [...]

上面的 ^6.6.6 表示安装第一个大于等于 6.6.6 的版本。

查看可用版本:

$ helm search repo 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

安装特定版本:

$ helm install banzaicloud-stable/satellite --generate-name --version 0.0.3
NAME: satellite-1709716660
LAST DEPLOYED: Sun Mar  3 03:03:24 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

确认安装版本:

$ helm list
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS        CHART           APP VERSION
satellite-1709716660    default         1               2024-03-03 03:03:24.036660758 -0500 EST deployed      satellite-0.0.3

6. 小结

本文介绍了 Helm Chart 的高级使用方法,包括:

  • 启用自动补全提高效率
  • 使用 Artifact Hub 和仓库管理 Chart
  • 列出 Chart 及其所有版本
  • 安装 Chart 时的多种源支持、自定义配置、原子化部署、钩子控制和试运行
  • 指定版本安装

虽然 Helm Chart 本身已经尽可能简化了部署流程,但在实际使用中,灵活使用这些高级功能可以极大提升部署的稳定性和可维护性。


原始标题:Advanced Helm Chart Handling and Installation