1. Helm 仓库简介

Helm 是 Kubernetes 的一个包管理工具,类似于 Linux 系统中的 apt 或 yum。它通过“仓库(Repository)”的形式组织和管理可复用的部署模板(称为 Chart)。

Helm 仓库是一个本地或远程的目录,其结构遵循特定规范,通常包含以下三类内容:

  • 签名文件(provenance)
  • Chart 包(packages)
  • 索引文件(index.yaml)

要使用某个仓库中的 Chart,我们首先需要将其添加到 Helm 中:

$ helm repo add <仓库名> <仓库地址>

例如:

$ helm repo add gabe565 https://charts.gabe565.com
"gabe565" has been added to your repositories
$ helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com
"banzaicloud-stable" has been added to your repositories

添加完成后,更新本地缓存:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "gabe565" chart repository
...Successfully got an update from the "banzaicloud-stable" chart repository
Update Complete. ⎈Happy Helming!⎈

此时我们就可以使用这些仓库中的 Chart 安装应用了。


2. Helm 发布版本(Release)

Helm Chart 是部署模板,而 Release 是 Chart 的一次实例化结果,就像 Docker 镜像是模板,容器是其实例一样。

每个 Release 可以部署在特定的命名空间中。我们先创建几个命名空间用于演示:

$ kubectl create namespace entertainment
$ kubectl create namespace development
$ kubectl create namespace storage

然后安装几个 Release:

$ helm install ascii-movie gabe565/ascii-movie --namespace entertainment
$ helm install nodex banzaicloud-stable/nodejs --namespace development
$ helm install snap banzaicloud-stable/thanos --namespace storage

这样我们就有了三个部署在不同命名空间中的 Release。


3. 查看所有 Helm 发布版本

使用 helm list 可以查看当前集群中所有 Release:

$ helm list --all --all-namespaces
NAME          NAMESPACE       REVISION   UPDATED                                   STATUS     CHART                APP VERSION
ascii-movie   entertainment   1          2024-02-25 15:02:00.392981879 -0500 EST   deployed   ascii-movie-0.13.2   1.7.2
nodex         development     1          2024-02-25 15:06:56.1120554 -0500 EST     deployed   nodejs-0.1.1
snap          storage         1          2024-02-25 15:06:57.964318927 -0500 EST   deployed   thanos-0.4.9         0.28.1

Helm 3 及以上版本默认按命名空间隔离,因此要查看所有 Release,必须加上 --all-namespaces 参数。

我们也可以查看某个 Release 的详细状态:

$ helm status ascii-movie --namespace entertainment

4. 删除所有 Helm 发布版本

4.1 使用 helm delete

删除单个 Release 的命令如下:

$ helm delete <release-name> --namespace <namespace>

在 Helm 3 之前,可以使用 --purge 参数彻底删除:

$ helm delete $(helm list --all --short) --purge

但在 Helm 3 及以上版本中,必须指定命名空间才能删除非默认命名空间下的 Release

一个通用的删除所有 Release 的命令如下:

$ helm list --all --all-namespaces | awk 'NR > 1 { print "--namespace "$2, $1}' | xargs --max-lines=1 helm delete

这段命令的逻辑如下:

  • helm list 列出所有 Release
  • awk 提取命名空间和 Release 名
  • xargs 将每行参数传给 helm delete

优点:适用于 Helm 3+,无需插件
缺点:依赖 shell 命令,需注意权限和误操作风险

4.2 使用插件(helm-delete-all)

Helm 支持通过插件扩展功能。例如安装 helm-delete-all 插件:

$ helm plugin install https://github.com/BarelElbaz/helm-delete-all
Installed plugin: delete-all

安装完成后,直接使用命令删除所有 Release:

$ helm delete-all

⚠️ 注意:插件可能因 Helm 版本升级而失效,建议了解其底层逻辑后再使用。


5. 小结

本文介绍了 Helm 仓库的基本结构和使用方式,以及如何删除所有 Helm Release。

总结如下

项目 内容
仓库作用 存放 Chart 包,用于部署应用
Release Chart 的一次部署实例
删除方式 helm delete + 命名空间,或使用 awk + xargs 批量删除
插件使用 可使用 helm-delete-all,但需注意兼容性

Helm 是 Kubernetes 中非常强大的部署工具,合理使用仓库和命令能极大提升运维效率。不过在删除操作时要格外小心,避免误删重要服务。


原始标题:Helm Repositories and How to Delete All Releases