如何在Kubernetes中删除状态未知的Pod?

时间:2019-02-01 11:30:17

标签: kubernetes

我在Amazon EKS上有一个kubernetes集群,有时会出现一些状态为Unknown的Pod。我读到这是因为我的Pod没有设置内存限制,并且更改后没有出现具有该状态的新Pod。但是我尝试使用kubectl delete pod <pod_name>删除现有的,但没有用。我应该如何删除它们?

3 个答案:

答案 0 :(得分:3)

您可以这样强制删除广告连播:

kubectl delete pod <pod_name> --grace-period=0 --force

答案 1 :(得分:0)

您直接部署了Pod吗? 还是从部署或状态集进行部署? 尝试删除部署或状态集。

如果没有解决办法,则删除pod所在的名称空间。但是所有对象将从该名称空间中删除

答案 2 :(得分:0)

在一个Kubernetes群集中的一个使用Kubernetes工作量可以创建波德。有以下几种工作负载:

  • 部署
  • ReplicaSet
  • DaemonSet
  • StatefulSet
  • ReplicationController
  • 工作
  • CronJob
  • 或豆荚(直接)

如果您使用Pod以外的任何上述列表,则将为该Pod设置Pod的ownerReference(.metadata.ownerRefference)。也就是说,如果您创建一个名为部署d1,那么它首先创建一个名为ReplicaSet d1-***在这种情况下ownerRefference的ReplicaSet是部署d1。然后,ReplicaSet将创建多个Pod(带有前缀d1-***-***)。因此,Pod的ownerRefference将是ReplicaSet d1-***

  • 如果仅删除通过部署创建的Pod,则Pod将被删除。但它们再次由所有者ReplicaSet重新创建。
  • 如果仅删除ReplicaSet,则ReplicaSet及其Pod将被删除。但是Deployment控制器将再次重新创建ReplicaSet,然后新创建的ReplicaSet将再次创建Pod。
  • 但是,如果您只删除原始的Deployment,那么它的所有内容也会被删除。

更新:

如果您不想由于保持产品性能而删除原始的Deployment或其他工作负载,则可以通过强制删除Pod来满足您的需求:

 $ kubectl delete pod <pod_name> --namespace <namespace> --grace-period 0 --force

按照kubectl参考命令,

  • --grace-period:默认值为-1。给资源正常终止的时间(以秒为单位)。如果为负则忽略。设置为1可立即关闭。仅当--force为真(强制删除)时才能设置为0。
  • --force:* 默认值为false。仅在宽限期= 0时使用。如果为true,请立即从API中删除资源并跳过正常删除。请注意,立即删除某些资源可能会导致不一致或数据丢失,需要确认。

您就是这种情况。