Ответ
В Kubernetes есть два основных механизма автомасштабирования: Horizontal Pod Autoscaler (HPA) и Vertical Pod Autoscaler (VPA).
- Horizontal Pod Autoscaler (HPA) — это наиболее часто используемый механизм. Он автоматически увеличивает или уменьшает количество реплик Pod'ов в Deployment, StatefulSet или другом ресурсе на основе наблюдаемых метрик использования CPU, памяти или пользовательских метрик (custom metrics).
- Vertical Pod Autoscaler (VPA) — автоматически настраивает запросы (
requests) и лимиты (limits) ресурсов (CPU и памяти) для контейнеров в существующих Pod'ах. Это позволяет "вертикально" масштабировать Pod, не меняя их количество.
На практике HPA используется для реакции на изменение нагрузки, а VPA — для оптимизации использования ресурсов и предотвращения их нехватки.
Пример манифеста HPA, который масштабирует Deployment myapp от 1 до 10 реплик, поддерживая среднюю загрузку CPU на уровне 50%:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 Ответ 18+ 🔞
Давай разберёмся с этими автомасштабировщиками, а то голова кругом идёт. В Кубернетесе есть две главные штуки, которые сами решают, когда подам добавить или урезать им паёк.
Первая — Horizontal Pod Autoscaler (HPA). Это, можно сказать, классика жанра, её все используют. Суть простая, как три копейки: смотрит он на метрики — сколько там CPU или памяти жрёт твоё приложение — и тупо плодит или убивает поды. Загрузка под 80%? Ёпта, давай ещё две реплики! Упала до 10%? А зачем нам столько, давай одну оставим. Работает с деплойментами, стейтфулсетами и прочей живностью. В общем, масштабируется вширь, по горизонтали.
Вторая — Vertical Pod Autoscaler (VPA). А вот это уже хитрая жопа. Он не трогает количество подов, он лезет внутрь каждого и говорит: «Слушай, дружок, ты просишь 100 милликор CPU, а на самом деле хаваешь 500. Давай я тебе лимиты и реквесты по-честному выставлю, а то стыдно смотреть». Или наоборот: «Чувак, ты заказал гигабайт памяти, а используешь 50 мегов — не позорься». Масштабирует по вертикали, меняя «рацион» каждого пода.
На практике это выглядит так: HPA — это твой быстрый реактивный парень, который тушит пожары высокой нагрузки. А VPA — это такой дотошный бухгалтер, который ходит и оптимизирует расходы, чтобы ресурсы зря не простаивали и приложения не дохли от голода.
Вот, смотри, как выглядит манифест для HPA. Всё довольно прямолинейно, тут даже думать особо не надо.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Расшифровываю: этот скейлер привязан к деплойменту myapp. Реплик у него будет минимум одна, даже если он вообще спать ляжет, а максимум — десять, чтобы совсем овердохуища не раздулся. И главное правило: средняя загрузка CPU должна держаться около 50%. Выше — добавляем поды, ниже — убираем. Всё, блядь, гениально и просто.