• 【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,网上很多博客的方式已经过时了,所以记录一下

  • 相关阅读:
    利用border制作三角形原理
    JavaScript中null和undefined
    localStorage 如何存储JSON数据并读取JSON数据
    常见的几种浏览器内核简单介绍
    关于Banner设计的促销氛围
    分数分配
    餐饮管理系统
    餐馆管理之点菜
    餐饮管理之结账
    餐饮管理之菜品管理
  • 原文地址:https://www.cnblogs.com/hellxz/p/kubelet-cgroup-driver-different-from-docker.html
Copyright © 2020-2023  润新知