我运行一个安装了 的 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,但是我没有在文档或本地配置中找到正确的选项,除非--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
,还有和中的标志,它甚至是由打印的!kubectl -n kube-system get cm kubelet-config-1.20 -o yaml
/var/lib/kubelet/config.yaml
/etc/default/kubelet
/var/lib/kubelet/kubeadm-flags.env
kubeadm --v=10
我如何才能找出是否存在潜在的配置问题,或者我是否可以安全地忽略这些警告?
我不确定哪些文件、配置图或日志可以帮助我解决这个问题,但如果需要的话我很乐意提供它们。
答案1
尽管这被否决了,但如果有人遇到同样的问题并且像我一样感到迷茫,我希望谷歌可以引导你到这里:)
kubeadm
尝试使用docker
基于节点的配置而不是 kubelet 的配置,并且我在迁移时没有更改节点的配置containerd
(因为我不知道它是在该级别设置的)。修复方法:kubectl annotate node $node --overwrite kubeadm.alpha.kubernetes.io/cri-socket=unix:///run/containerd/containerd.sock
对于每个节点。找到了这个这里
该
cgroupDriver
警告是漏洞这个kubeadm
问题可能不会得到解决,因为整个检查很快就会消失。因此可以忽略它(如果您的 kubelet 的配置确实设置了 cgrouDriver)。