Датчик готовности для statefulset, а не отдельного контейнера / контейнера
Я читал о пробах на живучесть и готовность в Куберне, и я хотел бы использовать их, чтобы проверить, не ожил ли кластер.
Вопрос в том, как настроить проверку готовности для всего набора состояний, а не для отдельного контейнера / контейнера.
Простая проверка HTTP может использоваться для определения готовности, но проблема, с которой я сталкиваюсь, заключается в том, что readinessCheck, кажется, применяется к контейнеру / модулю, а не к самому набору.
Для программного обеспечения, которое я использую, конечная точка HTTP не появляется, пока не сформируется кластер; Это означает, что каждый отдельный модуль не сможет выполнить проверку готовности, пока все три не будут найдены и не найдут друг друга.
Поведение, которое я наблюдаю в Kubernetes прямо сейчас, состоит в том, что создается первая из трех реплик, и Kubernetes даже не пытается создавать реплики 2 и 3, пока первая не пройдет проверку готовности, что никогда не происходит, потому что все три должны быть в рабочем состоянии. чтобы у него был шанс пройти его.
2 ответа
Вам нужно изменить .spec.podManagementPolicy
для StatefulSet
от OrderedReady
в Parallel
политика.
Таким образом, K8S запустит все ваши модули параллельно и не будет ждать проб.
Из документации
podManagementPolicy контролирует, как создаются модули при начальном увеличении, при замене модулей на узлах или при уменьшении. Политика по умолчанию - OrderedReady, где модули создаются в порядке возрастания (pod-0, затем pod-1 и т. Д.), И контроллер будет ждать, пока каждый модуль будет готов, прежде чем продолжить. При уменьшении стручки удаляются в обратном порядке. Альтернативная политика - Параллельная, которая будет создавать блоки параллельно, чтобы соответствовать желаемому масштабу без ожидания, а при уменьшении удалит все блоки сразу.
В дополнение к настройкам.spec.podManagementPolic: Parralel
, в statefulset может потребоваться установить.spec.publishNotReadyAddresses: true
, на управляющем безголовом сервисе, чтобы позволить модулям набора с отслеживанием состояния взаимодействовать друг с другом.
StatefulSet позволяет вам ослабить гарантии упорядочения, сохраняя при этом гарантии уникальности и идентичности с помощью поля .spec.podManagementPolicy.
ссылка: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
Кроме того, Pod должен быть готов, чтобы иметь запись, если только для службы не установлено publishNotReadyAddresses=True.
ссылка: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/