最近由于安装harbor升级了docker,然后发现k8s集群就启动不了。
查看kubelet日志发现:直接连不上apiserver了,直接connection refused
然后尝试启动apiserver容器直接报错:Error response from daemon: unknown or invalid runtime name: docker-runc
原因: 这是因为升级docker带来的兼容性问题
解决办法:
运行:
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
system restart docker
但是这样重启docker以后, kubelet日志还是会有报错:
failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"
很明显是docker升级以后带来cgroup驱动造成的问题
然后编辑/etc/docker/daemon.json文件,加入下面一行:
"exec-opts": ["native.cgroupdriver=systemd"]
并编辑/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf文件,加入下面一行
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
备注:如果10-kubeadm.conf文件不是上面的路径,就用下面的命令查找一下,再重新编辑:
find / -name 10-kubeadm.conf
然后运行
systemctl daemon-reload
systemctl restart kubelet
问题解决: