背景
使用的阿裡雲的k8s(ack),node節點資源充足,無任何壓力,但是會偶爾收到node節點下線的告警,以下是相關告警
檢查主機的kubelet 日志發現報如下錯誤:container runtime is down
問題定位
- 初步懷疑是docker inspec導緻,檢查docker運作無異常,并打開docker debug日志,發現在故障起降docker 正常運作且在列印日志,像這種日志都是docker inspect接口的日志資訊,表示當時容器的狀态檢查都是ok的
json複制代碼May 23 07:26:17 iZuf645tftc9680n2pp6s4Z dockerd: time="2023-05-23T07:26:17.707770704+08:00" level=debug msg="Calling GET /v1.40/containers/139f10487e85/json"
2. 檢查message日志,發現故障時間段,kubelet不列印日志,懷疑kubelet在那段時間夯住.
grep -1000 "iZuf645tftc9680n2pp6s4Z kubelet: I0523 07:26:18.744911 3708450 setters.go:577" /var/log/messages | less
3.于是檢查主機的kubelet程序資源使用情況,發現報警時間段,kubelet程序會出現毛刺
- 通過kubelet出現毛刺,懷疑node節點有程序定時執行導緻了節點性能抖動幹擾了kubelet,如qaxsafe等軟體,通過排查發現确實了安裝此軟體
問題修複
修改方式有以下兩種,都是可以解決此問題,推薦第二種
- 解除安裝node節點上qaxsafe軟體(方式1)
2. 對kubelet相關程序和檔案夾進行加白處理,讓qaxsafe不進行掃描(方式2)
bash複制代碼/var/lib/kubelet 目錄
/usr/bin/kubelet 程序
/etc/kubernetes 目錄
/var/run/docker 目錄
/var/lib/containerd 目錄
/run/containerd 目錄
/usr/bin/dockerd 程序
總結
此問題我們和阿裡雲工程師排查了有二周時間有餘,包括分析k8s源碼,懷疑docker運作時版本、網絡不穩定、k8s版本等問題,但是最終發現是由以上問題導緻。
k8s的還是比較複雜的,是以要對其原理有一定掌握并且有比較強技術團隊做支撐,在決定上不上k8s,不要一味追尋新技術,适合自己最好。
參考
plpan.github.io/docker-hang…
# 一次單節點單個pod網絡問題排查過程
以下是常見的一些可能會導緻kubelet程序夯住的一些程序,供大家參考
bash複制代碼ds_agent # 查下 agent 關鍵字
qaxsafed # 奇安信,查下 qax 看看有沒有其他的
secdog # 也查下 dog 和 sec
sangfor_watchdog # 這個不影響,但是有它基本是深信服的虛拟化環境,會和flannel的8472端口沖突
YDservice
Symantec
start360su_safed # 推薦 ps aux | grep safe 先查下
gov_defence_service
gov_defence_guard # ps aux | grep defence
wsssr_defence_daemon # 奇安信伺服器安全加強系統,和下面是一起的。目前遇到過影響 socat 運作和容器程序通路另一個機器上的mysql端口
wsssr_defence_service
wsssr_defence_agent # 影響pod網絡
ics_agent
/sdata/sbin/{sdatad,srepd,rpcserver,sdatalogd,I2Availability,i2monitor,HaDetector,collector} #容器無法啟動,各種資源不可用的錯誤, # ps aux | grep '/sdat[a]/'
/opt/nubosh/vmsec-host/intedrity/bin/icsintedrity # docker -p 的都無法通路
/opt/nubosh/vmsec-host/file/bin/icsfilesec
service360safe(360entclient) # 導緻相關操作操作緩慢,apiserver etcdctl初始化逾時, 使用systemctl stop service360safe停止此服務
edr_sec_plan # ps aux | grep edr , 深信服的 edr,這個會下發 iptables 規則,配置錯了會影響 node 之間,以及 pod 和 pod 之間通信
titanagent # 青藤雲安全軟體
# dynarose的安全軟體,影響 docker 和 pod 的容器通信
ps -aux | grep -E 'blocklogc|collectclient|fwclient|identity|nodeclient|subconnc|subdomainc|sddog|sdc[c]'
# 卡巴斯基,影響容器通信 systemctl disable --now kesl
ps aux | grep -E 'kaspersky|klnagent'
作者:dweizhao
連結:https://juejin.cn/post/7244707530457808933