kubectl
73 commands
73 shown
Список всех подов во всех неймспейсах
Все поды с расположением на нодах и IP-адресами
kubectl get pods -A -o wide
Описание пода
Подробная информация: события, условия, монтирование томов
kubectl describe pod <name> -n <ns>
Следить за логами пода
Потоковые логи в реальном времени; добавьте -c <container> для мульти-контейнерных подов
kubectl logs -f <pod> -n <ns>
Логи предыдущего контейнера
Логи последнего упавшего или перезапущенного экземпляра контейнера
kubectl logs <pod> --previous -n <ns>
Войти в под
Интерактивная оболочка внутри работающего контейнера
kubectl exec -it <pod> -n <ns> -- bash
Проброс порта сервиса
Туннелирование порта кластерного сервиса на localhost
kubectl port-forward svc/<name> 8080:80 -n <ns>
Следить за статусом rollout
Блокировать до завершения деплоя или таймаута (используется в CI)
kubectl rollout status deployment/<name> -n <ns>
Откат деплоймента
Вернуться к предыдущей ревизии
kubectl rollout undo deployment/<name> -n <ns>
Масштабирование деплоймента
Немедленно изменить количество реплик
kubectl scale deployment/<name> --replicas=3 -n <ns>
События кластера по времени
Последние события кластера, сначала старые — удобно при post-incident разборе
kubectl get events -A --sort-by='.lastTimestamp'
Проверка манифеста (server-side dry-run)
Валидация манифеста через живой API без применения изменений
kubectl apply --server-side --dry-run=server -f file.yaml
Экспорт ресурса в YAML
Текущее состояние без служебных полей; удобен как базовый шаблон
kubectl get deployment/<name> -n <ns> -o yaml
Принудительное удаление зависшего пода
Удалить под в состоянии Terminating немедленно (используйте с осторожностью)
kubectl delete pod <name> -n <ns> --grace-period=0 --force
Копирование файла из пода
Извлечь файл из работающего контейнера
kubectl cp <ns>/<pod>:/remote/path ./local-path
Cordon ноды
Пометить ноду как неналиняющую — новые поды сюда не попадают
kubectl cordon <node>
Drain ноды
Аккуратно вытеснить все поды перед обслуживанием
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
Редактировать ресурс в кластере
Открыть ресурс в $EDITOR; изменения применяются при сохранении
kubectl edit deployment/<name> -n <ns>
Проверка прав RBAC
Проверить что ServiceAccount имеет право делать
kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns>
Ресурс с кастомными колонками
Вывести только нужные поля без jq
kubectl get pods -n <ns> -o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase'
Patch поля ресурса
Изменить поле ресурса без редактирования манифеста
kubectl patch deployment <name> -n <ns> -p '{"spec":{"replicas":2}}'
Добавить аннотацию к ресурсу
Добавить/обновить аннотацию; --overwrite заменяет существующее значение
kubectl annotate pod <pod> -n <ns> key=value --overwrite
Добавить лейбл к ресурсу
Добавить или изменить лейбл на любом ресурсе
kubectl label node <node> role=worker --overwrite
Добавить taint на ноду
Запретить размещение подов без соответствующего toleration
kubectl taint nodes <node> key=value:NoSchedule
Снять taint с ноды
Снять taint — поставить тире в конце
kubectl taint nodes <node> key=value:NoSchedule-
Обновить образ деплоймента
Обновить образ контейнера без редактирования YAML
kubectl set image deployment/<name> <container>=image:tag -n <ns>
История деплоев
Все ревизии с причиной изменения
kubectl rollout history deployment/<name> -n <ns>
Rolling restart деплоймента
Перезапустить поды по одному без простоя
kubectl rollout restart deployment/<name> -n <ns>
Создать неймспейс
Создать новый неймспейс; идемпотентно через --dry-run=client | apply
kubectl create namespace <ns>
Задать requests/limits
Обновить requests и limits деплоймента без правки YAML
kubectl set resources deployment/<name> -c <container> --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=512Mi -n <ns>
Запустить разовый под
Временный под для отладки; удаляется при выходе
kubectl run tmp --image=nicolaka/netshoot -it --rm --restart=Never -n <ns> -- bash
Лейблы нод
Все лейблы назначенные на каждую ноду
kubectl get nodes --show-labels
Разблокировать ноду
Разрешить планирование на ранее заблокированной ноде
kubectl uncordon <node>
Статус HPA
HPA — текущие/желаемые реплики и метрики
kubectl get hpa -A
Квоты ресурсов неймспейса
Использованные vs жёсткие лимиты CPU, памяти, объектов в неймспейсе
kubectl describe resourcequota -n <ns>
Статус PodDisruptionBudget
Показать min-available и текущее число здоровых подов
kubectl get pdb -A
LimitRange неймспейса
Дефолтные и максимальные ресурсные лимиты подов в неймспейсе
kubectl describe limitrange -n <ns>
Все CRD в кластере
Все Custom Resource Definitions отсортированные по времени создания
kubectl get crds --sort-by='.metadata.creationTimestamp'
Endpoints сервиса
Pod IP-адреса за Service — диагностика несоответствия selector
kubectl get endpoints <svc> -n <ns>
Проверить срок сертификата
Статус и дата истечения сертификатов cert-manager
kubectl get certificate -A -o wide
Топология spread constraints
Проверить topologySpreadConstraints пода
kubectl get pod <pod> -n <ns> -o jsonpath='{.spec.topologySpreadConstraints}'
Apply с удалением лишнего
Применить манифесты и удалить устаревшие объекты по label selector
kubectl apply -f ./dir/ --prune -l app=<label> -n <ns>
Diff живого vs локального
Показать что изменится при применении этого манифеста
kubectl diff -f file.yaml
Выполнить команду во всех подах
Выполнить команду в каждом поде с нужным label selector
kubectl get pods -n <ns> -l app=<label> -o name | xargs -I{} kubectl exec {} -n <ns> -- <cmd>
Watch статуса подов
Обновление в реальном времени при изменении статусов
kubectl get pods -n <ns> -w
Поды по CPU
Использование CPU по всем неймспейсам отсортировано
kubectl top pods -A --sort-by=cpu
Создать токен ServiceAccount
Сгенерировать краткосрочный bound-токен ServiceAccount
kubectl create token <sa-name> -n <ns> --duration=1h
Аудит прав — кто что может
Все разрешения текущего пользователя в неймспейсе
kubectl auth can-i --list -n <ns>
Удалить все поды в неймспейсе
Форс-рекреация всех подов — удобно после смены ConfigMap
kubectl delete pods --all -n <ns>
Список Ingress
Все Ingress-ресурсы с хостами и адресами
kubectl get ingress -A
Дамп всех подов в YAML
Резервная копия/инспекция всех подов неймспейса в YAML
kubectl get pods -n <ns> -o yaml > pods-dump.yaml
Все образы контейнеров в кластере
Перечислить все образы контейнеров запущенных в кластере
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .spec.containers[*]}{.image}{"\n"}{end}{end}'
Переключить kubeconfig контекст
Переключить активный контекст кластера
kubectl config use-context <context>
Список kubeconfig контекстов
Все контексты в текущем kubeconfig
kubectl config get-contexts
Объединить kubeconfig файлы
Объединить несколько kubeconfig файлов в один
KUBECONFIG=~/.kube/config:~/.kube/cluster2.yaml kubectl config view --flatten > ~/.kube/merged.yaml
Дефолтный неймспейс контекста
Не нужно добавлять -n в каждую команду для этого контекста
kubectl config set-context --current --namespace=<ns>
Информация о кластере
API server и CoreDNS endpoints кластера
kubectl cluster-info
Условия ноды
Все условия каждой ноды (Ready, MemoryPressure, DiskPressure)
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{": "}{range .status.conditions[*]}{.type}={.status},{" "}{end}{"\n"}{end}'
Запустить CronJob вручную
Немедленно запустить CronJob как разовый Job
kubectl create job --from=cronjob/<name> manual-run -n <ns>
Ждать готовности пода
Заблокировать до готовности подов или таймаута
kubectl wait pod -l app=<label> -n <ns> --for=condition=Ready --timeout=120s
Снять метрики эндпоинта apiserver
Получить сырые метрики Prometheus с apiserver без стека мониторинга
kubectl get --raw /metrics | grep apiserver_request_total
Проверить здоровье etcd через apiserver
Проверить доступность etcd через эндпоинт здоровья apiserver
kubectl get --raw '/healthz/etcd?verbose'
Метрики нод из API metrics.k8s.io
Сырое потребление нод из metrics API в обход форматирования kubectl top
kubectl get --raw '/apis/metrics.k8s.io/v1beta1/nodes' | jq '.items[] | {name:.metadata.name, cpu:.usage.cpu, mem:.usage.memory}'
Эфемерная отладочная копия с общими PID
Клонировать под с отладочным контейнером в общем PID-namespace; оригинал не трогается
kubectl debug <pod> -n <ns> --copy-to=<pod>-dbg --share-processes --image=nicolaka/netshoot -- sleep infinity
Рекурсивно раскрыть спецификацию Deployment
Вывести полное дерево вложенных полей спецификации ресурса; удобно искать допустимые поля
kubectl explain deploy.spec --recursive | less
Приостановить и возобновить раскатку
Накопить несколько правок без отдельных раскаток, затем применить всё разом
kubectl rollout pause deploy/<name> -n <ns>; kubectl rollout resume deploy/<name> -n <ns>
Показать последнюю применённую конфигурацию
Показать аннотацию last-applied-configuration; сравнить намерение с реальным состоянием
kubectl apply view-last-applied deploy/<name> -n <ns> -o yaml
Предупреждающие события по всем неймспейсам
Предупреждения по всему кластеру, новые в конце; быстрая сортировка проблемных нагрузок
kubectl get events -A --field-selector type=Warning --sort-by=.lastTimestamp
Найти все упавшие поды по кластеру
Список подов в фазе Failed по всем неймспейсам для очистки или разбора
kubectl get pods -A --field-selector status.phase=Failed
Ждать по условию jsonpath
Блокировать CI до появления внешнего IP у Service; работает по любому полю jsonpath
kubectl wait --for=jsonpath='{.status.loadBalancer.ingress[0].ip}' svc/<name> -n <ns> --timeout=120s
Имперсонация пользователя и группы
Проверить RBAC от чужого имени без его kubeconfig; нужен verb impersonate
kubectl auth can-i list secrets -n <ns> --as=<name> --as-group=system:serviceaccounts
Сортировать поды по числу рестартов
Вывести наиболее перезапускаемые поды, чтобы быстро поймать crashloop
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.status.containerStatuses[0].restartCount}{"\n"}{end}' | sort -k3 -rn | head
Сравнить allocatable и capacity нод
Показать зарезервированный оверхед по нодам; разница = резервы kube/system
kubectl get nodes -o json | jq -r '.items[] | {node:.metadata.name, capCPU:.status.capacity.cpu, allocCPU:.status.allocatable.cpu, capMem:.status.capacity.memory, allocMem:.status.allocatable.memory}'
ConfigMap из env-file с JSON-патчем
Собрать CM из файла KEY=VALUE и JSON-патчем добавить его в envFrom контейнера
kubectl create configmap <name> --from-env-file=app.env -n <ns> --dry-run=client -o yaml | kubectl apply -f -; kubectl patch deploy/<name> -n <ns> --type=json -p='[{"op":"add","path":"/spec/template/spec/containers/0/envFrom/-","value":{"configMapRef":{"name":"<name>"}}}]'
no commands match