問(wèn)題現(xiàn)象
一臺(tái)宿主機(jī)上啟動(dòng)的Pod一直重啟,describe報(bào)錯(cuò)信息如下
Pod sandbox changed, it will be killed and re-created.
原因分析
- Pod處于CrashLoopBackOff狀態(tài),第一想到的是Liveness probe failed或者OOM-kill; 測(cè)試Pod沒(méi)有配置存活探測(cè),查看對(duì)應(yīng)機(jī)器也沒(méi)有OOM-kill相關(guān)內(nèi)核日志;
- 懷疑是否dockerd進(jìn)程資源比較緊張,比如被死循環(huán)的容器一直消耗資源;查看機(jī)器資源都處于正常水平,排除Pod因?yàn)橘Y源問(wèn)題重啟;
- 修改測(cè)試Pod的網(wǎng)絡(luò)方式改為hostnetwork模式啟動(dòng)Pod,在問(wèn)題機(jī)器上可以正常啟動(dòng)Pod,再次排除資源問(wèn)題導(dǎo)致;
- SandboxChanged:懷疑是CNI 分配IP失敗,導(dǎo)致循環(huán)分配,看起來(lái)比較像;于是查看網(wǎng)絡(luò)插件canal Pod日志(hostnetwork模式)和kubelet日志查看具體過(guò)程;
以下是網(wǎng)絡(luò)插件的日志信息,可以看到都是INFO日志,分配PodIP成功。
以下是kubelet對(duì)應(yīng)的日志,也可以看到使用了對(duì)應(yīng)的Pod IP并分配給container
繼續(xù)往下看kubelt的日志, 發(fā)現(xiàn)了一個(gè)可疑的error,使用nsenter 的某個(gè)參數(shù)失敗,然后接下來(lái)是Endpoint will be hanled。 下一段日志又到了kubelet重新分配IP和container endpoint,這里和問(wèn)題現(xiàn)象符合,docker ps可以看到有很多pause容器退出重建; 所以可以初步懷疑就是kubelet在創(chuàng)建Pod過(guò)程中卡在nsenter的使用方法上,對(duì)比nsenter的版本和help手冊(cè)發(fā)現(xiàn)果然是該機(jī)器的nsenter問(wèn)題。
修復(fù)nsenter相關(guān)的bin文件后問(wèn)題解決,也是第一次碰到,Pod創(chuàng)建過(guò)程中居然依賴nsenter工具,于是也去看了下對(duì)應(yīng)的go代碼,果然在分配IP后會(huì)使用nsenter檢索IP,如果檢索失敗就會(huì)退出,對(duì)應(yīng)的源碼信息如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-525398.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-525398.html
到了這里,關(guān)于Pod一直處于CrashLoopBackOff狀態(tài)的排查思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!