Instance Type — подбор оптимального типа VM
Анализирует node groups за 14 дней и подбирает оптимальный тип VM по утилизации и тарифам. Работает только для Yandex Cloud MKS.
Обзор
Instance Type Optimization собирает метрики утилизации (CPU и Memory) по каждой node group за последние 14 дней и сопоставляет их с каталогом типов VM Yandex Cloud. Результат — рекомендация перейти на более дешёвый, более подходящий или более мощный тип VM в зависимости от паттерна нагрузки.
Три стратегии
Downsize
Если средняя утилизация ниже 50%, платформа подбирает более дешёвый тип VM, который вмещает p95 × 1.3 (safety margin 30%). Типичная экономия — от 15%.
Пример: node group на standard-v3 4c/16GB
при средней утилизации CPU 15%, MEM 20%.
Рекомендация — standard-v3 2c/4GB.
P95 вмещается с запасом, стоимость снижается вдвое.
Смена платформы
Если тот же размер (cores/memory) на другой платформе стоит дешевле, платформа предлагает миграцию без изменения ресурсов.
Пример: highfreq-v3 4c/16GB →
standard-v3 4c/16GB — экономия ~40%.
Workload не требует высокочастотных ядер — можно перейти на стандартную платформу.
Upsize для стабильности
Если p95 утилизации стабильно выше 80% на протяжении 14 дней, node group работает на пределе и нуждается в запасе на спайки нагрузки.
Это не экономия, а безопасность. Рекомендация работает только в режиме approval — автоматический upsize не выполняется.
5-step Apply
Применение рекомендации выполняется в 5 последовательных шагов. Каждый шаг логируется, при ошибке на любом шаге процесс останавливается.
Шаг 1 — Fetch
Получение текущей конфигурации node group из Yandex MKS API: тип VM, количество нод, scalePolicy, networkSettings, labels, taints.
Шаг 2 — Create
Создание новой node group с рекомендуемым типом VM.
Имя новой группы: {old_name}-optimized.
Встроена защита от двойного суффикса — если имя уже заканчивается
на -optimized, повторный суффикс не добавляется.
Шаг 3 — Wait
Ожидание статуса RUNNING у новой node group.
Таймаут — 600 секунд. Если группа не поднялась —
процесс останавливается с ошибкой.
Шаг 4 — Drain
Ноды старой группы обрабатываются строго по одной: cordon (запрет на размещение
новых подов), затем evict через Kubernetes Eviction API с уважением
PodDisruptionBudget. Перед переходом к следующей ноде Oopps ждёт ухода
старых подов и готовности затронутых Deployment/StatefulSet.
Шаг 5 — Delete
Удаление старой node group после подтверждения, что все поды успешно переехали на новую группу. Старая группа удаляется через MKS API.
Полный сценарий create replacement → serial migrate → physical source deletion проверен на изолированном Yandex Cloud стенде со stateless workload, готовым резервом и PDB. От product operation marker до устойчивой готовности replacement внешняя stable-endpoint проба завершила 232/232 запроса, внутренняя Service-DNS — 151/151; automatic retry, ошибок и таймаутов не было. После удаления временного резерва workload остался 3/3 Ready.
Это evidence конкретной безопасной топологии, а не универсальная гарантия для любой нагрузки. Перед применением убедитесь, что новая группа может получить нужную cloud capacity, есть готовый резерв, PDB разрешает eviction, а workload не зависит от локального хранилища или несовместимых placement constraints. Успешная replacement group становится новым целевым состоянием; автоматический обратный rollback на исходный тип этим сценарием не подтверждён.
Тарификация
Расчёт экономии основан на тарифах 6 платформ Yandex Cloud.
Ключевой параметр — core_fraction (доля vCPU),
который существенно влияет на стоимость.
Платформы Yandex Cloud
| Платформа | Процессор | Описание |
|---|---|---|
standard-v1 |
Intel Broadwell | Предыдущее поколение, базовый уровень |
standard-v2 |
Intel Cascade Lake | Второе поколение, улучшенная производительность |
standard-v3 |
Intel Ice Lake | Актуальное поколение, оптимальное соотношение цена/производительность |
highfreq-v3 |
Intel Ice Lake (CO) | Высокочастотные ядра, для compute-intensive задач |
standard-v4 |
AMD Zen 4 | Новейшее поколение на AMD, высокая производительность |
highfreq-v4 |
AMD Zen 4 (CO) | Высокочастотные ядра AMD, максимальная производительность |
Core Fraction (доля vCPU)
core_fraction — доля процессорного времени, гарантируемая виртуальной машине.
Цена отличается в 2–3× в зависимости от выбранной доли.
| Платформа | Core Fraction | Цена, ≅ ₽/час/vCPU |
|---|---|---|
standard-v3 |
100% | 1.24 |
standard-v3 |
50% | 0.76 |
standard-v3 |
20% | 0.52 |
standard-v3 |
5% | 0.28 |
Тарифы обновляются вручную из docs/tariffs-yc.
У Yandex Cloud нет публичного pricing API, поэтому точность расчётов
зависит от актуальности внутренней таблицы.
Yandex MKS API имеет несколько особенностей, которые платформа обрабатывает автоматически:
-
networkSettings.typeиcontainerRuntimeSettings.type— GET возвращает пустые объекты ({}), но CREATE требует явного указания.type. Платформа подставляет значения по умолчанию. -
v4AddressSpecvsnetworkInterfaceSpecs— GET возвращает оба поля, но CREATE отвергает их одновременно. Платформа автоматически разрешает конфликт, оставляя только нужное поле.
Для выполнения apply (создание/удаление node groups, drain нод) сервисному аккаунту необходимы обе роли:
k8s.editor— MKS API: создание и удаление node groups.k8s.cluster-api.editor— Kubernetes RBAC: cordon и evict нод.
Для просмотра рекомендаций и расчёта экономии дополнительные роли не требуются —
достаточно стандартных ролей коннектора (viewer,
k8s.cluster-api.cluster-viewer, compute.viewer).
Что дальше?
- Hibernation — расписание сна для dev/staging кластеров.
- Proactive Autoscaling — двухслойный автоскейлер на p95.
- Spot Management — preemptible ноды для stateless workloads.
- Bin-Packing — консолидация нагрузки и освобождение нод.