【发布时间】:2018-06-13 03:50:56
【问题描述】:
如何从 kubernetes 节点中删除所有内容?
内容包括部署、副本集等。我尝试单独删除部署。但是 kubernetes 会再次重新创建所有 pod。
有没有办法删除节点中存在的所有副本集?
【问题讨论】:
标签: kubernetes containers replication
如何从 kubernetes 节点中删除所有内容?
内容包括部署、副本集等。我尝试单独删除部署。但是 kubernetes 会再次重新创建所有 pod。
有没有办法删除节点中存在的所有副本集?
【问题讨论】:
标签: kubernetes containers replication
如果你正在测试东西,最简单的方法是
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 delete deployment --all 应该做你想做的事。
minikube delete --all
如果您使用的是 minikube
它将让您启动一个新的干净集群。
如果你在 Kubernetes 上运行:
kubectl delete pods,deployments -A --all
它将从所有命名空间中删除它,您可以在同一命令中添加更多对象。
【讨论】:
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
我附上了一个链接供进一步研究。
【讨论】:
kubectl get all -n my-ns 中显示资源。我们可以解决它
我尝试了很多变体来从教程中删除旧的 pod,包括 here 的所有内容。
最终对我有用的是:
kubectl delete replicaset --all
一次删除一个似乎不起作用;只有使用 --all 标志,所有 pod 都被删除而不重新创建。
【讨论】: