删除Kubernetes 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
200230 次浏览

你需要删除部署,这将依次删除pods和复制集https://github.com/kubernetes/kubernetes/issues/24137

列出所有部署:

kubectl get deployments --all-namespaces

然后删除部署:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

其中NAMESPACE是它所在的名称空间,DEPLOYMENT是部署的名称。如果NAMESPACE为default,则完全去掉-n选项。

在某些情况下,它也可能由于作业或daemon启动而运行。 检查以下内容并执行相应的删除命令

kubectl get jobs


kubectl get daemonsets.app --all-namespaces


kubectl get daemonsets.extensions --all-namespaces

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

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

当手动删除pod后仍然自动重新创建pod时,则使用Deployment创建了这些pod。 当您创建一个部署时,它会自动创建ReplicaSet和Pods。根据您在部署脚本中提到的pod的副本数量,它将最初创建这些数量的pod。 当你试图手动删除任何pod时,它会自动重新创建这些pod。< / p >

是的,有时你需要用武力删除豆荚。但在这种情况下,武力命令不起作用。

如果你的pod有name-xxx-yyy这样的名字,它可以被一个名为name-xxxreplicasets.apps控制,你应该在删除pod之前先删除那个replicaset:

kubectl delete replicasets.apps name-xxx

你可以尝试删除replicaSet,而不是删除NS

kubectl get rs --all-namespaces

然后删除replicaSet

kubectl delete rs your_app_name

还要注意有状态集

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

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

如果存在继续运行的作业,则需要搜索并删除该作业:

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

而且

kubectl delete job <job-name>

而不是试图弄清楚它是否是一个部署,deamonset, statefulset…或者什么(在我的情况下,它是一个复制控制器,不断跨越新的pod:) 为了确定是什么在不停地跨越图像,我用这个命令获得了所有的资源:

kubectl get all

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

kubectl get all --all-namespaces

或者定义你想要检查的命名空间:

kubectl get all -n NAMESPACE_NAME

一旦我看到复制控制器是我的麻烦,我删除了它:

kubectl delete replicationcontroller/CONTROLLER_NAME

这将提供关于所有pod、部署、服务和作业的信息

kubectl get pods,services,deployments,jobs

pod可以通过部署工作创建

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

如果您删除了部署或作业,那么可以停止重新启动pods。

你可以根据年龄或时间对旧部署进行kubectl get replicasets检查

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

kubectl delete replicasets <Name of replicaset>

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

kubectl delete deployments DEPLOYMENT_NAME

但是仍然在重新创建豆荚,所以我使用下面的命令交叉检查副本集

kubectl get rs

然后将复制集编辑为1到0

kubectl edit rs REPICASET_NAME

这个问题的根本原因是deploy /job/replicasets spec属性strategy->type,它定义了pod将被销毁(隐式或显式)时应该发生什么。在我的例子中,它是Recreate

根据@nomad的回答,删除部署/作业/replicasets是一个简单的修复,以避免在新手用户搞砸集群之前尝试致命的组合。

在开始调试之前,尝试以下命令来理解幕后操作:

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

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

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

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

在我的例子中,我使用OLM - 操作员生命周期管理器运行OpenShift集群。OLM是控制部署的人,所以当我删除部署时,它不足以阻止pods重新启动。

只有当我删除洞螈及其订阅时,部署、服务和pods才消失了。

首先列出命名空间中的所有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.

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

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

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

此命令终止在指定的<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

很明显,有什么东西在复活荚果。虽然很多其他的答案让你看一切(复制集,作业,部署,有状态集,…)来找到可能重生pod的东西,但你可以只看pod,看看是什么衍生了它。例如:

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

这告诉你是什么创造了这个豆荚。然后你可以删除它。

这已经发生在我与一些破碎的“头盔”安装。你的部署可能有点混乱。如果前面的建议都不起作用,那么寻找一个守护进程并删除它。

< p >如 Kubectl get daemon - onset——namespace

然后删除daemonset

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

然后尝试删除豆荚。

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

检查吊舱是否消失了。

kubectl get pods --all-namespaces

基本上有两种方法可以移除pod

  1. kubectl scale——replicas=0 deploy name_of_deployment. > 这将把副本的数量设置为0,因此它将不会重新启动pod 使用helm卸载您在管道中实现的图表。 不要直接删除部署,而是使用helm卸载图表,这将删除它创建的所有对象

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

致以最亲切的问候

Kubernetes总是以这样的格式工作:

部署在在在replicasets祝辞祝辞祝辞豆荚

首先用0个副本编辑部署,然后用所需的副本扩展部署(运行下面的命令)。您将看到新的副本集已经创建,pod也将以所需的计数运行。

在linux中:~ anuragmanikkame $ kubectl scale deploy tomcat -n Dev-namespace——replicas=2部署。扩展/ tomcat了< / p >


首先列出部署

Kubectl得到部署

之后,删除部署

Kubectl删除deploy <