Оптимизация нод Kubernetes
5 типов оптимизации на уровне node groups: подбор типа VM, гибернация, проактивный автоскейлинг, spot-ноды и bin-packing. Каждый тип работает независимо и может быть включён отдельно.
Обзор
Оптимизация нод дополняет рекомендации по workloads (requests/limits) и работает на уровне целых node groups. Платформа анализирует утилизацию нод, тарифы провайдера и паттерны нагрузки, чтобы предложить конкретные действия — от смены типа VM до автоматического засыпания dev-кластеров.
5 инструментов оптимизации
Режимы работы
Каждый тип оптимизации может работать в одном из трёх режимов. Режим выбирается на странице настроек Node Optimization.
| Режим | Описание | Instance Type | Hibernation | Proactive Scaling | Spot | Bin-Packing |
|---|---|---|---|---|---|---|
| Monitor | Только рекомендации, без действий | ✓ | ✓ | ✓ | ✓ | ✓ |
| Approval | Рекомендации + apply по кнопке (default) | ✓ | ✓ | ✓ | ✓ | ✓ |
| Auto | Автоматическое применение только разрешённых безопасных действий | ✓ | ✓ | Только scale up; scale down требует подтверждения | ✓ | ✓ |
На изолированном Yandex Cloud стенде strict SLO с нулём ошибок и таймаутов в одновременных внешней и внутренней пробах подтверждён для rightsizing rollout, proactive scale up, scale down с консолидацией и полного instance-type replacement. В проверенном replacement-сценарии Oopps создал новую группу, перенёс workload и физически удалил source: внешняя проба — 232/232, внутренняя Service-DNS — 151/151, без retry, ошибок и таймаутов. Результат относится к isolated stateless fixture с готовым резервом и PDB; перед каждой реальной операцией всё равно требуется собственный capacity/storage/placement preflight.
Тарификация Yandex Cloud
Расчёт экономии использует тарифы из внутренней таблицы
(docs/tariffs-yc), которая покрывает 6 платформ Yandex Cloud
и все варианты core_fraction (доля vCPU: 5%, 20%, 50%, 100%).
Тарифы обновляются вручную — у Yandex Cloud нет публичного pricing API. Точность расчётов зависит от актуальности таблицы. Рекомендуем проверять тарифы при обновлении платформы.
Необходимые IAM роли и Kubernetes RBAC
Для актуальных node-level метрик сервисному аккаунту нужен доступ
get/list/watch к cluster-scoped ресурсу nodes.
Стандартные роли k8s.cluster-api.viewer и
k8s.cluster-api.editor этот доступ не дают.
Примените от имени администратора в каждом кластере:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: oopps-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes"]
verbs: ["get", "list", "watch"]
- apiGroups: ["metrics.k8s.io"]
resources: ["nodes", "pods"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: oopps-reader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: oopps-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: yc:viewer
Подробная настройка и диагностика: Yandex Cloud → подготовка и права.
Для выполнения apply (создание/удаление node groups, drain нод) сервисному аккаунту необходимы обе роли одновременно:
k8s.editor— MKS API: создание и удаление node groups.k8s.cluster-api.editor— Kubernetes RBAC: cordon и evict нод.
Без любой из этих ролей apply завершится ошибкой. Роль
k8s.editor без k8s.cluster-api.editor позволит создать
новую группу, но не сможет выполнить drain старых нод.
Что дальше?
- Рекомендации — 5 типов рекомендаций по инфраструктуре и workloads.
- Аудит Kubernetes — как запустить аудит и получить findings.
- GitOps — автоматическое применение изменений через Merge Request.
- Биллинг и аномалии — мониторинг расходов и обнаружение аномалий.