На главную

Контейнеры и CI/CD

Шпаргалка kubectl

get, describe, logs, exec, rollout, контексты и jsonpath — с подстановкой пода и неймспейса.

Подставить свои значения

Значения подставляются прямо в команды — копируйте и вставляйте в терминал.

Показано 65 из 65 команд.

Контексты и неймспейсы

Половина «загадочных» ошибок kubectl — это правильная команда в чужом кластере. Сначала context, потом всё остальное.

  • kubectl config get-contexts

    Все контексты; звёздочка — текущий.

  • kubectl config current-context

    Куда сейчас смотрит kubectl.

  • kubectl config use-context my-context

    Переключиться на другой кластер.

  • kubectl config set-context --current --namespace=default

    Сменить неймспейс по умолчанию, чтобы не писать -n каждый раз.

  • kubectl get ns

    Список неймспейсов.

  • kubectl config view --minify --raw

    Kubeconfig только для текущего контекста, с секретами.

  • kubectl cluster-info

    Адреса control plane и служб кластера.

  • kubectl auth can-i create deployments -n default

    Хватает ли прав; --as user@example.com — проверить за другого.

Смотреть — get

  • kubectl get pods -n default

    Поды неймспейса; -A — по всему кластеру.

  • kubectl get pods -o wide -n default

    Плюс нода, IP и число рестартов.

  • kubectl get all -n default

    Основные объекты разом — быстрый обзор.

  • kubectl get pods --field-selector=status.phase!=Running -n default

    Только проблемные поды.

  • kubectl get pods -l app=my-app -n default

    Фильтр по метке.

  • kubectl get pods --sort-by=.status.containerStatuses[0].restartCount -n default

    Кто чаще всех перезапускается.

  • kubectl get events -n default --sort-by=.lastTimestamp

    События по времени — первое место, куда смотреть при сбое.

  • kubectl get pod my-pod -n default -o yaml

    Полный манифест как его видит кластер.

  • kubectl get nodes -o wide

    Ноды, их версии и адреса.

  • kubectl get pvc,pv -n default

    Тома и заявки на них.

  • kubectl get svc,ingress -n default

    Как трафик попадает внутрь.

  • kubectl get pods -w -n default

    Следить за изменениями в реальном времени.

Разбираться — describe, logs, exec

  • kubectl describe pod my-pod -n default

    События пода: почему Pending, чего не хватило, что сказал kubelet.

  • kubectl logs my-pod -n default

    Лог основного контейнера.

  • kubectl logs my-pod -c sidecar -n default

    Лог конкретного контейнера в поде.

  • kubectl logs my-pod -n default --previous

    Лог предыдущего запуска — единственный способ увидеть, на чём под упал.

  • kubectl logs -f -l app=my-app -n default --max-log-requests=10

    Живой лог всех подов деплоя сразу.

  • kubectl logs my-pod -n default --since=15m --tail=200

    Последние 15 минут, не больше 200 строк.

  • kubectl exec -it my-pod -n default -- sh

    Оболочка внутри контейнера; -- обязателен.

  • kubectl exec my-pod -n default -- env

    Разовая команда без интерактива.

  • kubectl debug -it my-pod -n default --image=busybox --target=app

    Временный контейнер рядом, когда в образе нет даже sh.

  • kubectl cp default/my-pod:/app/dump.txt ./dump.txt

    Забрать файл из контейнера.

  • kubectl port-forward my-pod 8080:80 -n default

    Прокинуть порт пода к себе; svc/name — то же для сервиса.

  • kubectl top pod -n default

    CPU и память подов (нужен metrics-server).

Выкатка — rollout, scale

  • kubectl rollout status deploy/my-app -n default

    Дождаться, пока выкатка доедет; ненулевой код выхода — упала.

  • kubectl rollout history deploy/my-app -n default

    Ревизии деплоя.

  • kubectl rollout undo deploy/my-app -n default

    Откат на предыдущую ревизию; --to-revision=3 — на конкретную.

  • kubectl rollout restart deploy/my-app -n default

    Пересоздать поды, не меняя манифест: обновить конфиг или образ по latest.

  • kubectl rollout pause deploy/my-app -n default

    Приостановить раскатку, чтобы внести несколько правок разом; resume — продолжить.

  • kubectl scale deploy/my-app --replicas=3 -n default

    Изменить число реплик.

  • kubectl set image deploy/my-app app=registry/app:1.2.3 -n default

    Обновить образ одного контейнера.

  • kubectl autoscale deploy/my-app --min=2 --max=10 --cpu-percent=70 -n default

    Создать HPA одной командой.

Менять — apply, patch, edit

  • kubectl apply -f manifest.yaml

    Создать или обновить объекты из файла; -k dir — kustomize.

  • kubectl apply -f manifest.yaml --dry-run=server -o yaml

    Что получится, без записи в кластер. Серверный dry-run учитывает вебхуки.

  • kubectl diff -f manifest.yaml

    Разница между файлом и тем, что в кластере.

  • kubectl edit deploy/my-app -n default

    Правка в редакторе; изменения применяются на выходе.

  • kubectl patch deploy/my-app -n default -p '{"spec":{"replicas":2}}'

    Точечная правка без открытия редактора.

  • kubectl annotate pod my-pod -n default note="разбираемся" --overwrite

    Пометка на объекте; label — то же для меток.

  • kubectl delete pod my-pod -n default --grace-period=0 --force

    Принудительно снести залипший под. Крайняя мера: контроллер может не успеть освободить том.

  • kubectl create secret generic app-env --from-env-file=.env -n default

    Секрет прямо из .env-файла.

  • kubectl create configmap app-conf --from-file=nginx.conf -n default

    ConfigMap из файла.

  • kubectl get secret app-env -n default -o jsonpath='{.data.PASSWORD}' | base64 -d

    Достать одно значение из секрета.

jsonpath и вывод

jsonpath у kubectl свой: range/end вместо фильтров jq, {"\n"} для перевода строки.

  • kubectl get pods -n default -o jsonpath='{.items[*].metadata.name}'

    Имена подов в одну строку.

  • kubectl get pods -n default -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'

    Две колонки: имя и фаза.

  • kubectl get pod my-pod -n default -o jsonpath='{.spec.containers[*].image}'

    Какие образы реально запущены.

  • kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kubeletVersion}{"\n"}{end}'

    Версии kubelet по нодам.

  • kubectl get pods -n default -o custom-columns=NAME:.metadata.name,READY:.status.containerStatuses[0].ready

    Свои колонки без jsonpath-шаблона.

  • kubectl get deploy -n default -o json | jq '.items[].spec.replicas'

    Когда jsonpath не хватает — отдать json в jq.

  • kubectl get pods -n default --no-headers | wc -l

    Просто посчитать.

  • kubectl explain deployment.spec.strategy --recursive

    Документация по полям манифеста прямо в терминале.

Ноды и обслуживание

  • kubectl cordon node-1

    Запретить планировать новые поды на ноду.

  • kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data

    Освободить ноду перед обслуживанием.

  • kubectl uncordon node-1

    Вернуть ноду в работу.

  • kubectl top node

    Нагрузка по нодам.

  • kubectl describe node node-1

    Ресурсы, лимиты, состояния и что на ноде живёт.

  • kubectl taint nodes node-1 key=value:NoSchedule

    Пометка ноды; минус в конце снимает taint.

  • kubectl api-resources --namespaced=true

    Какие ресурсы вообще есть в кластере и их короткие имена.