Я пытаюсь достичь 0 времени простоя при обновлении с помощью EKS (сервис AWS K8s).
У меня есть один сервер WebSocket, и я хочу убедиться, что во время непрерывного обновления этого сервера существующие соединения будут сохраняться до тех пор, пока WebSockets не будут закрыты после завершения работы.
Я думал, что функция обновлений K8s поможет мне в этом, но это не помогло. Я попытался, и он просто убил модуль, пока еще были соединения с WebSocket.
Если я правильно понимаю документ , то завершение модуля будет выглядеть так:
- Пользователь сигнализирует об удалении модуля в API K8s
- K8s прекращает маршрутизацию нового трафика на этот модуль и отправляет сигнал SIGTERM
- Приложение ДОЛЖНО обработать этот сигнал и начать постепенное завершение самого себя в указанный
grace-period
(по умолчанию 30 с)
- После этого K8s посылает сигнал SIGKILL, чтобы принудительно завершить работу модуля.
Если мое понимание выше верно, ясно, что нет никакого способа сказать K8s:
- Не прерывать текущие соединения
- Пусть они бегут столько, сколько им нужно (они в конце концов закроются, но период сильно меняется)
- Как только все соединения закрыты, завершите работу модуля
Вопрос : Есть ли какие-либо способы убедиться, что K8s:
- Не прерывает соединение с WebSocket
- Не заставляет приложение прерывать соединение в определенном
grace-period
- Обнаруживает, когда все соединения WebSocket закрыты, и уничтожает модуль
Если кто-нибудь сможет мне помочь, это будет очень признательно.