Как правильно настроить авто-масштабирование веб-приложения в Kubernetes что бы избежать overprovisioning?

Допустим есть традиционное веб-приложение, построенное на микросервисах. Без какой-либо серьезной нагрузки, приложение потребляет минимальное количество ресурсов. Под нагрузкой, использование CPU растет линейно с количеством пользователей/запросов в секунду.

Если выставить значение resources.requests.cpu в низкое значение, например 5%, то без нагрузки все работает хорошо: мы можем запустить несколько микросервисов на одной ноде, итд. Но при увеличении нагрузки, HorizontalPodAutoscaler поптается увеличить количество инстансов (подов на микросервис) и из-за низкого значения requests они запускаются на одной и той же ноде, даже если общая нагрузка ноды более 90%. Это приводит к тому что нагрузка CPU ноды начинает превышать 95% и нода и приложения становятся нестабильными.

Если выставить значение resources.requests.cpu в более высокое, например 21%, то данной проблемы нет. При превышении нагрузки 84%+ HPA попытается добавить поды, а в ответ Cluster Auto Scaler добавляет новые ноды. Но мы по сути мы таким образом ограничиваем ноду максимум 4мя подами. При увеличении количества микросервисов эта проблема становится актуальнее и получается что мы делаем дикий overprovisioning и переплачиваем за ресурсы во много раз.

Что я упускаю? В более традиционных решениях, таких как ECS, такой проблемы не существует так как автомасштабирование подов и нод раздельно, и можно задать порог например 70% для ноды после которого в Auto Scaling Group создаются больше инстансов.

Можно задать Negative Pod Affinity и запретить запускать больше 1го пода одинакового типа на 1й ноде, но это выглядит как хак и приводит к тому, что для blue-green деплойментов требуется в два раза больше нод, даже если нагрузка минимальна.

Как правильно подходить к авто-масштабированию веб-приложений с помощью HorizontalPodAutoscaler и ClusterAutoScaler?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы