<- All articles
云原生与运维2 min read

工作节点NotReady处理

围绕 Kubernetes 工作节点 NotReady 问题,排查 Docker 与 kubelet 的 Cgroup Driver 不一致,并给出两种配置修正路径。

Kubernetes 工作节点 NotReady 处理文章封面

工作节点NotReady处理

情况一

参考链接 《Docker中的Cgroup Driver:Cgroupfs 与 Systemd》

异常信息如下

failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

原因分析

文件驱动默认由systemd改成cgroupfs, 而我们安装的docker使用的文件驱动是systemd, 造成不一致, 导致镜像无法启动

查看Docker信息

docker info
Cgroup Driver: systemd
或者
Cgroup Driver: cgroupfs

现在有两种方式, 一种是修改docker, 另一种是修改kubelet

启动kubelet

service kubelet start

查看kubelet日志

journalctl -f -u kubelet

解决方式一:修改docker

修改/etc/docker/daemon.json,加入以下内容:

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

重启docker

systemctl restart docker
systemctl status docker

解决方式二:修改kubelet

DOCKER_CGROUPS=$(docker info | grep 'Cgroup'| cut -f4 -d' ')

echo $DOCKER_CGROUPS

cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF

重启docker配置和kubelet

systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet

情况二

查看NotReady节点,发现flannel并没有在/etc下创建/etc/cni/net.d/10-flannel.conflist文件,而其它工作节点都有此文件

# 10-flannel.conflist
{
  "name": "cbr0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

从其它工作节点将该文件拷贝过来,并重启kubelet

systemctl restart kubelet