Короткий ответ
Graceful shutdown — корректное завершение работы сервиса при сигнале остановки: сервис прекращает принимать новые запросы, дожидается завершения текущих и закрывает ресурсы, чтобы не терять данные и не рвать запросы клиентов.
Как это работает подробнее
Процесс перехватывает сигнал (SIGTERM от Kubernetes перед удалением пода), прекращает приём новых подключений, ждёт завершения активных обработчиков (с ограничением по времени), закрывает ресурсы.
Пример кода
example.py
import signal
def handle_sigterm(signum, frame):
readiness_flag.set(False) # перестать принимать новый трафик
wait_for_inflight_requests(timeout=25)
shutdown_resources()
signal.signal(signal.SIGTERM, handle_sigterm)Что использовать на практике
- Практика. Важно для consumer'ов очередей (не бросать сообщение в середине обработки) и серверов с долгими запросами; Kubernetes даёт ограниченное время (terminationGracePeriodSeconds) до принудительного kill.
Подводные камни
- Риск. Игнорировать SIGTERM и ждать SIGKILL (in-flight запросы теряются); не выставлять под временно «не готовым» перед остановкой, из-за чего балансировщик продолжает слать трафик.