Веб-версияОткрыть в Telegram

Пост🛑 Не убивай меня сразу! Настраиваем Graceful Shutdown

28 января 2026
Б
Библиотека девопса | DevOps, SRE, Sysadmin
🛑 Не убивай меня сразу! Настраиваем Graceful Shutdown Коллеги, бывало такое? Вы делаете kubectl rollout restart, Kubernetes обещает бесшовное обновление, но в момент переключения подов пару юзеров все равно ловят 502 Bad Gateway или обрывы соединений. Проблема часто не в балансировщике, а в том, что ваше приложение не умеет "красиво уходить" (Graceful Shutdown). Когда Kubernetes хочет остановить под, происходит следующий танец: 1. K8s посылает процессу сигнал SIGTERM. 2. K8s ждет terminationGracePeriodSeconds (по дефолту 30 сек). 3. Если процесс еще жив -прилетает SIGKILL (выстрел в голову). ❌ Как делают новички Приложение получает SIGTERM и... мгновенно закрывается. 🔘Результат: Все запросы, которые обрабатывались в эту миллисекунду (транзакция в БД, загрузка файла), обрываются. Клиент получает ошибку. ✅ Как надо (Уровень Code) Приложение должно перехватывать SIGTERM. Получив сигнал, оно должно: 1. Перестать принимать новые соединения. 2. Дождаться завершения текущих запросов. 3. Закрыть коннекты к БД/очередям. 4. Выйти (exit 0). 💀 Скрытая проблема Kubernetes (Race Condition) Даже если ваш код идеален, вы все равно можете словить 502. Почему? В тот момент, когда K8s посылает SIGTERM, он параллельно начинает удалять IP пода из Endpoints (Service). Это асинхронный процесс. Может случиться так, что Ingress Controller все еще шлет трафик на под, а приложение уже получило SIGTERM и закрыло порт. 💊 Решение: "The Sleep Hack" Как бы глупо это ни звучало, но best practice в мире K8s - это вставить небольшую паузу перед остановкой. Мы используем preStop хук. Он выполняется ДО отправки SIGTERM. lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 5"] Что это дает? 1. K8s запускает хук: sleep 5. 2. Под помечается как Terminating. 3. За эти 5 секунд Ingress/Service успевают обновить свои таблицы маршрутизации и перестают слать новый трафик на этот под. 4. sleep заканчивается -> летит SIGTERM -> приложение спокойно доделывает старые запросы -> Profit! 🚀 ⚙️ Чек-лист для идеального деплоя: 1. В коде обработан SIGTERM. 2. В K8s добавлен preStop хук со слипом (5-10 сек). 3. terminationGracePeriodSeconds выставлен с запасом (напр. 60 сек, если у вас долгие запросы), чтобы SIGKILL не прилетел слишком рано. Уважайте своих пользователей, не сбрасывайте их сессии посередине оплаты! 😉 #k8s #devops #architecture #go #python #bestpractices Подпишись 👉@devopslib
19 · 722 ·

Рядом в ленте

ББиблиотека девопса | DevOps, SRE, Sysadmin🐳 Хватит тащить curl и vim в продакшн! (Используем Ephemeral Containers) Салют, коллеги, всех с прошедшими праздниками! 👋 Сколько раз я видел Dockerfile, которыББиблиотека девопса | DevOps, SRE, Sysadmin🚑 HEALTHCHECK: Спасательный круг или выстрел в ногу? Продолжаем тему стабильности. Сегодня про Healthchecks (в Docker) и Probes (в K8s). Казалось бы, что сложно
это сообщение
ББиблиотека девопса | DevOps, SRE, Sysadmin⚖️ Requests vs Limits: Почему твой под тормозит на пустой ноде? Всем привет! 👋 Сегодня о наболевшем - о ресурсах в Kubernetes. Я часто вижу манифесты, где секциББиблиотека девопса | DevOps, SRE, Sysadmin🥊 Helm vs Kustomize: Вечная битва или идеальный симбиоз? Салют! 👋 Сегодня затронем тему, из-за которой в курилках девопсов доходит до драки. Как управлять маниф
ББиблиотека девопса | DevOps, SRE, SysadminБиблиотека девопса | DevOps, SRE, Sysadmin@devopslib · канал · Технологии
1 267подписчиков280средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем