删除时会重新创建Kubernetes Pod


152

我已经用命令启动了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

2
您是否通过传递错误的参数设法创建了复制控制器。你得到kubectl get all -o name什么?
Graham Dumpleton '16

1
您可以检查kubectl get events一下是什么在创建这些对象吗?
阿尼鲁德·拉玛纳森

3
尝试kubctl get rc查看是否已创建ReplicationController。如果是这样,请将其删除,然后删除吊舱。
MrE

3
您正在运行什么版本的kubernetes?取决于您的kubernetes版本吗?它的行为可能有所不同。例如1.2之前,它总是创建部署。kubectl get deployment
lwolf

19
如果有人到此为止:-删除部署对我来说解决了这个问题。kubectl delete deployment <deployment_name>。要获得部署名称,请执行kubectl get deployments
Vasanth Sriram

Answers:


291

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

列出所有部署:

kubectl get deployments --all-namespaces

然后删除部署:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

其中NAMESPACE是它所在的名称空间,而DEPLOYMENT是该部署的名称空间name

在某些情况下,由于作业或守护程序集,它也可能正在运行。检查以下内容,然后运行其相应的delete命令。

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

1
之后如何恢复部署?
Jamey '18

1
@Jamey使用kubectl create命令再次创建它。
Illya Gerasymchuk '18

1
不需要是部署。可能是一份工作。因此,请务必检查一下kubectl get jobs
-bucky

要删除多个对象类型,而不仅仅是部署,请尝试:kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Noam Manos

19

而不是试图弄清楚这是一个部署,deamonset,statefulset ...还是什么(在我的情况下,它是一个复制控制器,它一直跨越新的pod :)为了确定是什么东西一直跨越了整个映像,我通过以下命令获得了所有资源:

kubectl get all

当然,您还可以从所有名称空间获取所有资源:

kubectl get all --all-namespaces

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

kubectl get all -n NAMESPACE_NAME

一旦看到复制控制器引起了我的麻烦,便将其删除:

kubectl delete replicationcontroller/CONTROLLER_NAME


14

如果您的窗格的名称为like name-xxx-yyy,它可以由一个名为copysetsets.apps控制的名称name-xxx,您应该在删除窗格之前首先删除该副本集。

kubectl delete replicasets.apps name-xxx


1
谢谢!就我而言,这是重新创建它的一项特定工作。因此:kubectl delete --all jobs -n <namespace>
yclian

使用kubectl get replicasets.apps -n <namespace>(或--all-namespaces)查找副本集
Noam Manos,

9

还要注意状态集

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

gitlab-gitaly在我身边。谢谢!这解决了。
凯文C

6

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

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


如果将策略类型设置为,则由部署,作业或任何其他类型的控制器创建的pod不能解决问题Recreate
SK Venkat

5

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

kubectl get pods,services, deployments, jobs

吊舱可以通过部署作业创建

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

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


5

这里有许多答案告诉您删除特定的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.

4

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

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


当我尝试这样做时,我会收到一条警告,提示说吊舱可能会像僵尸一样继续存在,所以这不是我想要的
。.– Chanoch


2

在完成了交互式教程之后,我最终得到了一堆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

1

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

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

kubectl delete job <job-name>


1

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

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

kubectl delete replicasets <Name of replicaset>

1

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

kubectl delete deployments DEPLOYMENT_NAME

但仍在重新创建Pod,因此我使用以下命令检查了副本集

kubectl get rs

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

kubectl edit rs REPICASET_NAME

1

提出该问题的根本原因是Deployment / job / replicasets spec属性strategy->type,该属性定义了将Pod(隐式或显式)销毁时应发生的情况。就我而言,是Recreate

按照@nomad的回答,删除部署/作业/副本案例是避免在使用新手将集群弄乱之前尝试使用致命连击的简单解决方案。

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

kubectl get all -A -o name
kubectl get events -A | grep <pod-name>

1

就我而言,我是通过类似的YAML文件进行部署的kubectl apply -f deployment.yaml,而解决方案似乎是通过kubectl delete -f deployment.yaml


0

我遇到了类似的问题:删除部署(kubectl delete deploy <name>)后,窗格保持“正在运行”状态,删除后自动在其中重新创建(kubectl delete po <name>)。

原来,由于某种原因并没有自动删除关联的副本集,并且删除该副本(kubectl delete rs <name>)后,可以删除吊舱。


0

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

该命令终止在指定位置运行的所有内容 <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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.