Как происходит сбой кластера 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 предоставляют такую гарантию сегодня.