Восстановление после запуска при запуске Kubernetes StatefulSet

Kubernetes StatefulSet (v1.8) автоматически перенесет модули, которыми он управляет, на новый образ, если вы исправите имя образа в спецификации StatefulSet - в конце концов, организация такого рода обновлений является одной из его основных задач. Тем не менее, если развертывание исправленного изображения завершается неудачно на этапе извлечения изображения (скажем, в имени изображения произошла опечатка, поэтому изображение не нужно извлекать), первый модуль, который он пытается перезапустить с новым изображением, застревает в Состояние ImagePullBackOff и опрокидывание прекращается. Это хорошо, это в значительной степени то, что вы хотите и ожидаете. Тем не менее, если вы затем исправите спецификацию StatefulSet снова, чтобы исправить ошибку, набор не будет восстановлен - он просто будет находиться в поврежденном состоянии - до тех пор, пока вы (вручную) не удалите неисправный модуль, после чего все будет работать так, как должно. и все это возвращается к здоровому состоянию.

Я думаю, что должен быть способ настроить вещи так, чтобы этот вид восстановления происходил автоматически при обновлении имени образа, так же, как это происходит для обычного развертывания, а не требует ручного вмешательства (особенно потому, что это для CI- Тип приложения, где все это должно быть автоматизировано в любом случае). Я не могу удержаться, но чувствую, что просто не могу найти правильный вариант в документации, но просмотр документов и бесконечный поиск в Google не выявили рецепт победы. Есть ли способ настроить такое восстановление автоматически, и если да, то что это?

Если это не удастся, есть ли изящный способ автоматизировать обнаружение сбойного состояния, чтобы инициировать удаление сбойного модуля по сценарию? Все, что я пробовал, кажется действительно грязным, с большим количеством опросов и специальных тайм-аутов, так что мне трудно поверить, что это правильный способ сделать это.

1 ответ

Я поднял ту же проблему на GitHub. Ответ прямо сейчас заключается в том, что нет, для этого нет выбора, и, вероятно, отсутствует документация. Мы начинаем обсуждение, чтобы увидеть, есть ли способ улучшить это. Прямо сейчас обходные пути, вероятно, будут опираться на опрос и тайм-ауты. Однако это зависит от того, как вы в первую очередь развертываете StatefulSet. Некоторые инструменты развертывания (например, Helm с --wait опция) может быть настроена на ожидание запуска всех модулей.

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