Автомасштабирование и Namespaces

Нагрузка скачет, а команд и проектов много — HPA добавляет реплики автоматически, а Namespaces делят кластер на изолированные части.

HPA (HorizontalPodAutoscaler) — авто-масштабирование: меняет число реплик в зависимости от нагрузки. Namespace — логический раздел кластера для изоляции объектов.

HPA — масштабирование под нагрузкой

Вручную угадывать число реплик неудобно: днём нагрузка высокая, ночью низкая. HPA сам добавляет и убирает поды, ориентируясь на метрику (чаще всего загрузку CPU). Условие простое: «держи среднюю загрузку CPU около 50%».

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

Если средняя загрузка CPU подов превысит 50%, HPA добавит реплики (до 10); упадёт — уберёт (но не ниже 2). Для работы HPA нужен metrics-server в кластере и заданные requests по CPU.

kubectl get hpa

Вывод:

NAME      REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS
web-hpa   Deployment/web   72%/50%   2         10        5

Здесь нагрузка 72% выше цели 50%, поэтому HPA поднял реплики до 5 и продолжит, пока не нормализуется.

Namespaces — изоляция

Namespace делит один физический кластер на логические части. Это удобно, чтобы разделить окружения (dev, staging, prod) или команды. Объекты в разных namespace не пересекаются по именам — два сервиса web в разных namespace спокойно сосуществуют.

kubectl create namespace dev
kubectl apply -f web-deploy.yaml -n dev
kubectl get pods -n dev

Флаг -n указывает namespace. Без него команды работают в namespace default. Посмотреть все namespace:

kubectl get namespaces

Вывод:

NAME              STATUS   AGE
default           Active   3d
kube-system       Active   3d
dev               Active   1m

На namespace навешивают квоты ресурсов (ResourceQuota) — например, «команда dev суммарно не больше 4 ядер». Так один проект не отъест весь кластер.

Итог

  • HPA авто-меняет число реплик по метрике (обычно CPU) в рамках min/max.
  • Для HPA нужны metrics-server и заданные requests.
  • Namespaces логически изолируют объекты и позволяют навешивать квоты.
Проверьте себя
1. Что делает HorizontalPodAutoscaler?
AМеняет размер узлов
BАвтоматически меняет число реплик пода по нагрузке
CШифрует трафик
DСоздаёт PVC
2. Что нужно, чтобы HPA по CPU заработал?
AIngress-контроллер
Bmetrics-server и заданные requests по CPU
CТип Service LoadBalancer
DStatefulSet
3. Зачем нужны Namespaces?
AДля шифрования
BДля логической изоляции объектов (окружения, команды) внутри одного кластера
CДля маршрутизации HTTP
DДля хранения логов
Поддержать проект