中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行K8S中的runtime異常復盤

發布時間:2021-12-16 09:53:19 來源:億速云 閱讀:454 作者:柒染 欄目:云計算

這篇文章給大家介紹如何進行K8S中的runtime異常復盤,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、概述

收到線上k8s的events報警:

如何進行K8S中的runtime異常復盤

看到這個報警,趕緊看下服務,發現服務目前正常,但有一個正發布的服務,銷毀不了老的pod,我懷疑node節點可能是不可用了。果不其然,在控制節點上查看node狀態,為not ready。

二、檢查

報的內核報警,但是其實不應該導致node節點不可用,故趕緊深究一下,先將node節點打上污點,不可調度。

當集群節點進入NotReady狀態的時候,我們需要做的第一件事情,肯定是檢查運行在節點上的kubelet是否正常。在這個問題出現的時候,使用systemctl命令查看kubelet狀態,發現它作為systemd管理的一個daemon,是運行正常的。當我們用journalctl查看kubelet日志的時候,發現下邊的錯誤。

 Dec 11 19:38:45 ali-worker-k8s-001 kubelet[20140]: E1211 19:38:45.239546   20140 kubelet.go:1551] error killing pod: failed to "KillPodSandbox" for "31321cfc
-1bbe-11ea-893e-00163e14447d" with KillPodSandboxError: "rpc error: code = DeadlineExceeded desc = context deadline exceeded"

order-oms-64544b9c65-4lq5d_sec-mall 這個pod殺不掉,導致了docker死鎖,所以判斷是containerd的問題

問了下阿里的大佬

shim其實扮演父進程,回收容器里進程的角色,跟systemd去回收系統進程一樣。linux上如果systemd卡主了,就會有一堆defunct。shim老版本的同步機制,就用了一個32大小的channel,理論上超過32個進程一起退出,就會overflow

于是我exec進入容器,果然發現進程很多,都是多于32,于是選擇升級containerd解決問題

具體操作步驟如下

1、下載1.2.10 containerd
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm
2、停止kubelet進程
systemctl stop kubelet
3、停止containerd
systemctl stop containerd
4、更新rpm版本
rpm -Uvh containerd.io-1.2.10-3.2.el7.x86_64.rpm
5、啟動containerd,檢查版本
systemctl start containerd
ctr version
6、啟動docker,檢查容器進程
systemctl start docker
docker ps
7、啟動kubelet
systemctl start kubelet
8、調度pod到該節點,驗證是否正常

三、網上看到的另一個bug是systemd的問題

如何進行K8S中的runtime異常復盤

1、什么是PLEG

這個報錯很清楚的告訴我們,容器runtime是不工作的,且PLEG是不健康的。這里容器runtime指的就是docker daemon。Kubelet通過直接操作docker daemon來控制容器的生命周期。而這里的PLEG,指的是pod lifecycle event generator。PLEG是kubelet用來檢查容器runtime的健康檢查機制。這件事情本來可以由kubelet使用polling的方式來做。但是polling有其成本上的缺陷,所以PLEG應用而生。PLEG嘗試以一種“中斷”的形式,來實現對容器runtime的健康檢查,雖然實際上,它同時用了polling和”中斷”兩種機制。

基本上看到上邊的報錯,我們可以確認,容器runtime出了問題。在有問題的節點上,通過docker命令嘗試運行新的容器,命令會沒有響應。這說明上邊的報錯是準確的.

2、容器runtime

容器runtime包括docker daemon,containerd,containerd-shim以及runC。組件containerd負責集群節點上容器的生命周期管理,并向上為docker daemon提供gRPC接口。

故也升級了下systemd。升級systemd,直接yum update systemd就可以。

其中如果遇到容器起不來網絡插件的情況,可以ip link del dev cni0,會自動重啟的。

關于如何進行K8S中的runtime異常復盤就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杨浦区| 唐山市| 大埔区| 婺源县| 久治县| 班玛县| 三原县| 弥渡县| 昌乐县| 东平县| 盱眙县| 淳化县| 宜黄县| 丽江市| 荣成市| 柯坪县| 偃师市| 城市| 保山市| 穆棱市| 云龙县| 泽库县| 确山县| 周至县| 连南| 宿州市| 威远县| 达孜县| 孟连| 石泉县| 安新县| 抚宁县| 徐水县| 海林市| 北辰区| 台东县| 澳门| 双流县| 巴中市| 鹤山市| 江都市|