Набор с отслеживанием состояния Kubernetes: убить под, если контейнер умирает - PullRequest
2 голосов
/ 13 июля 2020

У меня есть ситуация, когда мы используем модули с отслеживанием состояния, и мне нужно убить модуль, когда контейнер умирает. Политика перезапуска: «Никогда» не работает для наборов с отслеживанием состояния.

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

Также, можем ли мы справиться с этой ситуацией с несколькими контейнерами?

1 Ответ

2 голосов
/ 13 июля 2020

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

Не совсем, если вы используете StatefulSets. Оператор Kubernetes сделает то же самое: убьет модуль, и Kubernetes перезапустит его. Вы можете сделать так, чтобы он изменял ваш набор с отслеживанием состояния и удалял реплику, но StatefulSets имеет порядковый номер, так что скажем, даже если у вас есть 10 реплик и вы измените его на 8, тогда ваши порядковые номера, которые будут удалены, будут 9 и 10, а те могут быть не те модули, которые вы хотели бы удалить.

Тем не менее, вы можете создать своего собственного оператора, который будет управлять модулями самостоятельно с помощью собственного контроллера. Это без использования каких-либо контроллеров Kubernetes, таких как наборы реплик, развертывания, наборы состояний, задания и т. Д. c. Это будет просто что-то уникальное для ваших рабочих нагрузок и определит, когда модули будут перезапущены, удалены и т. Д. c. Если вы хотите использовать go по этому маршруту, есть несколько проектов, которые помогут вам начать работу:

Также, можем ли мы справиться с этой ситуацией с несколькими контейнерами?

С оператором все зависит от вас. Вы всегда можете выбрать перезапуск «Никогда», но самый низкий общий знаменатель рабочей нагрузки в Kubernetes - это под. Другими словами, если у вас есть 3 контейнера в модуле и 2 из них работают, но 1 из них не работает, модуль не будет «готов»

...