kubectl — основной инструмент взаимодействия с Kubernetes-кластером. Ниже собрана шпаргалка по рутинным операциям: от настройки контекста до отладки подов и переключения между namespace. Все команды проверены на актуальных версиях kubectl (1.28+).
Установка и настройка контекста
Установка зависит от ОС. На Linux через пакетный менеджер или бинарник:
Если у вас несколько кластеров, храните конфиги в переменной KUBECONFIG через двоеточие: export KUBECONFIG=~/.kube/config:~/.kube/prod-config.
Работа с подами
Базовые операции:
kubectl get pods # все поды в текущем namespacekubectl get pods -A # все namespacekubectl describe pod <pod-name> # подробности и событияkubectl logs <pod-name> # логи контейнераkubectl logs <pod-name> -c <container> # логи конкретного контейнера в multi-container podkubectl exec -it <pod-name> -- /bin/sh # войти в подkubectl delete pod <pod-name> # удалить под
Деплойменты, StatefulSet и DaemonSet
kubectl get deployments,statefulsets,daemonsets
kubectl rollout status deployment/<name> # статус обновленияkubectl rollout history deployment/<name> # история ревизийkubectl rollout undo deployment/<name> # откат на предыдущую ревизиюkubectl rollout undo deployment/<name> --to-revision=2# откат к конкретной ревизииkubectl scale deployment/<name> --replicas=5# масштабирование
Для StatefulSet порядок запуска и стабильные идентификаторы критичны. Для DaemonSet — гарантированный экземпляр на каждом ноде.
Предупреждение
Не используйте kubectl delete на Deployment без проверки kubectl get deployment. Удаление контроллера не удаляет поды автоматически — они будут пересозданы, если не указан --cascade=orphan (в старых версиях) или не удалён через kubectl delete deployment.
Сервисы, Ingress и ConfigMap
kubectl get svc # сервисыkubectl expose deployment/<name> --port=80 --type=NodePort # создать svc из деплояkubectl get ingress # ingress-ресурсыkubectl describe ingress <name> # правила и событияkubectl apply -f ingress.yaml # применить ингресс из файла
Если kubectl top возвращает ошибку — metrics-server не установлен. Установка зависит от провайдера: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml.
Метки, селекторы и форматирование вывода
Метки позволяют группировать ресурсы и выбирать их пачками:
kubectl get pods --show-labels
kubectl label pods <pod-name> app=frontend tier=web
kubectl get pods -l app=frontend # selector по меткеkubectl get pods -l 'app in (frontend,backend)'kubectl get pods -l '!tier=web'# отрицательный селектор
Форматирование вывода:
kubectl get pods -o wide
kubectl get pods -o json # полный JSONkubectl get pods -o jsonpath='{.items[*].metadata.name}'kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
Флаг
Описание
-n, --namespace
Указать namespace
-o, --output
Формат: json, yaml, wide, custom-columns
-l, --selector
Селектор по меткам
-f, --filename
Файл конфигурации (YAML/JSON)
--show-labels
Показать колонку с метками
-w, --watch
Потоковый режим обновления
--all-namespaces, -A
Все namespace
Управление namespace и переключение контекстов
kubectl get namespace
kubectl create namespace staging
kubectl delete namespace staging # удаление асинхронноеkubectl config set-context --current --namespace=staging # namespace по умолчанию в контексте
Для удобства можно создать алиас или функцию в shell:
kubectl config rename-context, kubectl config unset и kubectl config set позволяют редактировать конфиг без ручного правки YAML. Проверяйте результат через kubectl config view.
kubectl — это не просто CLI, а слой абстракции над API Kubernetes. Знание флагов форматирования и селекторов сокращает время диагностики в несколько раз. Сохраните шпаргалку рядом и обновляйте по мере выхода новых версий.