Docker

從 docker 遷移到 containerd 後 kubeadm 中的警告

  • April 22, 2021

我執行一個 Kubernetes 集群,安裝了kubeadm. 我最近從 1.19 升級到 1.20 並將容器執行時從 遷移dockercontainerd,因為docker現在已棄用。

我配置containerdkubelet使用它,並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: systemdin kubectl -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 或日誌可能對幫助我解決這個問題有用,但如果需要,我很樂意提供它們。

雖然這被否決了,但如果有人遇到同樣的問題並且和我一樣感到迷茫,我希望Google能把你帶到這裡:)

  • kubeadm試圖docker基於節點的配置而不是 kubelet 的配置來使用,並且在遷移到時我沒有更改節點的配置containerd(因為我不知道它是在那個級別設置的)。修復:
kubectl annotate node $node --overwrite kubeadm.alpha.kubernetes.io/cri-socket=unix:///run/containerd/containerd.sock

對於每個節點。在這裡找到這個

  • cgroupDriver警告是一個錯誤kubeadm可能無法修復,因為整個檢查很快就會消失。所以可以忽略(如果你的 kubelet 的 conf 真的設置了 cgrouDriver)。

引用自:https://serverfault.com/questions/1061205