kubectl - Рабочие нагрузки
Быстрая навигация: используйте
Ctrl/Cmd + Fдля перехода к разделам. Ключевые слова:run,rollout,scale,hpa,vpa,statefulsets,daemonsets,jobs.
Запуск подов и задач (run)
Официальная документация kubectl run ↗
# Запустить под с образом
kubectl run <pod-name> --image=nginx
# Запустить под и сразу открыть shell
kubectl run -it debug --image=busybox -- /bin/sh
# Запустить под с автоудалением после выхода
kubectl run tmp --rm -it --image=busybox -- /bin/sh
# Запустить под с переменными окружения
kubectl run <pod-name> --image=nginx --env="DB_HOST=db" --env="DB_PORT=5432"
# Запустить под с указанием порта
kubectl run <pod-name> --image=nginx --port=80
# Запустить под с labels
kubectl run <pod-name> --image=nginx --labels="app=web,tier=frontend"
# Запустить под в определённом namespace
kubectl run <pod-name> --image=nginx -n <namespace>
# Запустить под и сразу создать service
kubectl run <pod-name> --image=nginx --port=80 --expose
# Генерация YAML без создания (dry-run)
kubectl run <pod-name> --image=nginx --dry-run=client -o yaml
# Запустить одноразовую задачу (Job)
kubectl create job <job-name> --image=busybox -- echo "Hello"
# Запустить CronJob
kubectl create cronjob <name> --image=busybox --schedule="*/5 * * * *" -- echo "tick"
Управление обновлениями (rollout)
Официальная документация Deployment и rollout ↗
# Статус обновления deployment
kubectl rollout status deployment/<deployment-name>
# История обновлений
kubectl rollout history deployment/<deployment-name>
# Откатить deployment на предыдущую версию
kubectl rollout undo deployment/<deployment-name>
# Откатить на конкретную ревизию
kubectl rollout undo deployment/<deployment-name> --to-revision=2
# Перезапустить все поды в deployment
kubectl rollout restart deployment/<deployment-name>
# Приостановить обновление
kubectl rollout pause deployment/<deployment-name>
# Возобновить обновление
kubectl rollout resume deployment/<deployment-name>
# Посмотреть детали конкретной ревизии
kubectl rollout history deployment/<deployment-name> --revision=3
Масштабирование (scale)
Официальная документация kubectl scale ↗
# Масштабировать deployment до N реплик
kubectl scale deployment <deployment-name> --replicas=3
# Масштабировать replicaset
kubectl scale replicaset <replicaset-name> --replicas=5
# Масштабировать statefulset
kubectl scale statefulset <statefulset-name> --replicas=2
# Масштабировать в определённом namespace
kubectl scale deployment <deployment-name> --replicas=3 -n <namespace>
# Автомасштабирование (HPA - Horizontal Pod Autoscaler)
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80
# Посмотреть статус автомасштабирования
kubectl get hpa
HorizontalPodAutoscaler (HPA)
Официальная документация Horizontal Pod Autoscaling ↗
# Список всех HPA
kubectl get hpa
kubectl get hpa -A
# Подробная информация об HPA
kubectl describe hpa <hpa-name>
# Просмотр HPA в формате YAML
kubectl get hpa <hpa-name> -o yaml
# Создать HPA для деплоя (по CPU)
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=70
# Создать HPA из файла
kubectl apply -f hpa.yaml
# Удалить HPA
kubectl delete hpa <hpa-name>
# Показать HPA с текущим/целевым кол-вом реплик и метриками
kubectl get hpa -o custom-columns=NAME:.metadata.name,MINPODS:.spec.minReplicas,MAXPODS:.spec.maxReplicas,REPLICAS:.status.currentReplicas
# Редактировать HPA (изменить пороги или кол-во реплик)
kubectl edit hpa <hpa-name>
# Пример HPA YAML (по CPU + Memory):
# apiVersion: autoscaling/v2
# kind: HorizontalPodAutoscaler
# metadata:
# name: my-hpa
# spec:
# scaleTargetRef:
# apiVersion: apps/v1
# kind: Deployment
# name: my-deployment
# minReplicas: 2
# maxReplicas: 10
# metrics:
# - type: Resource
# resource:
# name: cpu
# target:
# type: Utilization
# averageUtilization: 70
# - type: Resource
# resource:
# name: memory
# target:
# type: Utilization
# averageUtilization: 80
VerticalPodAutoscaler (VPA)
Официальная документация Vertical Pod Autoscaler ↗
# VPA не входит в стандартный Kubernetes — устанавливается отдельно:
# https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
# Список всех VPA
kubectl get vpa
kubectl get vpa -A
# Детальная информация о VPA (включая рекомендации)
kubectl describe vpa <vpa-name>
# Просмотр VPA в формате YAML
kubectl get vpa <vpa-name> -o yaml
# Создать VPA из файла
kubectl apply -f vpa.yaml
# Удалить VPA
kubectl delete vpa <vpa-name>
# Показать рекомендации для всех VPA
kubectl get vpa -o custom-columns=NAME:.metadata.name,MODE:.spec.updatePolicy.updateMode,CPU_REQ:.status.recommendation.containerRecommendations[0].target.cpu,MEM_REQ:.status.recommendation.containerRecommendations[0].target.memory
# Пример VPA YAML — режим Off (только рекомендации, без автоизменений):
# apiVersion: autoscaling.k8s.io/v1
# kind: VerticalPodAutoscaler
# metadata:
# name: my-vpa
# spec:
# targetRef:
# apiVersion: apps/v1
# kind: Deployment
# name: my-deployment
# updatePolicy:
# updateMode: "Off"
# Пример VPA YAML — режим Auto (рестарт подов с новыми лимитами):
# spec:
# targetRef:
# apiVersion: apps/v1
# kind: Deployment
# name: my-deployment
# updatePolicy:
# updateMode: "Auto"
# resourcePolicy:
# containerPolicies:
# - containerName: app
# minAllowed:
# cpu: 50m
# memory: 64Mi
# maxAllowed:
# cpu: "2"
# memory: 2Gi
# Режимы updateMode:
# Off — только вычисляет рекомендации, ничего не меняет
# Initial — устанавливает ресурсы только при создании пода
# Recreate — вытесняет и пересоздаёт поды при изменении рекомендаций
# Auto — аналогично Recreate (поведение по умолчанию)
# Проверить, запущен ли admission controller VPA
kubectl get pods -n kube-system | grep vpa
StatefulSets
Официальная документация StatefulSet ↗
# Список всех StatefulSet
kubectl get statefulsets
kubectl get sts
# Список во всех namespace
kubectl get sts -A
# Описание StatefulSet
kubectl describe sts <sts-name>
# StatefulSet в формате YAML
kubectl get sts <sts-name> -o yaml
# Масштабировать StatefulSet
kubectl scale sts <sts-name> --replicas=3
# Роллинг-рестарт StatefulSet
kubectl rollout restart sts/<sts-name>
# Статус обновления StatefulSet
kubectl rollout status sts/<sts-name>
# История обновлений StatefulSet
kubectl rollout history sts/<sts-name>
# Откатить StatefulSet на предыдущую ревизию
kubectl rollout undo sts/<sts-name>
# Откатить на конкретную ревизию
kubectl rollout undo sts/<sts-name> --to-revision=2
# Обновить image в StatefulSet
kubectl set image sts/<sts-name> <container-name>=<image>:<tag>
# Удалить StatefulSet (поды остаются по умолчанию)
kubectl delete sts <sts-name>
# Удалить StatefulSet вместе с подами (foreground)
kubectl delete sts <sts-name> --cascade=foreground
# Удалить StatefulSet без удаления подов (orphan)
kubectl delete sts <sts-name> --cascade=orphan
# Список подов StatefulSet (по label)
kubectl get pods -l app=<sts-name>
# Показать StatefulSet с количеством реплик
kubectl get sts -o custom-columns=NAME:.metadata.name,READY:.status.readyReplicas,REPLICAS:.status.replicas
DaemonSets
Официальная документация DaemonSet ↗
# Список всех DaemonSet
kubectl get daemonsets
kubectl get ds
# Список во всех namespace
kubectl get ds -A
# Описание DaemonSet
kubectl describe ds <ds-name>
# DaemonSet в формате YAML
kubectl get ds <ds-name> -o yaml
# Роллинг-рестарт DaemonSet (на всех нодах)
kubectl rollout restart ds/<ds-name>
# Статус обновления DaemonSet
kubectl rollout status ds/<ds-name>
# История обновлений DaemonSet
kubectl rollout history ds/<ds-name>
# Откатить DaemonSet на предыдущую ревизию
kubectl rollout undo ds/<ds-name>
# Обновить image в DaemonSet
kubectl set image ds/<ds-name> <container-name>=<image>:<tag>
# Удалить DaemonSet (и его поды)
kubectl delete ds <ds-name>
# Удалить DaemonSet без удаления подов
kubectl delete ds <ds-name> --cascade=orphan
# Показать DaemonSet с покрытием нод
kubectl get ds -o custom-columns=NAME:.metadata.name,DESIRED:.status.desiredNumberScheduled,READY:.status.numberReady,AVAILABLE:.status.numberAvailable
# Список подов DaemonSet (по label)
kubectl get pods -l app=<ds-name> -o wide
Jobs и CronJobs
Официальная документация Job ↗ CronJob ↗
# Список всех Jobs
kubectl get jobs
# Список всех CronJobs
kubectl get cronjobs
kubectl get cj
# Описание Job
kubectl describe job <job-name>
# Описание CronJob
kubectl describe cronjob <cronjob-name>
# Создать Job из образа
kubectl create job <job-name> --image=busybox -- echo "Hello"
# Создать Job из существующего CronJob (вручную запустить)
kubectl create job <job-name> --from=cronjob/<cronjob-name>
# Создать CronJob (каждые 5 минут)
kubectl create cronjob <name> --image=busybox --schedule="*/5 * * * *" -- echo "tick"
# Создать CronJob (каждый день в 02:00)
kubectl create cronjob <name> --image=busybox --schedule="0 2 * * *" -- /bin/sh -c "backup.sh"
# Посмотреть логи Job (через поды)
kubectl logs -l job-name=<job-name>
# Дождаться завершения Job
kubectl wait --for=condition=Complete job/<job-name> --timeout=120s
# Удалить завершённые Jobs
kubectl delete jobs --field-selector status.successful=1
# Приостановить CronJob
kubectl patch cronjob <cronjob-name> -p '{"spec":{"suspend":true}}'
# Возобновить CronJob
kubectl patch cronjob <cronjob-name> -p '{"spec":{"suspend":false}}'
# Удалить CronJob (и все связанные Jobs)
kubectl delete cronjob <cronjob-name>