Автомасштабирование и 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 логически изолируют объекты и позволяют навешивать квоты.