从 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 边缘节点抓不到监控指标?试试这个方法!