【问题标题】:What's the difference between helm uninstall, helm delete and kubectl deletehelm uninstall、helm delete 和 kubectl delete 有什么区别
【发布时间】:2023-02-20 16:28:43
【问题描述】:
我想删除我使用 helm install 部署到集群的 pod。
我使用了 3 种方法来做到这一点:
-
helm uninstall <release name> -> 从集群和 helm 列表中删除 pod
-
helm delete <release name> -> 从集群和 helm 列表中删除 pod
-
kubectl delete -n <namespace> deploy <deployment name> -> 从集群中删除 pod,但不从 helm 列表中删除
它们之间有什么区别?
一种做法比另一种更好吗?
【问题讨论】:
标签:
kubernetes
kubernetes-helm
kubectl
【解决方案1】:
helm delete 是helm uninstall 的别名,您可以在检查--help 语法时看到这一点:
$ helm delete --help
...
Usage:
helm uninstall RELEASE_NAME [...] [flags]
kubectl delete ... 只是删除集群中的资源。
helm uninstall ... 不仅会删除 pod,还会删除 helm 在安装图表时创建的所有资源。对于单个 pod,这可能与使用 kubectl delete... 没有任何不同,但是当您有数十或数百个不同的资源和依赖图表时,通过 kubectl delete... 手动完成所有这些操作变得麻烦、耗时且容易出错。
通常,如果您要从集群中删除某些内容,请使用与最初安装它时相同的方法。如果您使用 helm 将其安装到集群中,请使用 helm 将其删除。如果您使用了kubectl create 或kubectl apply,请使用kubectl delete 将其删除。
【解决方案2】:
我将添加一个我们使用的点,相当多。 helm uninstall/install/upgrade有挂钩附加到它的生命周期。这很重要,这里有一个小例子。
我们有作为a job 的一部分运行的数据库脚本。假设您准备了一个版本为 1.2.3 的版本,并且作为该版本的一部分,您在表中添加了一列 - 您有一个脚本(liquibase/flyway 等),该脚本将在安装图表时自动运行。用简单的英语 helm install 允许你在这种情况下说:“在安装代码之前,升级数据库模式”。这太棒了,可以让您将此类脚本的生命周期与图表的生命周期联系起来。
这同样适用于降级,您可以说当您降级、还原架构或采取任何需要的操作时。 kubectl delete根本就没有这样的功能。
【解决方案3】:
对我来说,这是同一件事:uninstall, del, delete, and un 掌舵(检查别名):
$ helm del --help
此命令采用版本名称并卸载该版本。
它删除与图表的最后一个版本关联的所有资源
以及发布历史,释放它以供将来使用。
使用“--dry-run”标志查看哪些版本将被卸载而不实际
卸载它们。
用法:
helm uninstall RELEASE_NAME [...] [标志]
别名:
uninstall, del, 删除, un
【解决方案4】:
Helm delete 是较旧的命令,现在已被 helm uninstall 取代。该命令基本上卸载了之前使用 helm install/upgrade 部署的 helm chart 中的所有资源。
Kubectl delete 将只删除资源,如果它是由 helm chart 部署的,它将再次重新部署。因此,如果您想重新部署 pod 或删除未使用 helm chart 方法部署的资源,这些命令很有用。