Open zhaobei opened 3 years ago
从错误原因来看是 cgroup 配置导致“没有这样的设备或地址”,首先检查 docker 和 kubelet 的管理器配置:
# 检查 docker
cat /etc/docker/daemon.json | grep cgroupdriver
-->"exec-opts": ["native.cgroupdriver=cgroupfs"],
# 检查 kubelet
cat /var/lib/kubelet/config.yaml | grep cgroupDriver
-->cgroupDriver: cgroupfs
发现 docker 为 cgroup, 而 kubelet 为 systemd,。二者不一样,cgroupfs与 systemd 一起使用意味着将有两个不同的 cgroup 管理器。如果 kubelet 使用一个 cgroup 驱动程序的语义创建了 Pod,那么在尝试为此类现有 Pod 重新创建 Pod 沙箱时,将容器runtime更改为另一个 cgroup 驱动程序可能会导致此类错误。
以下是通过显式配置两者来确保 docker 和 kubelet 使用相同的 cgroups 驱动程序的方法:
docker:
cat /etc/docker/daemon.json
{
“ exec-opts ”:[ “ native.cgroupdriver=cgroupfs ” ]
}
Kubelet(使用 with 设置时kubeadm):
cat cat /var/lib/kubelet/config.yaml
->cgroupDriver: cgroupfs
kubelet 配置 cgrop.
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/
https://gist.github.com/MOZGIII/22bf4eb811ff5d4e0bbe36444422b6d3
我在试用麒麟V10操作系统,运行k8s,发现麒麟V10好像支持cgroupfs。
麒麟V10使用systemd有问题,即使docker和kubelet一致,都使用systemd,一样会出现以上错误,因此要使用cgroupfs
@VFT 查看你麒麟系统的 runc版本, docker-runc-1.0.0-rc3 这个包有bug,不使用麒麟自带的这个包可以正常使用 systemd
现象
问题出现情况:在麒麟ARM芯片的机器上搭建k8s,其中的的一个组件cordons 发现启动失败,查看日志如下所示:
然后查看kubelet的状态(System status kubelet),失败了,再查看kubelet的日志(journalctl -xe | grep kubelet)