Контейнеры и 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
Какие ресурсы вообще есть в кластере и их короткие имена.