Сколько времени нужно Kubernetes, чтобы удалить завершающий модуль из конечных точек?
В нашем проекте мы используем Spring Boot в Kubernetes. Недавно мы решили добавить для нашего приложения плавное завершение работы, чтобы обеспечить плавное развертывание и убедиться, что ни один запрос не завершается неудачно во время завершения работы модуля по какой-либо причине. Несмотря на то, что Spring Boot обеспечивает плавное завершение работы, похоже, все еще существует вероятность того, что запросы могут завершиться ошибкой из-за того, что Kubernetes начинает удаление модуля из конечных точек и одновременно параллельно отправляет сигнал SIGTERM модулю. Цитата из документации kubernetes :
В то же время, когда кубелет начинает постепенное завершение работы, плоскость управления удаляет этот завершающий модуль Pod из объектов конечных точек (и, если он включен, EndpointSlice), где они представляют службу с настроенным селектором.
Это также более подробно описано здесь. Там же есть решение, которое
вы можете добавить сон в ловушку preStop спецификации модуля и, конечно же, настроить его так, чтобы он соответствовал вашему варианту использования :
В приведенном примере этот спящий режим настроен на 10 секунд, но мне интересно, какое для него разумное значение, чтобы завершение работы модуля не задерживалось без надобности?
Спасибо.
1 ответ
Кажется, что это может зависеть от ваших предпочтений, но похоже, что 5-10 секунд сна - это рекомендуемый диапазон:
В «Kubernetes in Action» Лукша рекомендует 5–10 секунд https://blog.gruntwork.io/delaying-shutdown-to-wait-for-pod-deletion-propagation-445f779a8304.