Я хочу выполнить автоматическое обновление прокрутки кластера Kubernetes таким образом, чтобы он не знал подробностей о приложениях, запущенных в кластере.В принципе, PodDisruptionBudget должен облегчить это.
Вот загвоздка: на этом кластере Kubernetes работает кластер Elasticsearch, и я не могу найти способ правильно выразить «ОК, чтобы высвободить сигнал ES Pod».В частности, это, кажется, тот случай, когда сигналы "этот Pod могут принимать трафик" и "этот Pod могут быть выселены" не могут быть оба представлены как readinessProbe
.
ThisИндексы ES-кластера имеют number_of_replicas: 1
, а есть PDB с maxUnavailable: 1
.Каждый из модулей ES определяет тест готовности, который запрашивает /_cluster/health?wait_for_status=yellow
.
«Как есть», если мы исключаем модуль ES, модуль замены заменяет кластер ES, запускается и возвращается в состояние готовности, покаКластер ES в целом по-прежнему желтый и реплицирует осколки (и, следовательно, все еще небезопасно выселять какие-либо дополнительные блоки ES).
Кто-нибудь успешно справлялся с этим?Я неправильно понимаю семантику зондов / PDB?
Некоторые варианты, которые мы рассмотрели:
- Использование
wait_for_status=green
в тесте готовности означало бы, что все Блоки ES становятся не готовыми, когда состояние кластера ES имеет желтый цвет. - Увеличение индексов ES с
number_of_replicas
до 2
лишь незначительно снижает вероятность повторного обновления, повреждающего кластер ES (допустим, эти осколкимедленно копируются). - То же самое с установкой большого
initialDelaySeconds
на readinessProbe
.Это может привести к тому, что время завершения репликации осколка будет меньше. - То же самое с использованием крюка
preStop
( - это подход, который, по-видимому, занимает диаграмма Хелма сообщества ) и длинныйльготный период. - Уменьшение значения
maxUnavailable
до 0
PDB означает, что непрерывное обновление должно запускаться человеком, который может удалить PDB, оценить состояние кластера ES и т. д. - Гипотетический,
evictablenessProbe
, который проверил wait_for_status=green
, будет работать, но такого API не существует.