🚀 Шпаргалка по Kubernetes (kubectl)

🔹 Общие команды

Информация о кластере и контексте:

  • kubectl version — Показать версию kubectl и сервера API
  • kubectl cluster-info — Информация о кластере
  • kubectl cluster-info dump — Детальный дамп информации о кластере
  • kubectl config get-contexts — Список доступных контекстов
  • kubectl config use-context NAME — Переключиться на другой контекст
  • kubectl config current-context — Показать текущий контекст
  • kubectl config view — Показать весь конфиг kubeconfig

Управление Namespaces:

  • kubectl get ns — Получить список namespace
  • kubectl create ns my-namespace — Создать namespace
  • kubectl delete ns my-namespace — Удалить namespace
  • kubectl config set-context --current --namespace=NAMESPACE — Переключить namespace по умолчанию

🔹 Работа с подами (Pods)

Просмотр информации:

  • kubectl get pods — Получить список подов
  • kubectl get pods -o wide — Расширенная информация о подах (IP, Node, Status)
  • kubectl get pods -w — Отслеживание изменений в реальном времени
  • kubectl get pods -A — Поды из всех namespace
  • kubectl get pods -l key=value — Поды с определённым лейблом
  • kubectl describe pod POD_NAME — Подробная информация о поде
  • kubectl explain pod — Справка по структуре Pod ресурса

Логи и доступ:

  • kubectl logs POD_NAME — Просмотр логов пода
  • kubectl logs POD_NAME -f — Стриминг логов пода (follow)
  • kubectl logs POD_NAME -p — Логи предыдущего контейнера
  • kubectl logs POD_NAME --timestamps=true — Логи с временными метками
  • kubectl logs -f deployment/DEPLOY_NAME — Логи из всех подов deployment
  • kubectl logs POD_NAME -c CONTAINER_NAME — Логи конкретного контейнера

Взаимодействие с подом:

  • kubectl exec -it POD_NAME -- bash — Войти в контейнер (bash)
  • kubectl exec -it POD_NAME -- sh — Войти в контейнер (если нет bash)
  • kubectl exec POD_NAME -- COMMAND — Выполнить команду внутри пода
  • kubectl cp POD_NAME:/path/file.txt ./file.txt — Скопировать файл из пода
  • kubectl port-forward POD_NAME 8080:8080 — Пробросить порт локально

Управление подами:

  • kubectl delete pod POD_NAME — Удалить под
  • kubectl delete pods --all — Удалить все поды в текущем namespace
  • kubectl run nginx --image=nginx — Создать под непосредственно (для тестирования)

🔹 Создание и применение ресурсов

Применение манифестов:

  • kubectl apply -f file.yaml — Применить манифест
  • kubectl apply -f dir/ — Применить все манифесты из директории
  • kubectl apply -f https://url/file.yaml — Применить манифест из URL
  • kubectl apply -f file1.yaml -f file2.yaml — Применить несколько файлов
  • kubectl apply -f - < file.yaml — Применить из stdin

Создание ресурсов (imperative):

  • kubectl create deployment nginx --image=nginx — Создать deployment
  • kubectl create service clusterip my-svc --tcp=80:80 — Создать Service
  • kubectl expose deployment DEPLOY --type=LoadBalancer --port=80 --target-port=8080 — Опубликовать Service

Генерация YAML-файлов (без применения):

  • kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml — Генерировать YAML пода
  • kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml — Генерировать YAML deployment
  • kubectl create service clusterip my-svc --tcp=80:80 --dry-run=client -o yaml > service.yaml — Генерировать YAML сервиса

ConfigMap и Secrets:

  • kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 — Создать ConfigMap из пар
  • kubectl create configmap my-config --from-file=./config.properties — Создать ConfigMap из файла
  • kubectl create configmap my-config --from-env-file=.env — Создать ConfigMap из переменных окружения
  • kubectl create secret generic my-secret --from-literal=key1=value1 — Создать Secret
  • kubectl create secret generic my-secret --from-file=./secret.txt — Создать Secret из файла
  • kubectl create secret docker-registry my-reg --docker-server=registry.io --docker-username=user --docker-password=pass — Создать registry Secret

🔹 Управление Deployments

Просмотр:

  • kubectl get deployments — Получить список deployments
  • kubectl get deploy -o wide — Расширенная информация
  • kubectl describe deployment DEPLOY_NAME — Подробное описание deployment
  • kubectl get deploy --show-labels — Показать лейблы

