Hibernation — расписание сна для dev/staging кластеров

Node groups засыпают (scale-to-0) по расписанию и просыпаются обратно. Экономия ~65% на непродовых кластерах, где нагрузка нужна только в рабочие часы.

Перед включением Hibernation

Preflight должен прочитать реальные Kubernetes nodes и поды. Для Yandex Cloud сначала примените read-only ClusterRole из руководства по правам Yandex Cloud в каждом кластере. Node groups могут отображаться в UI и без этого права, но безопасная проверка нод работать не будет.

Обзор

Hibernation позволяет автоматически останавливать dev, staging и тестовые кластеры на ночь и выходные. Вместо того чтобы держать ноды 24/7, node groups уменьшаются до 0 нод в нерабочее время и возвращаются к исходному размеру к началу рабочего дня. Используйте отдельную node group для non-production workloads; для production и критичных сервисов общая гарантия доступности не заявляется.

Пресеты расписаний

Пресет Сон Подъём Экономия
Только ночи Пн–Пт 21:00 Пн–Пт 08:00 ~45%
Ночи + выходные Каждый вечер 21:00 Только будни 08:00 ~65%
Свой cron Произвольный cron Произвольный cron Зависит от расписания

Как работает

Шаг 1 — Выбор node group и пресета

В UI на странице Optimization → Hibernation выбирается node group и один из пресетов расписания (или задаётся произвольный cron).

Шаг 2 — Планировщик

Бэкенд каждые 60 секунд проверяет все активные расписания — пора ли засыпать или просыпаться. Запланированный запуск получает атомарный claim, поэтому одну итерацию сна не обрабатывают два воркера.

Шаг 3 — Сохранение снимка

Перед засыпанием платформа сохраняет снимок текущего scalePolicy node group (fixedScale или autoScale). Этот снимок используется для восстановления при пробуждении.

Шаг 4 — Drain и scale-to-0

Корректное завершение: cordon каждой ноды → evict подов через Kubernetes Eviction API с уважением PodDisruptionBudget → перенос workload на доступные ноды → scale-to-0 через MKS API. Если PDB или размещение workload не позволяют безопасно выполнить drain, операция не продолжается.

Шаг 5 — Пробуждение

При наступлении времени подъёма платформа восстанавливает оригинальный scalePolicy из сохранённого снимка. Node group возвращается к исходному количеству нод; также доступна кнопка «Разбудить» для ручного запуска. Время готовности зависит от облака и текущей нагрузки, поэтому фиксированный SLO или SLA на пробуждение не заявляется.

Preflight Check

Перед каждой операцией hibernate выполняется проверка безопасности.

Проверка local PV и hostPath

Перед засыпанием платформа проверяет ноды на наличие подов с local Persistent Volumes и hostPath volumes. Данные на этих томах будут потеряны при scale-to-0.

Pending Approval

Если обнаружены local PV или hostPath, расписание переходит в статус pending_approval. Пользователь видит конкретные поды и volumes, которые будут затронуты, и может подтвердить риск.

Запоминание подтверждённых рисков

Подтверждённые риски запоминаются в approved_risks — повторно не запрашиваются. Однако проверка повторяется каждый день: если появились новые local PV, расписание снова ставится на паузу.

Ручное управление

Помимо расписания, в UI доступны кнопки «Усыпить» и «Разбудить» для немедленного управления в обход расписания. Ручной сон проходит те же preflight-проверки и при новых рисках требует подтверждения.

Обработка ошибок

Ситуация Поведение
Scale-to-0 failed Статус error, retry при следующей проверке (60 сек)
Wake failed Остаётся в статусе sleeping, retry через 5 минут
PDB блокирует eviction Eviction retry с backoff, логируется в action log

Что дальше?