Как масштабировать 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 — это изменение желаемого состояния; контроллер приведёт фактическое состояние в соответствие.