helm uninstall、helm delete和kubectl delete有什么区别

What's the difference between helm uninstall, helm delete and kubectl delete

我想删除使用 helm install 部署到集群的 pod。

我使用了 3 种方法:

  1. helm uninstall <release name> -> 从集群和 helm 列表中删除 pod
  2. helm delete <release name> -> 从集群和 helm 列表中删除 pod
  3. kubectl delete -n <namespace> deploy <deployment name> -> 从集群中删除 pod,但不从 helm 列表中删除

它们有什么区别? 一种做法比另一种更好吗?

helm deletehelm uninstall 的别名,您可以在检查 --help 语法时看到这一点:

$ helm delete --help
...
Usage:
  helm uninstall RELEASE_NAME [...] [flags]

kubectl delete ... 只是删除集群中的资源。

执行helm uninstall ... 不仅会删除 pod,还会删除 helm 在安装图表时创建的所有资源。对于单个 pod,这可能与使用 kubectl delete... 没有任何不同,但是当您有数十或数百个不同的资源和依赖图表时,通过执行 kubectl delete... 手动完成所有这些变得很麻烦,time-consuming 和 error-prone.

一般来说,如果您要从群集中删除某些内容,请使用与最初安装它时相同的方法。如果您使用 helm 将其安装到集群中,请使用 helm 将其删除。如果您使用 kubectl createkubectl apply,请使用 kubectl delete 将其删除。

我再补充一点,我们用的挺多的。 helm uninstall/install/upgradehooks 附加到它的生命周期。这很重要,这里有一个小例子。

我们有 运行 作为 a job 一部分的数据库脚本。假设您准备了一个版本 1.2.3 的版本,并且作为该版本的一部分,您在 table 中添加了一列 - 您有一个脚本(liquibase/flyway 无论如何)将 运行 在安装图表时自动。在这种情况下,用简单的英语 helm install 可以说:“在安装代码之前,升级数据库模式”。这太棒了,可以让您将此类脚本的生命周期与图表的生命周期联系起来。

同样适用于降级,你可以说当你降级时,还原架构,或采取任何需要的行动。 kubectl delete根本就没有这样的功能