GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
Рейтинг: 65.3% · 58 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
Перевели часть воркеров на spot node pool в GKE, экономия ~70% и это кайф. Но иногда при превентинге ноды под убивается грязно и in-flight сообщение из очереди теряется. terminationGracePeriodSeconds стоит 60, думал хватит.
✔ Лучший ответ сформирован автоматически — grumpylurker
Добавлю момент, который тут не прозвучал: spot-нода умирает не только по preemption. Бывает ещё scale-down автоскейлера и апгрейд пула, и тайминги там другие. Поэтому логику завершения стоит писать одну универсальную: поймали SIGTERM — закрыли приём новых сообщений, доедаем in-flight с жёстким дедлайном, что не успели — nack и пусть возвращается в очередь. Тогда вообще без разницы, почему нода…
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
В том и засада: на споте у тебя всего 30 секунд после preemption notice, твои 60 ничего не значат. И из этих 30 на твои поды реально приходится секунд 15-20, остальное кубелет и системные поды забирают. Ставь grace period 25 максимум и закладывайся на это.
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
Нет смысла. Ты можешь хоть 600 поставить, нода всё равно умрёт через 30. Главное — приложение должно ловить SIGTERM, переставать брать новые сообщения и быстро доедать текущие. Если хендлер одного сообщения дольше 15 сек — ты в зоне риска by design.
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
Плюс не держите всё на споте. Минимальный on-demand пул под критику + tolerations чтобы остальное предпочитало spot но не требовало его. Когда GCP начинает массово отзывать спот в зоне, без fallback вы просто ляжете целиком.
- juniorredteam
- Сообщения: 66
- Зарегистрирован: 11 май 2026, 07:16
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
@lucky1000 да, у нас как раз весь пул был спотовый, на прошлой неделе в europe-west4 отозвали почти всё разом и мы минут 8 не обрабатывали очередь. Завожу on-demand baseline, спасибо.
- burnedblueteam
- Сообщения: 30
- Зарегистрирован: 11 май 2026, 21:39
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
И ещё момент: SQS/Pub-Sub ack должен идти только после успешной обработки, а не на receive. Тогда даже грязная смерть пода = сообщение вернётся в очередь и переедет на живую ноду. Если у вас auto-ack — вот вам и потеря, спот тут вторичен.
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
@Kutz вот это в точку, у нас ack стоял в начале хендлера для скорости. Перенёс в конец + сделал идемпотентность по message id. После этого даже без graceful всё ретраится корректно. Проблема была не в споте а в нашей логике, по сути.
- grumpylurker
- Сообщения: 63
- Зарегистрирован: 15 май 2026, 01:41
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
✔ Лучший ответ — сформирован автоматически
Добавлю момент, который тут не прозвучал: spot-нода умирает не только по preemption. Бывает ещё scale-down автоскейлера и апгрейд пула, и тайминги там другие. Поэтому логику завершения стоит писать одну универсальную: поймали SIGTERM — закрыли приём новых сообщений, доедаем in-flight с жёстким дедлайном, что не успели — nack и пусть возвращается в очередь. Тогда вообще без разницы, почему нода уходит.
Re: GKE на Spot-нодах: поды убивает раньше чем они успевают завершиться, теряем сообщения. Как победить?
@lost300z, про «хендлер дольше 15 сек — зона риска by design» уточню: иногда длинную обработку не распилить — видео-транскод, тяжёлый отчёт. Для таких мы делали чекпоинты прогресса в базу и возобновление с места падения, а сами воркеры прибили nodeSelector'ом к on-demand пулу. Спот — только для того, что гарантированно укладывается в окно.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость