Об отказоустойчивости KUMA
Отказоустойчивость KUMA обеспечивается путем внедрения Ядра KUMA в кластер Kubernetes, развернутый установщиком KUMA, а также использования внешнего балансировщика TCP-трафика.
В Kubernetes существует 2 роли узлов:
- контроллеры (control-plane) – узлы с данной ролью управляют кластером, хранят метаданные, распределяют рабочую нагрузку.
- рабочие (worker) – узлы с этой ролью несут полезную рабочую нагрузку, то есть размещают процессы KUMA.
Подробнее о требованиях к узлам кластера.
Для продуктивных инсталляций Ядра KUMA на Kubernetes критически важно выделить 3 обособленных узла с единственной ролью контроллера. Это позволит обеспечить отказоустойчивость самого кластера Kubernetes и гарантировать, что рабочая нагрузка (процессы KUMA и другие) не повлияет на задачи, связанные с управлением кластером Kubernetes. При этом, в случае использования средств виртуализации, следует убедиться, что данные узлы размещены на разных физических серверах и что на тех же физических серверах не присутствуют рабочие узлы.
В тех случаях, когда KUMA установлена для демонстрации, допускается использование узлов, которые совмещают роли контроллера и рабочего узла. Однако при расширении установки до распределенной необходимо переустановить кластер Kubernetes целиком, выделив 3 отдельных узла с ролью контроллера и, как минимум, 2 узла с ролью рабочего узла. Обновление KUMA до следующих версий при наличии узлов, совмещающих роли контроллера и рабочего узла, недоступно.
Совмещайте разные роли на одном узле кластера только при демонстрационном развертывании программы.
Доступность Ядра KUMA при различных сценариях:
- Выход из строя или отключение от сети рабочего узла, на котором развернут сервис Ядра KUMA.
Доступ к веб-интерфейсу KUMA пропадает. Через 6 минут Kubernetes инициирует перенос контейнера с Ядром на работающий узел кластера. После завершения развертывания, которое занимает менее одной минуты, веб-интерфейс KUMA снова доступен по URL, в которых используются FQDN балансировщика. Чтобы определить, на каком из хостов работает Ядро, в терминале одного из контроллеров выполните команду:
k0s kubectl get pod -n kuma -o wide
Когда вышедший из строя рабочий узел или доступ к нему восстанавливается, контейнер с Ядром не переносится с текущего рабочего узла. Восстановленный узел может участвовать в репликации дискового тома сервиса Ядра.
- Выход из строя или отключение от сети рабочего узла с репликой диска Ядра KUMA, на котором в данный момент не развернут сервис Ядра.
Доступ к веб-интерфейсу KUMA не пропадает по URL, в которых используется FQDN балансировщика. Сетевое хранилище создает реплику работающего дискового тома Ядра на других работающих узлах. При доступе к KUMA через URL с FQDN работающих узлов перерыва также не возникает.
- Потеря доступности одного или нескольких контроллеров кластера при сохранении кворума.
Рабочие узлы работают в обычном режиме. Перерыва в доступе к KUMA не возникает. Выход из строя контроллеров кластера, при котором кворум не обеспечивается оставшимися в работе контроллерами, ведет к потере управления кластером.
Соответствие количества используемых машин для обеспечения отказоустойчивости
Количество контроллеров при установке кластера
Минимальное количество контроллеров, необходимое для работы кластера (кворум)
Возможное количество неработающих контроллеров
1
1
0
2
2
0
3
2
1
4
3
1
5
3
2
6
4
2
7
4
3
8
5
3
9
5
4
- Одновременный выход из строя всех контроллеров кластера Kubernetes.
Кластером невозможно управлять, из-за чего его работоспособность будет нарушена.
- Одновременная потеря доступности всех рабочих узлов кластера с репликами тома Ядра и подом Ядра.
Доступ к веб-интерфейсу KUMA пропадает. Если утеряны все реплики, будет потеряна информация.