🚀 Шпаргалка по 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!

Поделиться