PRO

Как горизонтально масштабировать сервис через K8s?

Горизонтальное масштабирование в Kubernetes увеличивает число Pod приложения. Его можно выполнять вручную через изменение replicas или автоматически через HorizontalPodAutoscaler, который меняет количество реплик Deployment или StatefulSet по CPU, памяти либо custom metrics.
Подробный ответ

Ручное масштабирование

Количество экземпляров stateless-приложения указывают в Deployment через поле replicas. Kubernetes создаст или удалит Pod, чтобы привести фактическое состояние к желаемому.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: ghcr.io/acme/api:1.0.0

Число реплик также можно временно изменить командой:

kubectl scale deployment api --replicas=5

HorizontalPodAutoscaler

HPA периодически получает метрики и меняет replicas target workload в диапазоне между minReplicas и maxReplicas. Для CPU и памяти обычно нужен metrics server; для запросов в секунду, очередей и бизнес-метрик — custom metrics pipeline.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api
  minReplicas: 3
  maxReplicas: 12
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Что нужно для корректного HPA

  • задать CPU и memory requests для контейнеров;

  • настроить readiness probe, чтобы HPA и Service не учитывали неготовые Pod некорректно;

  • выбрать min/max replicas по нагрузочным тестам и лимитам зависимостей;

  • контролировать лимиты базы данных, Redis и внешних API при росте числа реплик;

  • сделать сервис stateless и вынести общее состояние во внешние хранилища.

Cluster Autoscaler

HPA создаёт больше Pod, но не добавляет вычислительные узлы. Если в кластере нет свободных ресурсов, новые Pod останутся в Pending. Для масштабирования самих nodes используют Cluster Autoscaler или аналог managed Kubernetes-провайдера.

Как ответить на собеседовании

Горизонтально сервис масштабируется количеством Pod в Deployment. Для автоматического масштабирования я настраиваю HPA с min/max replicas и метриками CPU, памяти или custom metrics. При этом задаю requests, readiness probes и проверяю, выдержат ли база и внешние зависимости рост количества реплик. Если в кластере не хватает ресурсов для новых Pod, нужен Cluster Autoscaler.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге