Как масштабировать pod с помощью kubectl?

Как масштабировать Pod с помощью kubectl

Важно понять: вы фактически масштабируете контроллер (Deployment, StatefulSet, ReplicaSet, ReplicationController), а не одиночный Pod. Контроллер поддерживает желаемое число реплик (.spec.replicas) — когда вы меняете это значение, Kubernetes создаёт или удаляет Pod-ы, чтобы привести текущее состояние в соответствие с желаемым.

Основные способы

1) Быстро — kubectl scale

kubectl scale deployment/my-deploy --replicas=5 -n production
kubectl scale statefulset/my-ss --replicas=3 -n myns
kubectl scale replicaset/my-rs --replicas=2

Команда сразу обновляет spec.replicas. Подождите, пока контроллер создаст/удалит Pod-ы.

2) Изменить манифест и применить

Отредактируйте deployment.yaml:

spec:
replicas: 5

Затем:

kubectl apply -f deployment.yaml -n production

Это полезно, если вы храните конфигурацию в Git.

3) Правка “на лету”

kubectl edit deployment my-deploy -n production

Откроется редактор, измените spec.replicas и сохраните.

4) Патч (скриптовая автоматизация)

kubectl patch deployment my-deploy -n production -p '{"spec":{"replicas":5}}'

Подходит для CI/CD скриптов.

5) Горизонтальное автоскейлирование (HPA)

Создать HPA через kubectl autoscale:

kubectl autoscale deployment my-deploy --min=2 --max=10 --cpu-percent=80 -n production

HPA автоматически меняет число реплик на основе метрик (CPU, custom metrics). Для работы HPA требуется метрики-сервер или другой источник метрик.

Как смотреть прогресс и статус

kubectl get deployment my-deploy -n production
kubectl get pods -n production -l app=myapp --watch
kubectl rollout status deployment/my-deploy -n production
kubectl describe deployment my-deploy -n production
kubectl get hpa -n production
kubectl describe hpa my-deploy -n production

kubectl get deployment показывает DESIRED, CURRENT, UP-TO-DATE, AVAILABLE — полезно для проверки, завершился ли rollout.

Особенности и рекомендации

  • Масштабирование для Deployment выполняется постепенно в соответствии со стратегией rollingUpdate (учитываются maxUnavailable и maxSurge), что обеспечивает непрерывность обслуживания.

  • Для StatefulSet порядок удаления/создания Pod-ов контролируется порядком индексов; при уменьшении реплик последние Pod-ы удаляются в обратном порядке (без потери корректности stateful-приложений).

  • Масштабирование до нуля (--replicas=0) останавливает приложение — полезно для экономии ресурсов.

  • Нельзя напрямую масштабировать одиночный Pod (ресурс Pod не поддерживает replicas); попытка сделать kubectl scale pod/... не имеет смысла. Если Pod не управляется контроллером, чтобы «масштабировать» нужно создать Deployment/ReplicaSet или скопировать Pod-манифесты.

  • При быстром масштабировании вверх удостоверитесь, что у кластера хватает ресурсов (CPU/RAM); в противном случае Pod-ы останутся в Pending.

  • HPA требует источника метрик (metrics-server, Prometheus Adapter и т.д.). HPA можно создавать через API-манифест (обеспечивает больше возможностей, чем kubectl autoscale).

Частые команды-шпаргалки

# Установить число реплик

kubectl scale deployment/my-deploy --replicas=5 -n production

# Проверить статус rollout

kubectl rollout status deployment/my-deploy -n production

# Создать HPA

kubectl autoscale deployment my-deploy --min=2 --max=10 --cpu-percent=80 -n production

# Смотреть Pod-ы по лейблу

kubectl get pods -n production -l app=myapp -o wide

# Уменьшить до нуля

kubectl scale deployment/my-deploy --replicas=0 -n production

Операции изменения spec.replicas — это изменение желаемого состояния; контроллер приведёт фактическое состояние в соответствие.