删除后,Kubernetes pod会重新创建

yma*_*man 108 kubernetes kubectl

我已经用命令启动了pods

$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1
Run Code Online (Sandbox Code Playgroud)

出了点问题,现在我无法删除这个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
Run Code Online (Sandbox Code Playgroud)

nom*_*mad 198

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

列出所有部署:

kubectl get deployments --all-namespaces
Run Code Online (Sandbox Code Playgroud)

然后删除部署:

kubectl delete -n NAMESPACE deployment DEPLOYMENT
Run Code Online (Sandbox Code Playgroud)

NAMESPACE是其所在的命名空间,而DEPLOYMENT是部署的命名空间name.

  • @Jamey,您使用“kubectl create”命令再次创建它。 (2认同)
  • 要删除多个对象类型,而不仅仅是部署,请尝试:“kubectl deletereplicets,subscriptions,deployments,jobs,services,pods --all -n <namespace>” (2认同)

Pat*_*ick 20

显然有东西正在重生 Pod。虽然许多其他答案要求您查看所有内容(副本集、作业、部署、有状态集等)来查找可能会重生 pod 的内容,但您可以只查看 pod 来查看生成它的内容。例如:

$ kubectl describe pod $mypod | grep 'Controlled By:'
Controlled By:  ReplicaSet/foobar
Run Code Online (Sandbox Code Playgroud)

这会准确地告诉您 pod 的创建内容。然后你可以去删除它。


Hie*_* Vo 14

如果您的pod具有类似名称name-xxx-yyy,它可以由名为replicasets.apps控制name-xxx,您应该在删除pod之前先删除该复制集

kubectl delete replicasets.apps name-xxx


Daw*_*yca 10

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

kubectl get all

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

kubectl get all --all-namespaces

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

kubectl get all -n NAMESPACE_NAME

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

kubectl delete replicationcontroller/CONTROLLER_NAME


小智 7

还要注意状态集

kubectl get sts --all-namespaces
Run Code Online (Sandbox Code Playgroud)

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

kubectl --namespace <yournamespace> delete sts --all
Run Code Online (Sandbox Code Playgroud)

一一删除

kubectl --namespace ag1 delete sts mssql1 
kubectl --namespace ag1 delete sts mssql2
kubectl --namespace ag1 delete sts mssql3
Run Code Online (Sandbox Code Playgroud)


Roh*_*ith 7

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

kubectl get pods,services,deployments,jobs
Run Code Online (Sandbox Code Playgroud)

Pod 可以由部署作业创建

kubectl delete job [job_name]
kubectl delete deployment [deployment_name]
Run Code Online (Sandbox Code Playgroud)

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


Noa*_*nos 7

这里的许多答案告诉删除特定的 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
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

现在删除所有对象,包括 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
Run Code Online (Sandbox Code Playgroud)

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

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

$ kubectl get olm -n openshift-submariner
No resources found.
Run Code Online (Sandbox Code Playgroud)


Jaf*_*baj 7

首先列出部署

kubectl 获取部署

之后删除部署

kubectl 删除部署 <deployment_name>


emi*_*ini 6

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

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

  • 如果策略类型设置为“重新创建”,则当部署、作业或任何其他类型的控制器创建 Pod 时,这不会解决问题。 (2认同)

Jen*_*ens 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
Run Code Online (Sandbox Code Playgroud)

清理一切,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
Run Code Online (Sandbox Code Playgroud)

这给我留下了(我认为是)一个空的 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
Run Code Online (Sandbox Code Playgroud)