Как происходит сбой кластера Kubernetes HA в сценариях с разделением мозга между стойками?

Меня интересует поведение нескольких мастеров Kubernetes в случае различных типов отказов, особенно если мастера находятся на разных стойках.

  • Сценарий:

    • 2 стойки, R1, R2.

    • API Мастера:

      • М1 на R1, М2 на R2.
    • Рабочие узлы:

      • W1 на R1, W2 на R2.
    • Etcd:

      • Полностью отдельный кластер HA Etcd, состоящий из 3 узлов (т. Е. Он не работает на главных узлах API).

Мои неудачные вопросы в основном касаются сценариев расщепления мозга:

Что произойдет, если M1 является активным мастером, а R1 теряет связь с Etcd и R2, но R2/M2 имеет связь с Etcd? то есть что конкретно вызывает лидерские выборы?

Если на R1/W1 есть Pod P1, M1 - активный мастер, а R1 отключается от R2 и Etcd, что происходит? P1 продолжает работать или он убит? M2 запускает отдельный экземпляр P (P2) на R2? Если да, могут ли P1 и P2 работать одновременно?

Если на R2/W2 есть Pod P2, и M1 является активным ведущим (то есть, модуль находится на отдельной стойке к ведущему) и R1 теряет соединение с R2 и Etcd, что происходит с P2? Это продолжает идти, и M2 вступает во владение?

1 ответ

Решение

Мастер держит в аренду в etcd. Если срок аренды истекает, активный мастер завершает свой процесс (ожидает перезапуска). Другой мастер будет наблюдать за истечением срока аренды и пытаться получить его в etcd. До тех пор, пока M2 может достигать etcd и etcd имеет кворум, второй мастер будет тогда вступать во владение.

Что касается конкурирующих Мастеров, в целом, Kubernetes все еще использует etcd для выполнения последовательных обновлений - то есть даже два Мастера, активных в одно и то же время, все еще пытаются сделать то же самое с etcd, который имеет сильную согласованность, и поэтому обычный результат просто не удался обновления. Одним примером, где это не так, являются daemonsets и ReplicaSets - два активных мастера могут создавать несколько модулей, а затем уменьшать их, когда они осознают, что их слишком много на узел, или сравнить с желаемым масштабом. Но так как ни daemonsets, ни ReplicaSets в любом случае не гарантируют такого поведения (ReplicaSets может иметь> масштабируемые модули, работающие в любое время, daemonsets может кратко иметь по два модуля на узел), он не нарушается сам по себе.

Если вам нужно поведение по крайней мере X-pods, только StatefulSets предоставляют такую ​​гарантию сегодня.

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