k8s容器狀態(tài)Terminating無法刪除的問題及解決
容器狀態(tài)一直為Terminating的解決
若Pod的狀態(tài)為Terminating,說明此Pod正處于關閉狀態(tài)。Pod停留在Terminating狀態(tài)一段時間后會被自動刪除。
若Pod一直停留在Terminating狀態(tài),則:
- 1、判斷是否為k8s和docker容器狀態(tài)不一致問題造成;
- 2、判斷 Pod 上是否有 finalizers ,如果有需要確認是否是有防止刪除的保護;
- 3、判斷節(jié)點是否出現(xiàn) NotReady,節(jié)點如果處于NotReady,此節(jié)點上出現(xiàn) Pod 狀態(tài) Terminating 是預期中的行為
如果確定可以安全刪除 Pod,可執(zhí)行如下命令強制刪除:
kubectl delete pod [namespace] --grace-period=0 --force
k8s和docker容器狀態(tài)不一致解決
在內(nèi)存緊張、系統(tǒng)負載極高、IO 負載極高時,Pod 底層容器可能出現(xiàn) dockerd 查詢到的容器狀態(tài),跟真實容器關聯(lián)進程狀態(tài)不一致的問題。
因為 kubelet 只跟 dockerd 通信,從 kubelet 層面,就無法感知 Pod 的真實狀態(tài)了。
Pod狀態(tài)為Running,但實際服務異常;如果刪除Pod,會長期卡在Terminating
解決方案
檢測是否為BAD容器,執(zhí)行下列命令有 BAD 相關輸出
for c in `docker ps -q`; do echo $c; pc=`docker inspect $c -f "{{ .State.Pid }}"`; echo $pc; ps aux |grep -v grep | grep " $pc " || echo "BAD: container_id: $c, pid: $pc"; done | grep BAD
批量逐個清理BAD容器。默認只會輸出要刪除的容器命令,復制執(zhí)行會逐個刪除
for c in `docker ps -q`; do echo $c; pc=`docker inspect $c -f "{{ .State.Pid }}"`; echo $pc; ps aux |grep -v grep | grep " $pc " || echo docker rm -f $c; done | grep 'docker rm -f'
清理全部異常容器(重啟docker)
systemctl restart docker
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Rainbond的ServiceMesh架構組件端口沖突處理解決
這篇文章主要大家介紹了Rainbond?ServiceMesh架構組件端口沖突處理方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
k8s如何使用NFS作為StorageClass提供動態(tài)存儲
本文主要介紹了k8s中的StorageClass,包括其定義、引入的原因、實現(xiàn)方式、定義方法以及回收策略對數(shù)據(jù)的影響等,首先,StorageClass是在K8s集群中創(chuàng)建用于動態(tài)PV的管理,可以鏈接至不同的后端存儲,對存儲的請求可以指向StorageClass2024-09-09
Kubernetes 1.28.2集群安裝過程中的關鍵步驟詳解(最新推薦)
Kubernetes K8s是Google開源的容器編排平臺,最初由Borg項目發(fā)展而來,K8s 1.28版本引入了非正常節(jié)點關閉恢復、內(nèi)置Sidecar容器支持、Job優(yōu)化、Proxy改進和調(diào)度框架優(yōu)化等功能,本文介紹Kubernetes 1.28.2集群安裝過程中的關鍵步驟,感興趣的朋友一起看看吧2025-03-03

