229

我已经用命令启动了 pod

$ kubectl run busybox \
--image=busybox \
--restart=Never \
--tty \
-i \
--generator=run-pod/v1

出了点问题,现在我无法删除它Pod

我尝试使用下面描述的方法,但Pod不断重新创建。

$ kubectl delete pods  busybox-na3tm
pod "busybox-na3tm" deleted

$ kubectl get pods
NAME                                     READY     STATUS              RESTARTS   AGE
busybox-vlzh3                            0/1       ContainerCreating   0          14s

$ kubectl delete pod busybox-vlzh3 --grace-period=0

$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted

$ kubectl get pods --all-namespaces
NAMESPACE   NAME            READY     STATUS              RESTARTS   AGE
default     busybox-c9rnx   0/1       RunContainerError   0          23s
4

21 回答 21

422

您需要删除部署,这又会删除 pod 和副本集https://github.com/kubernetes/kubernetes/issues/24137

列出所有部署:

kubectl get deployments --all-namespaces

然后删除部署:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

其中 NAMESPACE 是它所在的命名空间,而 DEPLOYMENT 是部署的名称。如果 NAMESPACE 是default,则完全放弃该-n选项。

在某些情况下,它也可能由于作业或守护程序集而运行。检查以下内容并运行相应的删除命令。

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces
于 2017-05-30T23:10:07.427 回答
37

而不是试图弄清楚它是部署,deamonset,statefulset ...还是什么(在我的情况下,它是一个不断跨越新pod的复制控制器:) 为了确定它是什么不断跨越图像我使用此命令获取所有资源:

kubectl get all

当然,您也可以从所有命名空间中获取所有资源:

kubectl get all --all-namespaces

或定义您要检查的命名空间:

kubectl get all -n NAMESPACE_NAME

一旦我看到复制控制器是造成我的麻烦的原因,我就删除了它:

kubectl delete replicationcontroller/CONTROLLER_NAME
于 2019-02-26T16:05:36.150 回答
19

如果你的 pod 有 name like name-xxx-yyy,它可以由一个replicasets.appsnamed控制name-xxx,你应该replicaset在删除 pod 之前先删除它:

kubectl delete replicasets.apps name-xxx
于 2018-07-12T09:26:31.960 回答
12

也要注意有状态的集合

kubectl get sts --all-namespaces

删除命名空间中的所有有状态集

kubectl --namespace <yournamespace> delete sts --all

将它们一一删除

kubectl --namespace ag1 delete sts mssql1 
kubectl --namespace ag1 delete sts mssql2
kubectl --namespace ag1 delete sts mssql3
于 2019-01-31T13:08:19.663 回答
9

这将提供有关命名空间中所有 pod、部署、服务和作业的信息。

kubectl get pods,services,deployments,jobs

pod 可以通过部署作业创建

kubectl delete job [job_name]
kubectl delete deployment [deployment_name]

如果您删除部署或作业,则可以停止重新启动 pod。

于 2019-03-15T23:03:35.630 回答
9

这里的许多答案告诉删除特定的 k8s 对象,但您可以一次删除多个对象,而不是一个一个地删除:

kubectl delete deployments,jobs,services,pods --all -n <namespace>

就我而言,我正在使用 OLM - Operator Lifecycle Manager运行OpenShift集群。OLM 是控制部署的人,所以当我删除部署时,阻止 Pod 重新启动是不够的。

只有当我删除OLM及其订阅时,部署、服务和 Pod 才消失。

首先列出命名空间中的所有 k8s 对象:

$ kubectl get all -n openshift-submariner

NAME                                       READY   STATUS    RESTARTS   AGE
pod/submariner-operator-847f545595-jwv27   1/1     Running   0          8d  
NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/submariner-operator-metrics   ClusterIP   101.34.190.249   <none>        8383/TCP   8d
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/submariner-operator   1/1     1            1           8d
NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/submariner-operator-847f545595   1         1         1       8d

OLM 没有与 一起列出get all,所以我专门搜索它:

$ kubectl get olm -n openshift-submariner

NAME                                                      AGE
operatorgroup.operators.coreos.com/openshift-submariner   8d
NAME                                                             DISPLAY      VERSION
clusterserviceversion.operators.coreos.com/submariner-operator   Submariner   0.0.1 

现在删除所有对象,包括 OLM、订阅、部署、副本集等:

$ kubectl delete olm,svc,rs,rc,subs,deploy,jobs,pods --all -n openshift-submariner

operatorgroup.operators.coreos.com "openshift-submariner" deleted
clusterserviceversion.operators.coreos.com "submariner-operator" deleted
deployment.extensions "submariner-operator" deleted
subscription.operators.coreos.com "submariner" deleted
service "submariner-operator-metrics" deleted
replicaset.extensions "submariner-operator-847f545595" deleted
pod "submariner-operator-847f545595-jwv27" deleted

再次列出对象 - 全部消失:

$ kubectl get all -n openshift-submariner
No resources found.

$ kubectl get olm -n openshift-submariner
No resources found.
于 2019-11-20T11:37:02.053 回答
7

显然有些东西正在重生豆荚。虽然许多其他答案让您查看所有内容(副本集、作业、部署、有状态集......)以查找可能重新生成 pod 的内容,但您可以改为查看 pod 以查看生成它的内容。例如做:

$ kubectl describe pod $mypod | grep 'Controlled By:'
Controlled By:  ReplicaSet/foobar

这会告诉你究竟是什么创建了 pod。然后你可以去删除它。

于 2021-03-09T03:08:08.277 回答
6

在学习了一个交互式教程后,我最终得到了一堆 pod、服务、部署:

