Я запускаю кластер 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
. Он не обнаруживает настройки драйвера cgroup:
Значение 'cgroupDriver' в KubeletConfiguration пустое. Начиная с версии 1.22, 'kubeadm upgrade' будет по умолчанию устанавливать пустое значение для драйвера cgroup 'systemd'. Драйвер cgroup между средой выполнения контейнера и кубелетом должен совпадать!
Это действительно удивительно, потому что у меня есть 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
!
Как я могу выяснить, есть ли проблема с конфигурацией, или я могу спокойно игнорировать эти предупреждения?
Я не уверен, какие файлы, configmap или журналы могут быть полезны, чтобы помочь мне решить это, но я с радостью предоставлю их, если потребуется.
Хотя это было проголосовано, в случае, если у кого-то возникнет такая же проблема и он будет чувствовать себя таким же потерянным, как и я, я надеюсь, что google приведет вас сюда: )
kubeadm
пытался использовать docker
на основе конфигурации узла, а не конфигурации кубелета, и я не изменил конфигурацию узлов при переходе на containerd
(поскольку не знал, что она задана на этом уровне). Исправьте с помощью:
kubectl annotate node $node --overwrite kubeadm.alpha.kubernetes.io/cri-socket=unix:///run/containerd/containerd.sock
для каждого узла. Нашел это здесь
Предупреждение cgroupDriver
- это ошибка в kubeadm
, которая, вероятно, не будет исправлена, потому что вся проверка скоро закончится. Так что его можно игнорировать (если в конфиге вашего кубелета действительно задан cgrouDriver).