Kubernetes 如何刪除 Terminating 狀態(tài)的 Pod
在 Kubernetes (k8s) 中,Pod 是運(yùn)行容器化應(yīng)用的最小部署單元。當(dāng)我們刪除一個(gè) Pod 時(shí),通常它會快速進(jìn)入 Terminating 狀態(tài)并被刪除。然而,有時(shí)由于種種原因,Pod 會長時(shí)間停留在 Terminating 狀態(tài)。本文將詳細(xì)介紹如何處理和刪除這些處于 Terminating 狀態(tài)的 Pod。

為什么Pod會停留在Terminating狀態(tài)?
在了解如何刪除 Terminating 狀態(tài)的 Pod 之前,我們先看看為什么 Pod 會進(jìn)入并停留在這種狀態(tài)。常見的原因有:
- 節(jié)點(diǎn)故障:Pod 所在的節(jié)點(diǎn)可能已經(jīng)失聯(lián),導(dǎo)致 Kubernetes 無法與其通信。
- 持久卷未卸載:Pod 使用的持久卷未能成功卸載。
- PreStop Hook:Pod 的 PreStop 鉤子未能成功完成或超時(shí)。
- Kubernetes Bug:某些 Kubernetes 版本可能存在 Bug,導(dǎo)致 Pod 無法正確終止。

強(qiáng)制刪除Terminating狀態(tài)的Pod
當(dāng) Pod 長時(shí)間處于 Terminating 狀態(tài)時(shí),可以嘗試以下方法進(jìn)行強(qiáng)制刪除:
方法一: 使用 kubectl delete pod --force
這是最常用的方法,通過強(qiáng)制刪除來繞過正常的終止過程。
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執(zhí)行上述命令,再次查看Pod情況,輸出如下:

方法二:編輯Pod并手動刪除
有時(shí)候直接強(qiáng)制刪除仍然無法解決問題,這時(shí)可以嘗試通過編輯 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) 應(yīng)用修改
刪除 Pod 后重新應(yīng)用修改的定義文件:
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}}'方法四:刪除節(jié)點(diǎn)上的 Pod
如果 Pod 所在的節(jié)點(diǎn)不可達(dá),可以通過以下步驟從 API 服務(wù)器中刪除 Pod 記錄:
(1) 標(biāo)記節(jié)點(diǎn)為不可調(diào)度
kubectl cordon <node_name>(2) 刪除節(jié)點(diǎn)上的 Pod
強(qiáng)制刪除節(jié)點(diǎn)上的 Pod:
kubectl delete pod <pod_name> -n <namespace> --grace-period=0 --force(3) 重新調(diào)度節(jié)點(diǎn)
恢復(fù)節(jié)點(diǎn)為可調(diào)度狀態(tài):
kubectl uncordon <node_name>結(jié)論
在 Kubernetes 中,Pod 長時(shí)間處于 Terminating 狀態(tài)是一個(gè)常見的問題。通過上述方法,我們可以有效地強(qiáng)制刪除這些 Pod,確保集群的穩(wěn)定運(yùn)行。記住,在執(zhí)行這些操作時(shí)要謹(jǐn)慎,確保不會影響到其他正常運(yùn)行的服務(wù)和應(yīng)用。
如果以上方法仍然無法解決問題,建議檢查集群的日志和事件,尋找更深入的原因,或者向 Kubernetes 社區(qū)尋求幫助。

































