См. Документацию here.
Kubernetes (версии 1.5 или более поздней версии) не будут удалены Бобы только потому, что узел недоступен. Подсеты, запущенные на недоступном узле, вводят состояние «Прекращение» или «Неизвестное» после таймаута. Pods также могут вводить эти состояния, когда пользователь пытается изящно удалить Pod на недоступном узле. Единственные способы, в которых Pod в такое состояние может быть удалены из apiserver следующим образом:
- Объект Node удаляется (либо вами, либо контроллером узла).
- Кубелет на неответчивом узле начинает отвечать, убивает Подгруппу и удаляет запись из привратника.
- Удаление пользователя пользователем Pod.
Это было изменение поведения введено в kubernetes 1,5, что позволяет StatefulSet приоритеты безопасности.
Там нет никакого способа, чтобы различать следующие случаи:
- Экземпляр закрываются без объекта Node удаляется.
- Сетевой раздел вводится между рассматриваемым узлом и кубернетом-мастером.
Оба эти случая рассматриваются как кубель на узле, не отвечающем мастером Кубернетов. Если во втором случае мы должны были быстро создать заменяющий блок на другом узле, мы можем нарушить семантику максимально-одного, гарантированную StatefulSet, и иметь несколько контейнеров с одинаковым идентификатором, работающим на разных узлах. В худшем случае это может привести даже к разрыву мозгов и потери данных при запуске приложений Stateful.
В большинстве поставщиков облачных вычислений, когда экземпляр удаляется, Кубернетес может выяснить, что узел также удален, и, следовательно, пакет StatefulSet будет воссоздан в другом месте.
Однако, если вы используете on-prem, это может не произойти. Рекомендуется удалять объект Node из кубернетов при его выключении или иметь цикл согласования, сохраняя идею Kubernetes Nodes в синхронизации с фактическими доступными узлами.
Еще один контекст находится в github issue.