Как называется механизм автомасштабирования в Kubernetes?

Ответ

В 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%. Выше — добавляем поды, ниже — убираем. Всё, блядь, гениально и просто.