Как я могу безопасно смонтировать NFS /var /lib /kubelet в кластере kubernetes с бездисковыми рабочими узлами?

#kubernetes #kubeadm #kubelet

#kubernetes #kubeadm #kubelet

Вопрос:

Фон:

У меня есть голый металлический кластер Kubernetes. Главный узел заполнен дисками, однако все рабочие узлы бездисковые, и PXE загружается с компьютера, который предоставляет их образ ОС и энергонезависимые точки монтирования NFS.

На раннем этапе мы обнаружили, что нам нужно какое-то энергонезависимое хранилище, чтобы бездисковые узлы могли хранить свои конфигурации, секреты kubernetes, ключи SSL и т. Д… Без энергонезависимого хранилища узлы пришлось бы удалять и присоединять к кластеру каждый раз при перезагрузке, что, очевидно, является проблемой.

Итак, мы создали разделы монтирования NFS для /etc/kubernetes и /var/lib/kubelet, чтобы узлы могли запомнить, кем они были, и воссоединиться с кластером после перезагрузки.

Проблема:

Однако мы столкнулись с проблемой с kubeadm: он отключает / перемонтирует /var/lib /kubelet всякий раз, когда вы запускаете kubeadm join. Это приводит к тому, что kubelet начинает блевать и умирает, потому что он не может найти подходящее устройство. Конкретная ошибка заключается в следующем:

 node6 kubelet: F0113 18:08:55.196706  210949 kubelet.go:1347] Failed to start ContainerManager failed to get rootfs info: failed to get device for dir "/var/lib/kubelet": could not find dev
ice with major: 0, minor: 46 in cached partitions map
 

Если мы размонтируем монтирование NFS для /var/lib/kubelet перед запуском kubeadm join , это работает просто отлично, но возвращает нас к нашей первоначальной проблеме: бездисковый узел не выдержит перезагрузки и автоматически присоединится к кластеру.

Мы попытались обойти это, изменив корневой каталог k8s kubelet, но это все равно приводит к тому же сбою, когда kubelet путается в устройстве.

Итак, мой вопрос заключается в следующем:

Как я могу правильно настроить точку монтирования NFS для /var/lib /kubelet или иным образом настроить kubelet на своих бездисковых рабочих узлах, чтобы даже когда kubeadm монтирует / размонтирует эту точку, я не получал сбой, а установочные файлы kubeadm были энергонезависимыми?

Ответ №1:

Это известная проблема, но, к счастью, она исправлена всего пару дней назад — https://github.com/google/cadvisor/pull/2787 .

Это еще не было включено в релиз. Хотя это может привести к 1.20.x, не совсем уверен в предыдущих версиях. Возможно, потребуется запросить бэкпорт по проблеме на https://github.com/kubernetes/kubernetes/issues/98009 если потребуется.