Настроить Kubernetes StatefulSet для запуска модулей Сначала перезапустить отказавшие контейнеры после запуска?
Базовая информация
Привет, я столкнулся с проблемой с Kubernetes StatefulSets. Я пытаюсь раскрутить набор с 3 репликами. Каждый из этих реплик / модулей имеет контейнер, который отправляет эхо-запрос на контейнер в других модулях на основе их идентификатора сети. Контейнер требует ответа от всех контейнеров. Если он не получит ответ, контейнер потерпит неудачу. В моей ситуации мне нужно 3 pods/replicas для моей настройки для работы.
Описание проблемы
Что происходит, это следующее. Kubernetes начинает 2 стручка довольно быстро. Однако, поскольку мне нужно 3 модуля для полнофункционального кластера, первые 2 модуля продолжают падать, так как третий еще не запущен. По какой-то причине Kubernetes предпочитает перезапускать оба модуля вместо добавления третьего модуля, чтобы мой кластер работал.
Примерно через 15 минут я увидел, что моя установка работает правильно, потому что к тому времени Kubernetes добавил третий модуль.
Вопрос
Итак, мой вопрос.
Кто-нибудь знает способ отложить перезапуск отказавших контейнеров до тех пор, пока не будет загружено нужное количество модулей / реплик?
2 ответа
С тех пор я выяснил причину этого. StatefulSets запускает модули в определенном порядке. Если один из модулей не запускается, он не запускает следующий.
Вы можете добавить podManagementPolicy: "Parallel"
запускать модули, не дожидаясь появления предыдущих модулей Running
, Смотрите эту документацию
Я думаю, что лучший способ справиться с вашей проблемой - использовать датчик живучести, как описано в документе, а не откладывать время перезапуска (не настраивается в YAML).
Ваши стручки реагируют на проверку живучести сразу после того, как они начинают сообщать Kubernetes, что они живы, что предотвращает их перезапуск. Тем временем ваши стручки продолжают пинговать других, пока они не встанут. Только когда все ваши модули запущены, внешние запросы будут обслуживаться. Это похоже на создание ансамбля Zookeeper.