replicas или автоматически через HorizontalPodAutoscaler, который меняет количество реплик Deployment или StatefulSet по CPU, памяти либо custom metrics.
Как горизонтально масштабировать сервис через K8s?
Подробный ответ
Ручное масштабирование
Количество экземпляров 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=5HorizontalPodAutoscaler
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.
Оцени свой прогресс