HA-кластер microk8s: аварийное переключение узла зависит от того, какой узел выходит из строя

Ахой,

Я пытаюсь добиться быстрого аварийного переключения в HA-кластере microk8s с 3 узлами. Мои три узла — это виртуальные машины, которые я просто останавливаю, чтобы имитировать жесткое отключение и посмотреть, продолжает ли работать мое приложение и/или перепланируются ли соответствующие модули с небольшим временем простоя. Теперь мне кажется, что функционирование кластера зависит от того, какой узел я останавливаю , и я понятия не имею, как отладить точную проблему. Я считаю, что моя проблема может быть связана с тем, где работают контроллеры для DNS, сети и балансировки нагрузки, но я не совсем уверен.

Я использую Ubuntu 20.04.5 LTS с microk8s v1.25.2 из ветки 1.25/stable. Для тестирования я запускаю только развертывание nginx с 2 репликами и соответствующей службой LoadBalancer для отправки GET-запросов в качестве замены для моего приложения. Включены следующие microk8s-аддоны:

          dns                  # (core) CoreDNS
    ha-cluster           # (core) Configure high availability on the current node
    metallb              # (core) Loadbalancer for your Kubernetes cluster

Чтобы kubernetes мог довольно быстро справляться с потерей узла, я скорректировал следующие параметры в/var/snap/microk8s/current/args/

      kube-apiserver:
      --default-not-ready-toleration-seconds=10
      --default-unreachable-toleration-seconds=10

kube-controller-manager:
      --pod-eviction-timeout=10s
      --node-monitor-grace-period=10s
      --node-monitor-period=3s

kubelet:
      --node-status-update-frequency 5s

С этими параметрами kubernetes реализует намного быстрее (чем по умолчанию), когда узел не работает, а затем переназначает модули на «Готовые» узлы. У меня нет подов, управляемых statefulsets, поэтому не запрещено перепланировать любой из подов.

Затем мне не терпелось поставить галочку в моем списке TODO — быстрое восстановление после отказа, казалось, работало — пока я не провел еще несколько тестов, останавливая узлы (всегда только по одному за раз), и обнаружил, что иногда два или даже все три узла становятся неактивными . «Не готов» (я всегда слежу за своими узлами и модулями, запускаяна одном из неостановленных узлов).

Поскольку я выполняю эти тесты вручную — останавливая один узел, ожидая, что произойдет с узлами и модулями в kubectl-output — я не совсем уверен, в чем проблема, т.е. моя статистика плохая, но мне кажется , что если «контроллер»-модули критических надстроек находятся на одном узле и этот узел остановлен, кластер не сможет восстановиться(быстрый). Например, только что у меня были поды (сокращенные имена) calico-kube-controllers (cni), coredns (dns) и контроллер (loadbalancer) (все они не имеют дополнительных реплик) на узле-2. Затем остановка узла-2 привела к тому, что все три узла перешли в состояние «Не готов» примерно через минуту (запросы nginx были успешно выполнены примерно на 50% после остановки одного узла, как и следовало ожидать). Примерно через 15 минут два неостановленных узла снова стали «Готовыми», а модули «контроллер» (и одна из реплик nginx) были переназначены на эти узлы, и все было в порядке. Тем не менее, у меня были такие дистрибутивы подов раньше, и иногда только два или (в ожидаемом случае) один узел переходят в состояние «Не готов», иногда, даже если поды перепланируются, они попадают в CrashBackoffLoops на своем новом узле без восстановления. И,

Я попытался определить проблему с помощью(где я не вижу ничего связанного, кроме события «Node node-1 status is now: NodeNotReady»), поиск готов во всех /var/log (где я не нахожу ничего за период времени, связанного с моими тестами), смотрю в(где все кажется прекрасным) и поиск и просмотр(где, честно говоря, я не могу интерпретировать, что происходит, но это не кричит «ошибка» или «сбой» в явно связанной записи).

В общем, я потерян. Я не знаю, где искать и на что точно определить проблему (ы), я не знаю, связана ли проблема вообще с «контроллерами»-модулями, и я, честно говоря, немного озадачен тем, что это даже заявляет проблема (я думал иметь эту работу и есть смысл микрок8с с ха-кластером, ну и вообще к8с). Так что, если кто-нибудь может намекнуть мне в правильном направлении, я был бы очень признателен.

0 ответов

Другие вопросы по тегам