从 Kubernetes 节点中删除所有内容

Posted

技术标签:

【中文标题】从 Kubernetes 节点中删除所有内容【英文标题】:Delete all the contents from a kubernetes node 【发布时间】:2018-06-13 03:50:56 【问题描述】:

如何从 kubernetes 节点中删除所有内容? 内容包括部署、副本集等。我尝试单独删除部署。但是 kubernetes 会再次重新创建所有 pod。 有没有办法删除节点中存在的所有副本集?

【问题讨论】:

【参考方案1】:

如果你正在测试东西,最简单的方法是

kubectl delete deployment --all

如果您使用的是 minikube,最简单的方法可能是删除机器并使用新节点重新开始

minikube delete
minikube start

如果我们谈论的是生产集群,Kubernetes has a built-in feature to drain a node of the cluster,会安全地从该节点移除所有对象。

在对节点执行维护之前,您可以使用 kubectl drain 安全地从节点中驱逐所有 pod。安全驱逐允许 pod 的容器优雅地终止,并将遵守您指定的 PodDisruptionBudgets。

注意:默认kubectl drain会忽略节点上某些无法被杀死的系统pod;有关详细信息,请参阅 kubectl drain 文档。

kubectl drain 成功返回时,这表明所有 pod(除了上一段中描述的排除的那些)都已被安全驱逐(遵守所需的优雅终止期,并且没有违反任何应用程序级中断 SLO )。然后,通过关闭其物理机或如果在云平台上运行,删除其虚拟机来关闭节点是安全的。

首先,确定要排空的节点的名称。您可以使用

列出集群中的所有节点
kubectl get nodes

接下来,告诉 Kubernetes 清空节点:

kubectl drain <node name>

一旦它返回(没有给出错误),您可以关闭节点(或者等效地,如果在云平台上,删除支持该节点的虚拟机)。 drain 等待优雅终止。在命令完成之前,您不应在机器上进行操作。

如果在维护操作期间将节点留在集群中,则需要运行

kubectl uncordon <node name>

然后告诉 Kubernetes 它可以继续将新的 Pod 调度到节点上。

请注意,如果有任何 Pod 不受 ReplicationController、ReplicaSet、DaemonSet、StatefulSet 或 Job 管理,那么drain 不会删除任何 Pod,除非您使用 --force、as mentioned in the docs。

kubectl drain <node name> --force

【讨论】:

嗨,实际上,当我应用 kubectl uncordon 命令时,Kuberntes 重新启动了所有旧 pod。这意味着 pod 没有被删除。他们只是停止执行。我希望从节点中永久删除所有内容。有什么帮助吗? 我猜你有一个单节点集群? kubernetes 调度程序将在作为集群一部分的可用节点上调度(即“启动”)pod,直到达到部署所需的副本数量。如果节点可用于安排新对象,则您无法从节点中删除所有内容,这就是我们使用警戒线/排水管的原因。因此,如果您只有一个节点,调度程序将重新创建对象,直到达到所需的副本数量。为什么要从节点中删除所有内容? 是的,它是一个节点集群。我使用了 Minikube。我为学习目的创建了许多部署。最近维护这些部署对我来说真的很难。所以我决定清理一切。 您能告诉我您是如何创建这些部署的吗?通常,kubectl delete deployment --all 应该做你想做的事。 我使用 yaml 文件来创建部署。然后运行 ​​kubectl create 命令。【参考方案2】:
minikube delete --all 

如果您使用的是 minikube

它将让您启动一个新的干净集群。


如果你在 Kubernetes 上运行:

kubectl delete pods,deployments -A --all

它将从所有命名空间中删除它,您可以在同一命令中添加更多对象。

【讨论】:

【参考方案3】:

Kubenertes 提供命名空间对象用于隔离和关注点分离。因此,建议在自定义命名空间中应用所有 k8s 资源对象(Deployment、ReplicaSet、Pods、Services 等)。

现在如果你想删除所有相关和相关的 k8s 资源,你只需要删除将删除所有这些资源的命名空间。

kubectl create namespace custom-namespace
kubectl create -f deployment.yaml --namespace=custom-namespace
kubectl delete namespaces custom-namespace

我附上了一个链接供进一步研究。

Namespaces

【讨论】:

我照你说的做了。但是 pod 正在重新创建。 嗨 Mufeed,据我了解,如果我创建一个命名空间“my-ns”,然后在 my-ns 命名空间中应用部署和服务。如果我删除 my-ns 命名空间,最终所有资源都会被删除。它总是有效的。如果您可以在命名空间 kubectl get all -n my-ns 中显示资源。我们可以解决它【参考方案4】:

我尝试了很多变体来从教程中删除旧的 pod,包括 here 的所有内容。

最终对我有用的是:

kubectl delete replicaset --all

一次删除一个似乎不起作用;只有使用 --all 标志,所有 pod 都被删除而不重新创建。

【讨论】:

以上是关于从 Kubernetes 节点中删除所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes_14_静态Pod网关apiserver底层都是restful接口

Kubernetes 边缘节点抓不到监控指标?试试这个方法!

kubernetes集群安装指南:master组件kube-scheduler部署

从零搭建kubernetes v1.18.6集群

从零搭建kubernetes v1.18.6集群

[K8s]Kubernetes-工作负载(下)