kuberlet服務啟動報錯:"Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""


這是因為kubelet的cgroup和docker的不一致所導致的,“kubelet cgroup驅動為systemd,而docker的為cgroupfs”,有兩種決解決方式,
方式一:修改docker的cgroup為systemd

修改docker服務的配置文件,“/etc/docker/daemon.json ”文件,添加如下

"exec-opts": ["native.cgroupdriver=systemd"]

重啟dokcer服務:

sudo systemctl daemon-reload
sudo systemctl restart docker

修改后查看docker的cgroup

$ docker info |grep "Cgroup Driver"
 Cgroup Driver: systemd #表明已經更新為了systemd

重啟kuberlet:

systemctl restart kubelet

方式二:修改kubelet的cgroup為cgroupfs (不推薦)
修改Kubelet的配置文件:/var/lib/kubelet/config.yaml

cgroupDriver: cgroupfs

重啟kuberlet:

systemctl restart kubelet

修改完成后,此時可以可以在目標node上,再次查看kubelet的事件,看看是否報錯,或通過docker ps 、crictl ps工具查看目標容器是否被創建。

雖然解決了上面的問題,但是我們不禁產生一些疑問,什么是cgroup?systemd和cfgroupfs兩種cgroup有什么區別?

cgroup 驅動

在 Linux 上,控制組(CGroup)用於限制分配給進程的資源。

kubelet 和底層容器運行時都需要對接控制組來強制執行 為 Pod 和容器管理資源 並為諸如 CPU、內存這類資源設置請求和限制。若要對接控制組,kubelet 和容器運行時需要使用一個 cgroup 驅動。 關鍵的一點是 kubelet 和容器運行時需使用相同的 cgroup 驅動並且采用相同的配置。

可用的 cgroup 驅動有兩個:

cgroupfs 驅動

cgroupfs 驅動是 kubelet 中默認的 cgroup 驅動。當使用 cgroupfs 驅動時, kubelet 和容器運行時將直接對接 cgroup 文件系統來配置 cgroup。

systemd 是初始化系統時, 推薦使用 cgroupfs 驅動,因為 systemd 期望系統上只有一個 cgroup 管理器。 此外,如果你使用 cgroup v2, 則應用 systemd cgroup 驅動取代 cgroupfs

systemd cgroup 驅動

當某個 Linux 系統發行版使用 systemd 作為其初始化系統時,初始化進程會生成並使用一個 root 控制組(cgroup),並充當 cgroup 管理器。

systemd 與 cgroup 集成緊密,並將為每個 systemd 單元分配一個 cgroup。 因此,如果你 systemd 用作初始化系統,同時使用 cgroupfs 驅動,則系統中會存在兩個不同的 cgroup 管理器。

同時存在兩個 cgroup 管理器將造成系統中針對可用的資源和使用中的資源出現兩個視圖。某些情況下, 將 kubelet 和容器運行時配置為使用 cgroupfs、但為剩余的進程使用 systemd 的那些節點將在資源壓力增大時變得不穩定。

當 systemd 是選定的初始化系統時,緩解這個不穩定問題的方法是針對 kubelet 和容器運行時將 systemd 用作 cgroup 驅動。

要將 systemd 設置為 cgroup 驅動,需編輯 KubeletConfigurationcgroupDriver 選項,並將其設置為 systemd。例如:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
cgroupDriver: systemd

如果你將 systemd 配置為 kubelet 的 cgroup 驅動,你也必須將 systemd 配置為容器運行時的 cgroup 驅動。 參閱容器運行時文檔,了解指示說明。例如:


免責聲明!

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



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