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

У нас есть набор состояний для службы (история Druid), которая кэширует большое количество данных на локальных SSD. (Мы запускаем один модуль на узел в SSD, используя порты и сходство.) Когда нам нужно заменить базовые машины, это означает, что модули запускаются с пустыми локальными дисками, а затем им требуется некоторое время для заполнения кешей. В идеале мы хотим только выполнить плановую замену узлов (например, обновление пула узлов GKE) по одному узлу за раз и подождать, пока модуль на новом узле полностью не заполнит кэш, прежде чем развернуть следующий узел.

Итак, это означает, что нам нужно установить PodDisruptionBudget, равный 1, и настроить проверку готовности, чтобы сделать новый узел не готовым, пока кэш не будет заполнен.

Проблема в том, что система на самом деле не дает нам отличного способа задать вопрос: "pod X загрузил все необходимое для полной репликации системы в целом".

Давайте спросим, ​​"полностью ли реплицирована вся система?".

Поэтому у нас возникает соблазн написать тест готовности, который говорит: "Не готов, если вся система полностью не реплицирована". Но это означает, что во время обновлений пула узлов (или в других коротких случаях с краткими "не полностью реплицированными" состояниями) каждый модуль в наборе состояний будет не готов.

Мой вопрос таков: я не совсем понимаю все значения каждой части k8, которая обращается к статусу Ready. Было бы плохо, если бы каждый модуль в SS становился не готовым, пока один модуль загружается?

Насколько я понимаю, готовность используется для таких вещей, как управление темпом развертывания Deployment или StatefulSet (что здесь хорошо), и что он также используется для того, чтобы Службы определяли, к каким модулям следует направлять. В этом случае мы фактически не используем Сервис, связанный с StatefulSet для маршрутизации (клиенты подключаются напрямую к отдельным модулям). Так что кажется, что на самом деле все может быть хорошо. Но так ли это? Или есть другие приложения в состоянии "Готов", из-за которых нам было бы плохо помечать все модули как не готовые, пока глобальная репликация не достигает 100%?

0 ответов

Я не могу ответить на ваши вопросы об общих последствиях проверки готовности к Kubernetes, но мне довелось знать ваше заявление (Друид) довольно хорошо.

Я считаю, что ваше предположение неверно. Вы говорите, что нет способа спросить у отдельного исторического узла его статус относительно загрузки сегментов из глубокого хранилища, но на самом деле есть такой API:

/druid/historical/v1/readiness а также связанные/druid/historical/v1/loadstatus

как описано здесь: https://druid.apache.org/docs/latest/operations/api-reference.html

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