首页 > 解决方案 > 无法删除 Kubernetes 中的所有 pod - 清除/重新启动 Kubernetes

问题描述

我正在尝试删除/删除在我的环境中运行的所有 pod。当我发出

码头工人ps

我得到以下输出。这是一个示例屏幕截图。如您所见,它们都是K8s。我想删除所有 pod/删除它们。

在此处输入图像描述

我尝试了以下所有方法,但它们一次又一次地出现

sudo kubectl delete --all pods --namespace=default/kube-public #returns "no resources found" for both default and kube-public namespaces
sudo kubectl delete --all pods --namespace=kube-system # shows "pod xxx deleted"

在此处输入图像描述

sudo kubectl get deployments # returns no resources found

除了上述之外,我还尝试使用容器 ID,但它们要么重生docker stopdocker rm我想清除所有这些。我想从头开始

我已经多次注销并重新登录,但我仍然看到这些项目。

你能帮我删除所有的 pod,我希望“docker ps”的输出没有任何与 kubernetes 相关的项目,如上所示?

标签: dockerkubernetesgoogle-kubernetes-enginekubernetes-helmkubernetes-pod

解决方案


sudo kubectl get deployments # returns no resources found

Deployments不是 Kubernetes 中唯一可以管理 Pod 的控制器。有很多: StatefulSet, ReplicaSet, 等等 (查看控制器文档了解详情)

简而言之,Controller 负责确保其管理的所有 Pod 都在运行,并在必要时创建它们 - 当您删除所有 Pod 时,关联的 Controller 将意识到它们已丢失并简单地重新创建它们以确保其符合其规范。

如果要有效删除所有 Pod,则应删除所有相关 Controller(或更新它们以将其副本设置为 0),例如:

# do NOT run this in the kube-system namespace, it may corrupt your cluster
# You can also specify --namespace xxx to delete in a specific namespace
kubectl delete deployment --all # configures ReplicaSets, deleting Deployments should delete ReplicaSet as well as associated Pods
kubectl delete statefulset --all
kubectl delete daemonset --all 
kubectl delete job --all
kubectl delete cronjob --all 
kubectl delete replicationcontroller --all # their should not be any ReplicationController as Deployment should be used
# Then delete what you find

编辑:正如P Emkambaram回答所提到的,您还可以删除整个命名空间kubectl delete namespace mynamespace(当然不要删除kube-system),但它也可能删除命名空间中的其他组件,例如服务


重要笔记:

  • kube-system在删除命名空间中与集群本身的内部管道相关的Pod 或对象时,您还应该小心。
  • 您不应该通过使用命令删除其底层容器来直接删除 Kubernetes 组件docker,这可能会产生意想不到的效果,请kubectl改用。

推荐阅读