我运行一个 Kubernetes 集群,安装了kubeadm
. 我最近从 1.19 升级到 1.20 并将容器运行时从 迁移docker
到containerd
,因为docker
现在已弃用。
我配置containerd
并kubelet
使用它,并docker
从所有节点卸载。一切似乎都运行良好。
今天,我尝试从 1.20 升级到 1.21,但运行时收到两个警告,kubeadm upgrade plan
这让我认为containerd
过渡尚未完成:
它尝试使用 docker:
cannot automatically set CgroupDriver when starting the Kubelet: cannot execute 'docker info -f {{.CgroupDriver}}': executable file not found in $PATH
- 我可能有一个配置问题,因为
kubeadm
似乎不知道我们不再使用 docker,但是我没有在文档或本地 conf 中找到正确的选项,除非--cri-socket
它不适用于kubeadm upgrade
. - 其次,措辞很奇怪:“启动 Kubelet 时”。但是我的 kubelet 启动得很好,不会抱怨缺少 docker 或 CgroupDriver。
- 我可能有一个配置问题,因为
它不检测 cgroup 驱动程序设置:
The 'cgroupDriver' value in the KubeletConfiguration is empty. Starting from 1.22, 'kubeadm upgrade' will default an empty value to the 'systemd' cgroup driver. The cgroup driver between the container runtime and the kubelet must match!
这真的很令人惊讶,因为我有
cgroupDriver: systemd
inkubectl -n kube-system get cm kubelet-config-1.20 -o yaml
,in , and中/var/lib/kubelet/config.yaml
还有标志,它甚至被打印出来了!/etc/default/kubelet
/var/lib/kubelet/kubeadm-flags.env
kubeadm --v=10
如何确定是否存在潜在的配置问题,或者我是否可以安全地忽略这些警告?
我不确定哪些文件、configmap 或日志可能对帮助我解决这个问题有用,但如果需要,我很乐意提供它们。
虽然这被否决了,但如果有人遇到同样的问题并且和我一样感到迷茫,我希望谷歌能把你带到这里:)
kubeadm
试图docker
基于节点的配置而不是 kubelet 的配置来使用,并且在迁移到时我没有更改节点的配置containerd
(因为我不知道它是在那个级别设置的)。修复:对于每个节点。在这里找到这个
该
cgroupDriver
警告是一个错误,kubeadm
可能无法修复,因为整个检查很快就会消失。所以可以忽略(如果你的 kubelet 的 conf 真的设置了 cgrouDriver)。