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
列出所有 Releaseawk
提取命名空间和 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 中非常强大的部署工具,合理使用仓库和命令能极大提升运维效率。不过在删除操作时要格外小心,避免误删重要服务。