Ответ
Для обеспечения отказоустойчивости и высокой доступности control plane в Kubernetes рекомендуется развертывать нечетное количество мастер-узлов, обычно 3 для средних кластеров или 5 для крупных, высоконагруженных сред.
Причины и механизм:
-
Консенсус в etcd: Состояние кластера хранится в распределенном key-value хранилище etcd, которое для согласованности данных использует алгоритм консенсуса Raft. Raft требует, чтобы для любых операций записи был достигнут кворум – большинство членов кластера (
N/2 + 1). -
Анализ вариантов:
- 1 мастер: Single point of failure. При падении узла control plane полностью недоступен.
- 2 мастера: Проблема split-brain. При потере связи между узлами ни один из них не сможет достичь кворума (нужно 2 из 2), что приведет к невозможности записи. Кластер заморозится.
- 3 мастера: Это минимальное рекомендуемое количество. Кворум составляет 2 (
3/2 + 1 = 2). Кластер может пережить отказ одного мастера, сохраняя возможность записи и чтения. - 5 мастеров: Кворум составляет 3. Кластер может пережить отказ двух узлов одновременно, что повышает отказоустойчивость, но увеличивает сложность и стоимость.
Практический пример развертывания: При инициализации кластера с помощью kubeadm сначала настраивается первый control-plane узел, а затем к нему присоединяются остальные, образуя отказоустойчивый кластер.
# Инициализация первого control-plane узла с указанием endpoint для балансировщика нагрузки
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" --upload-certs
# Присоединение второго и третьего control-plane узлов
kubeadm join LOAD_BALANCER_DNS:6443 --token <token>
--discovery-token-ca-cert-hash <hash>
--control-plane
--certificate-key <key-from-init>
Трафик к API-серверу мастер-узлов обычно балансируется через внешний Load Balancer (например, облачный NLB или HAProxy).
Ответ 18+ 🔞
Давай разберём эту тему, чтобы у тебя в голове всё встало на свои места, а не болталось как хуй с горы. Речь про то, как сделать так, чтобы твой кубернетис не накрылся медным тазом от первой же поломки.
Вот смотри. Главная мысль, которую нужно вбить себе в башку: ставь нечётное количество мастеров. Обычно это три штуки для нормальных проектов или пять, если у тебя там овердохуища трафика и ты готов за это платить. А теперь, ёпта, почему именно так?
Всё дело в этой сущности под названием etcd. Это такая база, куда кластер пишет всё своё состояние — что, где и как крутится. А работает она на алгоритме Raft, которому для любой записи нужно, чтобы большинство нод сказали «да, окей». Это и есть кворум.
Теперь представь на пальцах:
- Один мастер — это пиздец и точка. Упал — и всё, кластеру конец. Доверия к такой схеме — ноль ебать.
- Два мастера — вот тут начинается цирк. Допустим, они потеряли связь друг с другом. Каждый из них будет думать: «А второй-то, наверное, сдох. Значит, я тут теперь главный!». Но чтобы что-то решить, им нужен кворум — то есть оба должны быть «за». А так как они не общаются, ни один не может ничего записать. Кластер встаёт колом. Хуйня полная.
- Три мастера — вот это уже дело. Кворум тут — два нода (3/2 + 1 = 2). Это значит, что один узел может спокойно откинуться — от перегрева, от безысходности, потому что криво настроил — а остальные двое продолжат рулить и принимать решения. Отказоустойчивость появилась, можно выдохнуть.
- Пять мастеров — это для параноиков или для тех, у кого реально всё очень серьёзно. Тут кворум — три. Можно потерять сразу два узла, и кластер всё ещё будет жив. Но и мороки с ними в пять раз больше, это ж не хухры-мухры.
Ну а на практике это выглядит так: сначала ты поднимаешь первого мастера, а потом к нему, как мартышлюшки на лиану, цепляешь остальных. И обязательно ставишь перед ними балансировщик (типа HAProxy или облачного NLB), чтобы трафик к API не тыкался в одну ноду, а распределялся нормально.
Вот пример, как это обычно делают через kubeadm:
# Поднимаем первого босса, главного мастера
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:6443" --upload-certs
# А теперь подтягиваем остальных пацанов в кворум
kubeadm join LOAD_BALANCER_DNS:6443 --token <token>
--discovery-token-ca-cert-hash <hash>
--control-plane
--certificate-key <key-from-init>
Вот и вся магия. Главное — запомни: чётное количество мастеров это путь в никуда, почти как пытаться собрать мебель из IKEA без инструкции — вроде детали есть, а хуй соберёшь. Ставь три и спи спокойно.