【kubeadm初始化報錯】failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"


復現場景

環境

  • 系統:Centos7
  • kubernetes:1.18.5
  • docker:19.03.9

復現步驟

1、通過 yumrpm 安裝 kubelet kubectl kubeadm,並 systemctl enable --now kubelet

2、安裝 docker 並配置 (kubernetes官方推薦docker等使用systemd作為cgroupdriver)

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "data-root": "/data/docker"
}
EOF

3、kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5 提示 [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/,到最后初始化失敗,提示kubelet 健康狀態不正常

4、查看 kubelet 狀態 systemctl status kubelet,提示error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

解決方案

1、只修改docker

docker 不再設置native.cgroupdriver=systemd,或將 systemd 改成 cgroupfs,重啟docker systemctl daemon-reload && systemctl restart docker

檢查 docker info|grep "Cgroup Driver" 是否輸出 Cgroup Driver: cgroupfs

kubelet 默認cgroupdriver是cgroupfs,但是它竟然推薦用systemd,interesting!

2、分別修改docker與控制平台的kubelet為systemd 【官方推薦】

鑒於用的k8s版本有點新,本文只記錄當前1.18.x的修改方式,其他版本請參詳官方:

重置未初始化成功的kubeadm配置

echo y|kubead reset

修改docker,只需在/etc/docker/daemon.json中,添加"exec-opts": ["native.cgroupdriver=systemd"]即可,本文最初的docker配置可供參考。

修改kubelet:

cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

重啟docker 與 kubelet:

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

檢查 docker info|grep "Cgroup Driver" 是否輸出 Cgroup Driver: systemd

再次執行kubeadm init時,我發現kubeadm將cgroupDriver的配置到了/var/lib/kubelet/kubeadm-flags.env
后續檢查/var/lib/kubelet/config.yaml 發現,里邊已經被新的配置替換掉了;
另外,在配置期間,我這里一直出現kubelet健康狀態不正常的問題,重置了kubeadm,刪除了執行用戶的家目錄下的~/.kube,之后正常了
ps: 有趣的是,kubelet自啟動后,會周期性重啟,還是會提示docker的cgroup driver是與kubelet不同,等kubeadm初始化成功就不這樣了。

本文參考自官方文檔,版本1.18.5,網上很多博客的方式已經過時了,所以記錄一下


免責聲明!

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



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