Масштабирование и обновление:

  • kubectl scale deployment DEPLOY_NAME --replicas=3 — Изменить количество реплик
  • kubectl set image deployment/DEPLOY_NAME container_name=new_image:tag — Обновить образ
  • kubectl set env deployment/DEPLOY_NAME KEY=VALUE — Установить переменные окружения
  • kubectl patch deployment DEPLOY_NAME -p '{\"spec\":{\"replicas\":5}}' — Патчить deployment

Управление:

  • kubectl delete deployment DEPLOY_NAME — Удалить deployment

🔹 Работа с Services

Просмотр:

  • kubectl get services или kubectl get svc — Получить список сервисов
  • kubectl get svc -o wide — Расширенная информация
  • kubectl describe service SVC_NAME — Подробная информация о сервисе
  • kubectl get endpoints SVC_NAME — Показать endpoints сервиса

Управление:

  • kubectl delete service SVC_NAME — Удалить сервис
  • kubectl expose pod POD_NAME --port=80 --target-port=8080 --type=ClusterIP — Создать Service для пода

🔹 Ingress

Просмотр:

  • kubectl get ingress — Получить список Ingress ресурсов
  • kubectl get ingress -o wide — Расширенная информация
  • kubectl describe ingress INGRESS_NAME — Подробное описание
  • kubectl get ingress -A — Ingress из всех namespace

Управление:

  • kubectl delete ingress INGRESS_NAME — Удалить Ingress
  • kubectl apply -f ingress.yaml — Применить Ingress манифест

🔹 Мониторинг нагрузки и ресурсов

Resource Usage (требует metrics-server):

  • kubectl top nodes — Нагрузка CPU и памяти на узлах
  • kubectl top pods — Нагрузка CPU и памяти на подах
  • kubectl top pods -A — Нагрузка всех подов
  • kubectl top pod POD_NAME --containers — Нагрузка по контейнерам

Просмотр узлов:

  • kubectl get nodes — Список узлов
  • kubectl describe node NODE_NAME — Подробная информация об узле
  • kubectl get nodes -o wide — Расширенная информация об узлах

🔹 Управление Secrets и ConfigMaps

Secrets:

  • kubectl get secrets — Получить список секретов
  • kubectl describe secret SECRET_NAME — Подробное описание секрета
  • kubectl get secret SECRET_NAME -o yaml — Получить Secret в формате YAML
  • kubectl delete secret SECRET_NAME — Удалить секрет
  • kubectl create secret generic my-secret --from-literal=key1=value1 — Создать Secret

ConfigMaps:

  • kubectl get configmaps или kubectl get cm — Получить список ConfigMap
  • kubectl describe configmap CONFIGMAP_NAME — Описание ConfigMap
  • kubectl get configmap CONFIGMAP_NAME -o yaml — Получить ConfigMap в формате YAML
  • kubectl delete configmap CONFIGMAP_NAME — Удалить ConfigMap
  • kubectl create configmap my-config --from-literal=key1=value1 — Создать ConfigMap

🔹 Управление rollouts (деплойменты)

Перезагрузка:

  • kubectl rollout restart deployment DEPLOY_NAME — Перезапустить deployment (мягкое обновление без даунтайма)

💡 Совет: используйте этот способ для подхвата новых ConfigMap или Secret без изменения deployment.

История и откат:

  • kubectl rollout history deployment DEPLOY_NAME — История ревизий deployment
  • kubectl rollout history deployment DEPLOY_NAME --revision=2 — Деталь конкретной ревизии
  • kubectl rollout undo deployment DEPLOY_NAME — Откатить deployment к последней ревизии
  • kubectl rollout undo deployment DEPLOY_NAME --to-revision=2 — Откатить к конкретной ревизии
  • kubectl rollout status deployment DEPLOY_NAME — Статус текущего rollout

🔹 Лейблы и селекторы

Лейблы на ресурсах:

  • kubectl label pod POD_NAME key=value — Добавить лейбл к поду
  • kubectl label pod POD_NAME key=value --overwrite — Перезаписать лейбл
  • kubectl label pod POD_NAME key- — Удалить лейбл
  • kubectl label nodes NODE_NAME key=value — Добавить лейбл к узлу

Поиск по лейблам:

  • kubectl get pods -l key=value — Поды с определённым лейблом
  • kubectl get pods -l key!=value — Поды БЕЗ определённого лейбла
  • kubectl get pods -l key in (value1,value2) — Поды с одним из значений
  • kubectl get pods --show-labels — Показать лейблы

🔹 Отладка и диагностика

