StatefulSet воссоздает модуль, почему? - PullRequest
1 голос
/ 09 января 2020

У меня есть мое развертывание, где я определил postgres statefulSet, однако у меня есть его без PV C, так что если pod мертв - все данные исчезли. Если я перечислю все модули, которые я вижу на картинке ниже:

pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 10 min

Через какое-то время я снова перечислю модули и посмотрим ниже:

pod1 - Running - 10 min
pod2 - Running - 10 min
postgresPod - Running - 5 min

Как вы можете видеть, что postgresPod работает 5 минут. Я «описал» набор состояний и вижу там:

Type     Reason               Age                From                    Message
  ----     ------               ----               ----                    -------
  Normal   SuccessfulCreate     5m **(x2 over 10m)**  statefulset-controller  create Pod postgresPod in StatefulSet x-postgres successful
  Warning  RecreatingFailedPod  5m                statefulset-controller  StatefulSet xx/x-postgres is recreating failed Pod postgresPod
  Normal   SuccessfulDelete     5m                statefulset-controller  **delete Pod postgresPod** in StatefulSet x-postgres successful

Итак, мой вопрос: как я могу узнать , почему statefulSet воссоздает модули? Есть ли дополнительный журнал? Может быть, это как-то связано с ресурсами машин, или модуль был создан на другом узле, у которого есть больше ресурсов на этот конкретный момент c

Есть идеи?

1 Ответ

0 голосов
/ 09 января 2020

Вы должны рассмотреть две вещи:

  1. Отладочные блоки

Проверьте текущее состояние модуля и последние события с помощью следующая команда:

kubectl describe pods ${POD_NAME} Посмотрите на состояние контейнеров в модуле. Они все бегут? Были ли недавние перезапуски?

Продолжить отладку в зависимости от состояния модулей.

Особенно внимательно посмотрите на , почему модуль упал .

Более подробную информацию можно найти в предоставленных мною ссылках.

Debug StatefulSets.

StatefulSets предоставляют механизм отладки для приостановки всех операций контроллера на модулях с помощью аннотации. Установка аннотации pod.alpha.kubernetes.io/initialized в false на любом модуле StatefulSet приостановит все операции StatefulSet. Когда пауза, StatefulSet не будет выполнять никаких операций масштабирования. Как только отладочный хук установлен, вы можете выполнять команды в контейнерах модулей StatefulSet без вмешательства со стороны операций масштабирования. Вы можете установить аннотацию на «ложь», выполнив следующее:

kubectl annotate pods <pod-name> pod.alpha.kubernetes.io/initialized="false" --overwrite

Когда аннотация установлена ​​на «ложь», StatefulSet не будет реагировать на то, что его модули не работают или недоступен. Он не будет создавать блоки замены, пока аннотация не будет удалена или не установлена ​​на «true» на каждом модуле StatefulSet.

Пожалуйста, дайте мне знать, если это помогло.

...