Hibernation — расписание сна для dev/staging кластеров
Node groups засыпают (scale-to-0) по расписанию и просыпаются обратно. Экономия ~65% на непродовых кластерах, где нагрузка нужна только в рабочие часы.
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 |
Что дальше?
- Instance Type — подбор оптимального типа VM для node groups.
- Proactive Autoscaling — двухслойный автоскейлер на p95.
- Spot Management — preemptible ноды для stateless workloads.
- Bin-Packing — консолидация нагрузки и освобождение нод.