События и статус:

  • kubectl get events — События в кластере
  • kubectl describe pod POD_NAME — Полная информация с events
  • kubectl get events --sort-by='.lastTimestamp' — События отсортированные по времени

Отладочные поды:

  • 💡kubectl debug pod/<имя> -it --image=busybox — временный (Ephemeral) контейнер, который можно «вживить» в существующий, но сломанный Pod без его пересоздания и дебажить сеть, файловую систему, процессы.
  • kubectl run debug-pod --image=busybox --stdin --tty --restart=Never -- sh — Запустить отладочный под
  • kubectl debug node/NODE_NAME -it --image=ubuntu — Отладка узла

Проверка работы сети:

  • kubectl run test-pod --image=busybox --restart=Never -- ping google.com — Тест пинга
  • kubectl run test-pod --image=busybox --restart=Never -- nslookup kubernetes.default — Тест DNS

🔹 HELM

Управление репозиториями:

  • helm repo add REPO_NAME https://charts.example.com — Добавить репозиторий чартов
  • helm repo list — Список добавленных репозиториев
  • helm repo update — Обновить индексы репозиториев
  • helm repo remove REPO_NAME — Удалить репозиторий

Установка и обновление:

  • helm install RELEASE_NAME REPO/CHART — Установить чарт
  • helm install RELEASE_NAME REPO/CHART -f values.yaml — Установить с кастомными значениями
  • helm install RELEASE_NAME REPO/CHART --set key=value — Установить с переопределением значений
  • helm upgrade RELEASE_NAME REPO/CHART — Обновить чарт
  • helm upgrade --install RELEASE_NAME REPO/CHART — Обновить или установить

Просмотр информации:

  • helm list — Список установленных чартов
  • helm list -A — Список чартов из всех namespace
  • helm show values REPO/CHART — Показать значения по умолчанию
  • helm show chart REPO/CHART — Информация о чарте
  • helm get values RELEASE_NAME — Получить используемые значения

История и откат:

  • helm history RELEASE_NAME — История релизов
  • helm rollback RELEASE_NAME REVISION — Откат чарта к версии
  • helm uninstall RELEASE_NAME — Удалить чарт
  • helm version — Версия Helm

Тестирование и отладка:

  • helm lint CHART_PATH — Проверить синтаксис чарта
  • helm template RELEASE_NAME CHART_PATH — Просмотреть сгенерированные манифесты

🔹 Быстрые выводы данных

Форматированный вывод:

  • kubectl get pods -o json — Вывод в JSON
  • kubectl get pods -o yaml — Вывод в YAML
  • kubectl get pods -o wide — Расширенная таблица
  • kubectl get pods -o name — Только имена ресурсов
  • kubectl get pods -o jsonpath='{.items[*].metadata.name}' — Кастомный JSONPath запрос
  • kubectl get pods --sort-by=.metadata.creationTimestamp — Сортировка по времени создания

Экспорт:

  • kubectl get all -o yaml > backup.yaml — Экспортировать все ресурсы
  • kubectl get deployment -o yaml | kubectl apply -f - — Скопировать deployment

🔹 Полезные справки и объяснения

Справочные команды:

  • kubectl explain RESOURCE — Справка по ресурсу
  • kubectl explain RESOURCE --recursive — Полная справка с вложенными полями
  • kubectl api-resources — Список всех доступных ресурсов
  • kubectl api-versions — Список версий API

Быстрая активация автодополнения:

# Bash
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc


# Zsh
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc

💡 Практические советы

1. Быстрая работа с namespace по умолчанию:

kubectl config set-context --current --namespace=production

2. Просмотр всех событий в кластере:

kubectl get events -A --sort-by='.lastTimestamp'

3. Форсировать удаление пода (если висит):

kubectl delete pod POD_NAME --grace-period=0 --force

4. Посмотреть, какие поды потребляют ресурсы:

kubectl top pods -A | sort --reverse --numeric --key 3

5. Отредактировать ресурс на лету:

kubectl edit pod POD_NAME

6. Применить манифесты и следить за процессом:

kubectl apply -f deployment.yaml && kubectl rollout status deployment/my-app

7. Проверить статус всех компонентов кластера:

kubectl get componentstatuses

8. Просмотреть расходы ресурсов:

kubectl describe node NODE_NAME | grep -A 5 "Allocated resources"

📝 Обновлено: 16.11.2025
💡 Совет: Используйте kubectl explain RESOURCE --recursive для получения справки о любой сущности в Kubernetes!

Поделиться