Kubernetes 如何删除 Terminating 状态的 Pod

云计算 云原生
在 Kubernetes 中,Pod 长时间处于 Terminating 状态是一个常见的问题。通过下述方法,我们可以有效地强制删除这些 Pod,确保集群的稳定运行。

在 Kubernetes (k8s) 中,Pod 是运行容器化应用的最小部署单元。当我们删除一个 Pod 时,通常它会快速进入 Terminating 状态并被删除。然而,有时由于种种原因,Pod 会长时间停留在 Terminating 状态。本文将详细介绍如何处理和删除这些处于 Terminating 状态的 Pod。

为什么Pod会停留在Terminating状态?

在了解如何删除 Terminating 状态的 Pod 之前,我们先看看为什么 Pod 会进入并停留在这种状态。常见的原因有:

  • 节点故障:Pod 所在的节点可能已经失联,导致 Kubernetes 无法与其通信。
  • 持久卷未卸载:Pod 使用的持久卷未能成功卸载。
  • PreStop Hook:Pod 的 PreStop 钩子未能成功完成或超时。
  • Kubernetes Bug:某些 Kubernetes 版本可能存在 Bug,导致 Pod 无法正确终止。

图片

强制删除Terminating状态的Pod

当 Pod 长时间处于 Terminating 状态时,可以尝试以下方法进行强制删除:

方法一: 使用 kubectl delete pod --force

这是最常用的方法,通过强制删除来绕过正常的终止过程。

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

其中:

  • <pod_name> 是你要删除的 Pod 的名称。
  • <namespace> 是 Pod 所在的命名空间。

示例:

kubectl delete pod ks-installer-548bd7d94d-vmjr6 --namespace kubesphere-system --grace-period=0 --force

执行上述命令,再次查看Pod情况,输出如下:

方法二:编辑Pod并手动删除

有时候直接强制删除仍然无法解决问题,这时可以尝试通过编辑 Pod 的配置来手动删除。

(1) 编辑 Pod

首先,获取 Pod 的定义并保存到本地文件:

kubectl get pod <pod_name> -n <namespace> -o yaml > pod.yaml

(2) 移除 Finalizer

在 pod.yaml 文件中,找到 metadata 下的 finalizers 字段,并删除该字段:

metadata:
  ...
  finalizers:
  - kubernetes

(3) 应用修改

删除 Pod 后重新应用修改的定义文件:

kubectl delete pod <pod_name> -n <namespace>
kubectl apply -f pod.yaml

方法三:使用 kubectl patch

可以使用 kubectl patch 命令来移除 finalizers 字段。

kubectl patch pod <pod_name> -n <namespace> -p '{"metadata":{"finalizers":null}}'

方法四:删除节点上的 Pod

如果 Pod 所在的节点不可达,可以通过以下步骤从 API 服务器中删除 Pod 记录:

(1) 标记节点为不可调度

kubectl cordon <node_name>

(2) 删除节点上的 Pod

强制删除节点上的 Pod:

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

(3) 重新调度节点

恢复节点为可调度状态:

kubectl uncordon <node_name>

结论

在 Kubernetes 中,Pod 长时间处于 Terminating 状态是一个常见的问题。通过上述方法,我们可以有效地强制删除这些 Pod,确保集群的稳定运行。记住,在执行这些操作时要谨慎,确保不会影响到其他正常运行的服务和应用。

如果以上方法仍然无法解决问题,建议检查集群的日志和事件,寻找更深入的原因,或者向 Kubernetes 社区寻求帮助。

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2021-10-10 00:03:38

NodePodTerminating

2022-04-09 15:26:46

Kubernetes删除操作源码解析

2023-10-19 19:42:25

IstioPodkubernetes

2020-11-30 12:15:26

KubernetesPodLinux

2023-04-14 14:31:52

Kubernetes服务

2023-02-09 16:47:34

KubernetesPod优先级

2020-04-10 08:00:08

Kubernetes补丁pod

2024-04-15 05:00:00

kubernete网络容器

2022-09-22 12:11:38

PodKubernetes

2022-07-04 09:13:54

KubernetespodLinux

2022-05-10 10:09:12

KubernetesPod网络抓包

2022-05-12 18:09:18

Kubernetes公有云

2024-04-30 11:14:19

KubernetesReplicaSet数量

2019-11-20 09:15:53

KubernetesPod

2023-11-02 20:05:17

KubernetesPod管理

2021-11-22 08:00:00

Kubernetes容器集群

2020-04-26 11:16:46

KubernetesPodLinux

2022-05-16 08:27:20

KubernetePodLinux

2020-07-06 07:52:10

Kubernetes网络通信

2023-06-14 08:49:22

PodKubernetes
点赞
收藏

51CTO技术栈公众号