me@pooh ~ > kubectl get pods,services
NAME                                       READY   STATUS    RESTARTS   AGE
pod/kubernetes-bootcamp-5c69669756-lzft5   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-n947m   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-s2jhl   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-v8vd4   1/1     Running   0          43s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   37s
me@pooh ~ > kubectl get deployments --all-namespaces
NAMESPACE     NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default       kubernetes-bootcamp   4         4         4            4           1h
docker        compose               1         1         1            1           1d
docker        compose-api           1         1         1            1           1d
kube-system   kube-dns              1         1         1            1           1d

清理一切,delete --all工作正常:

me@pooh ~ > kubectl delete pods,services,deployments --all
pod "kubernetes-bootcamp-5c69669756-lzft5" deleted
pod "kubernetes-bootcamp-5c69669756-n947m" deleted
pod "kubernetes-bootcamp-5c69669756-s2jhl" deleted
pod "kubernetes-bootcamp-5c69669756-v8vd4" deleted
service "kubernetes" deleted
deployment.extensions "kubernetes-bootcamp" deleted

这给我留下了(我认为是)一个空的 Kubernetes 集群:

me@pooh ~ > kubectl get pods,services,deployments
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   8m
于 2019-02-07T00:48:03.830 回答
5

在某些情况下,即使删除部署,pod 仍然不会消失。在这种情况下,要强制删除它们,您可以运行以下命令。

kubectl delete pods podname --grace-period=0 --force

于 2018-03-14T00:27:17.693 回答
4

即使在手动删除 pod 后,pod 仍会自动重新创建,则这些 pod 已使用部署创建。创建部署时,它会自动创建 ReplicaSet 和 Pod。根据您在部署脚本中提到的 pod 副本的数量,它最初会创建这些数量的 pod。当您尝试手动删除任何 pod 时,它会自动再次创建这些 pod。

是的,有时您需要强制删除 pod。但在这种情况下,强制命令不起作用。

于 2018-03-14T01:56:49.430 回答
4

您可以尝试删除 replicaSet 而不是删除 NS

kubectl get rs --all-namespaces

然后删除replicaSet

kubectl delete rs your_app_name
于 2019-01-07T17:10:33.487 回答
1

如果您有继续运行的作业,则需要搜索该作业并将其删除:

kubectl get job --all-namespaces | grep <name>

kubectl delete job <job-name>

于 2019-02-07T14:14:33.860 回答
1

您可以kubectl get replicasets根据年龄或时间检查旧部署

如果要删除当前正在运行的应用程序 pod,请根据时间删除旧部署

kubectl delete replicasets <Name of replicaset>
于 2019-06-18T11:32:01.013 回答
1

我也遇到了这个问题,我使用下面的命令来删除部署。

kubectl delete deployments DEPLOYMENT_NAME

但仍然 pods 正在重新创建,所以我使用以下命令交叉检查了 Replica Set

kubectl get rs

然后将副本集编辑为 1 到 0

kubectl edit rs REPICASET_NAME
于 2019-08-20T09:46:25.863 回答
1

问题的根本原因是部署/作业/replicasets 规范属性strategy->type,它定义了当 pod 被销毁(隐式或显式)时应该发生什么。在我的情况下,它是Recreate.

根据@nomad 的回答,删除部署/作业/副本是避免在作为新手用户弄乱集群之前尝试致命组合的简单解决方法。

在进行调试之前,请尝试以下命令以了解幕后操作:

kubectl get all -A -o name
kubectl get events -A | grep <pod-name>
于 2019-08-27T05:26:15.920 回答
1

在我的情况下,我通过 YAML 文件进行部署,例如kubectl apply -f deployment.yaml,解决方案似乎是通过删除kubectl delete -f deployment.yaml

于 2019-11-15T12:57:03.427 回答
1

对于具有状态集(或服务、作业等)的部署,您可以使用以下命令:

此命令终止在指定范围内运行的任何内容<NAMESPACE>

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all

并且有力

kubectl -n <NAMESPACE> delete replicasets,deployments,jobs,service,pods,statefulsets --all --cascade=true --grace-period=0 --force
于 2020-06-20T15:31:45.160 回答
1

删除PODS基本上有两种方法

  1. kubectl scale --replicas=0 部署 name_of_deployment。这会将副本数设置为 0,因此不会再次重新启动 pod。
  2. 使用 helm 卸载您在管道中实现的图表。不要直接删除部署,而是使用 helm 卸载图表,这将删除它创建的所有对象。
于 2021-10-04T10:58:19.817 回答
0

kubectl delete deploy <name>我遇到了类似的问题:删除部署kubectl delete po <name>

事实证明,关联的副本集由于某种原因没有自动删除,在删除该 ( kubectl delete rs <name>) 之后,可以删除 pod。

于 2020-03-23T11:54:13.580 回答
0

这在我身上发生了一些损坏的“掌舵”安装。您的部署可能有点混乱。如果前面的建议都不起作用,请查找守护程序集并将其删除。

例如 kubectl get daemonset --namespace

然后删除守护进程

kubectl delete daemonset --namespace <NAMESPACE> --all --force

然后尝试删除 pod。

kubectl delete pod --namespace  <NAMESPACE> --all --force

检查豆荚是否消失。

kubectl get pods --all-namespaces
于 2021-05-17T06:48:38.683 回答
0

对我来说最快的解决方案是安装 Lens IDE 并删除 de DEPLOYMENTS 选项卡下的服务。只需从此选项卡中删除,副本也将被删除。

最好的祝福

于 2022-02-17T12:30:19.453 回答