k8s node節點網絡插件工作正常、kubelet工作正常情況下,node狀態為NotReady,導致pod調度失敗的排查過程。


問題背景:

生產環境中部署的K8S環境,一個業務pod無法異常退出,狀態為Termnation狀態,導致業務系統部分功能不可用。

排查過程:

1、使用kubectl describe pod $pod_name -n $namespaces查看pod狀態,發現pod調度失敗,1個node不滿足ready的狀態,15個node不滿足NodeSelector的要求;

2、使用kubectl describe node $node_name 查看node nodeSelector,發現node label和pod的nodeSelector字段相同,滿足匹配要求;

3、使用kubectl get nodes 查看node狀態,發現node-01狀態為NotReady,由此可以判定是node-01處於未准備就緒狀態,導致無法調;

4、進入node-01 查看kubelt和cni網絡插件都是正常狀態,排除網絡插件和kubelet問題;

5、使用systemctl restart kubelt 重啟kubelet,kubelet關閉成功,啟動失敗,原因為docker無法連接;

6、使用systemcctl status docekr狀態,docker運行正常;

7、使用systemctl restart docker ,docker停止成功,但是啟動失敗,使用journalctl -xu docker 、systemctl status docker -l 查看系統托管docker日志,發現docker啟動失敗是因為docker.pid、containerd仍然運行中,無法重啟;

8、查看系統內核日志,發現有日志打印:kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 28s! CentOS7;

9、根據內核日志提示,確定node-01發生了軟死鎖,問題是由於內核某段代碼長期占用內核進程,導致內核處於鎖死的狀態,CPU掛起系統不可用。

10、問題解決辦法(/proc/sys/kernel/watchdog_thresh的默認值為10,修改為30):

echo 30 > /proc/sys/kernel/watchdog_thresh 

sysctl -w kernel.watchdog_thresh=30

問題解決參考文檔:

解釋設什么是軟死鎖及軟死鎖的解決辦法:

https://blog.csdn.net/jiangganwu/article/details/89711354

解釋為什么要用修改proc/sys/kernel/watchdog_thresh的方法解決軟死鎖問題:

https://blog.csdn.net/ericstarmars/article/details/81750919

https://blog.csdn.net/yhb1047818384/article/details/70833825/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM