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

lio*_*r.i 12 kubernetes kubectl kubernetes-helm

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

我使用了 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 列表中删除

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

Ble*_*Fox 25

helm delete是一个别名helm uninstall,当你检查语法时你可以看到这一点--help

$ helm delete --help
...
Usage:
  helm uninstall RELEASE_NAME [...] [flags]
Run Code Online (Sandbox Code Playgroud)

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

这样做helm uninstall ... 不仅会删除 pod,还会删除 helm 在安装图表时创建的所有资源。对于单个 Pod,这可能与使用没有任何不同kubectl delete...,但是当您有数十或数百个不同的资源和依赖图表时,手动完成所有这些操作kubectl delete...会变得麻烦、耗时且容易出错。

一般来说,如果您要从集群中删除某些内容,请使用与最初安装它相同的方法。也就是说,如果您使用helm installhelm upgrade --install将其安装到集群中,请使用helm uninstall将其删除(或者helm delete --purge如果您仍在运行 Helm v2);如果您使用了kubectl createkubectl apply,请使用kubectl delete将其删除。


Eug*_*ene 7

我会添加一个我们经常使用的点。其生命周期helm uninstall/install/upgrade有附加的钩子。这很重要,这是一个小例子。

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

这同样适用于降级,您可以说当您降级、恢复架构或采取任何所需的操作时。kubectl delete根本不具备这样的功能。