kubectl
← Home

kubectl - Кластер и инфраструктура

Быстрая навигация: используйте Ctrl/Cmd + F для перехода к разделам. Ключевые слова: config, namespaces, nodes, crd, api-resources, capacity, versions, field-selectors.

Контексты и конфигурация (config)

Официальная документация Организация доступа через kubeconfig ↗

# Показать текущий контекст
kubectl config current-context

# Показать все контексты
kubectl config get-contexts

# Переключиться на другой контекст
kubectl config use-context <context-name>

# Показать всю конфигурацию
kubectl config view

# Установить namespace по умолчанию для контекста
kubectl config set-context --current --namespace=<namespace>

# Добавить новый кластер
kubectl config set-cluster <cluster-name> --server=https://k8s-api:6443

# Добавить credentials
kubectl config set-credentials <user-name> --token=<token>

# Создать новый контекст
kubectl config set-context <context-name> --cluster=<cluster> --user=<user>

# Удалить контекст
kubectl config delete-context <context-name>

Управление неймспейсами

Официальная документация Namespaces ↗

# Список всех неймспейсов
kubectl get namespaces
kubectl get ns

# Подробная информация о неймспейсе (квоты, лимиты)
kubectl describe ns <namespace>

# Создать неймспейс
kubectl create namespace <namespace>
kubectl create ns <namespace>

# Удалить неймспейс (удаляет все ресурсы внутри)
kubectl delete ns <namespace>

# Установить дефолтный неймспейс для текущего контекста
kubectl config set-context --current --namespace=<namespace>

# Показать текущий дефолтный неймспейс
kubectl config view --minify | grep namespace

# Получить все ресурсы в неймспейсе
kubectl get all -n <namespace>

# Получить все ресурсы во всех неймспейсах
kubectl get all -A

# Список неймспейсов со статусом и датой создания
kubectl get ns -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,AGE:.metadata.creationTimestamp

# Добавить метку к неймспейсу
kubectl label namespace <namespace> env=production

# Показать неймспейсы с метками
kubectl get ns --show-labels

# Подсчёт подов по неймспейсам
kubectl get pods -A --no-headers | awk '{print $1}' | sort | uniq -c | sort -rn

Управление нодами (taint/cordon/drain)

Официальная документация Безопасный drain ноды ↗ Taints и tolerations ↗

# Запретить планирование новых подов на ноду
kubectl cordon <node-name>

# Разрешить планирование на ноду
kubectl uncordon <node-name>

# Эвакуировать поды с ноды (для обслуживания)
kubectl drain <node-name>

# Drain с игнорированием DaemonSet
kubectl drain <node-name> --ignore-daemonsets

# Drain с удалением локальных данных
kubectl drain <node-name> --delete-emptydir-data

# Добавить taint на ноду
kubectl taint nodes <node-name> key=value:NoSchedule

# Удалить taint (минус в конце)
kubectl taint nodes <node-name> key=value:NoSchedule-

# Типы taint эффектов: NoSchedule, PreferNoSchedule, NoExecute
kubectl taint nodes <node-name> key=value:NoExecute

Custom Resource Definitions (CRD)

Официальная документация CustomResourceDefinition ↗

# Список всех CRD в кластере
kubectl get crds
kubectl get customresourcedefinitions

# Подробная информация о CRD
kubectl describe crd <crd-name>

# Просмотр CRD в формате YAML
kubectl get crd <crd-name> -o yaml

# Удалить CRD (удаляет все экземпляры этого ресурса тоже)
kubectl delete crd <crd-name>

# Список экземпляров кастомного ресурса
kubectl get <custom-resource-kind>
kubectl get <custom-resource-kind> -A

# Подробная информация об экземпляре кастомного ресурса
kubectl describe <custom-resource-kind> <name>

# Фильтр CRD по группе
kubectl get crds | grep <group-name>

# Показать CRD с группой и областью видимости
kubectl get crds -o custom-columns=NAME:.metadata.name,GROUP:.spec.group,SCOPE:.spec.scope,VERSION:.spec.versions[0].name

# Объяснение полей кастомного ресурса
kubectl explain <custom-resource-kind>
kubectl explain <custom-resource-kind>.spec

# Применить кастомный ресурс из файла
kubectl apply -f my-resource.yaml

# Удалить все экземпляры кастомного ресурса
kubectl delete <custom-resource-kind> --all -n <namespace>

Работа с API ресурсами (api-resources)

Официальная документация kubectl api-resources ↗

# Показать все доступные API ресурсы
kubectl api-resources

# Показать только namespaced ресурсы
kubectl api-resources --namespaced=true

# Показать ресурсы конкретной API группы
kubectl api-resources --api-group=apps

# Показать версии API
kubectl api-versions

# Объяснить структуру ресурса
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers

# Рекурсивное объяснение
kubectl explain pod --recursive

Планирование ёмкости кластера (capacity planning)

Официальная документация Requests и limits контейнеров ↗

# Показать выделяемые ресурсы по каждой ноде
kubectl get nodes -o custom-columns=\
'NAME:.metadata.name,CPU:.status.allocatable.cpu,MEMORY:.status.allocatable.memory,PODS:.status.allocatable.pods'

# Запрошенные (requests) ресурсы vs выделяемые по нодам
kubectl describe nodes | grep -A 6 "Allocated resources"

# Реальное потребление ресурсов по нодам (требует metrics-server)
kubectl top nodes --sort-by=cpu
kubectl top nodes --sort-by=memory

# Реальное потребление по подам во всех неймспейсах
kubectl top pods -A --sort-by=cpu
kubectl top pods -A --sort-by=memory

# 20 самых «прожорливых» по памяти подов
kubectl top pods -A --sort-by=memory --no-headers | head -20

# Запросы и лимиты ресурсов для всех подов в неймспейсе
kubectl get pods -o custom-columns=\
'NAME:.metadata.name,CPU_REQ:.spec.containers[0].resources.requests.cpu,MEM_REQ:.spec.containers[0].resources.requests.memory,CPU_LIM:.spec.containers[0].resources.limits.cpu,MEM_LIM:.spec.containers[0].resources.limits.memory'

# Найти поды без resource requests (риск: могут вытеснять другие workload-ы)
kubectl get pods -A -o json | \
  jq -r '.items[] | select(.spec.containers[].resources.requests == null) | [.metadata.namespace, .metadata.name] | @tsv'

# Количество подов на каждой ноде (проверка равномерности распределения)
kubectl get pods -A -o wide --no-headers | awk '{print $8}' | sort | uniq -c | sort -rn

# Проверить ResourceQuota и текущее потребление
kubectl describe resourcequota -A

# Проверить LimitRange в неймспейсе
kubectl get limitrange -A

# Детальная сводка по ноде: запрошено vs доступно
kubectl describe node <node-name> | grep -E "cpu|memory|Allocated|requests|limits" | head -30

Версии и совместимость (version skew)

Официальная документация Version Skew Policy ↗

# Версия kubectl client и Kubernetes API server
kubectl version
kubectl version --output=yaml

# Короткая версия API server через raw endpoint
kubectl get --raw /version

# Поддерживаемые API группы и версии
kubectl api-versions

# Проверить, какие deprecated API реально используются объектами
kubectl get all -A -o yaml | grep -E 'apiVersion: (extensions/v1beta1|apps/v1beta1|apps/v1beta2)'

# Правило совместимости: kubectl должен быть в пределах +/-1 minor версии от kube-apiserver
# Пример: для API server v1.35 используйте kubectl v1.34, v1.35 или v1.36.

# kuberc: пользовательские preferences и aliases kubectl (если включено в вашей версии kubectl)
kubectl options | grep -i kuberc

Селекторы полей и фильтрация

Официальная документация Field Selectors ↗

# Получить поды по статусу (Running, Pending, Failed)
kubectl get pods --field-selector=status.phase=Running
kubectl get pods --field-selector=status.phase=Failed -A

# Получить поды на конкретной ноде
kubectl get pods --field-selector=spec.nodeName=<node-name> -A

# Получить поды НЕ в статусе Running
kubectl get pods --field-selector='status.phase!=Running' -A

# Объединить несколько селекторов полей
kubectl get pods --field-selector=status.phase=Running,spec.nodeName=<node-name>

# Получить сервисы определённого типа
kubectl get services --field-selector=spec.type=LoadBalancer -A

# Получить события определённого типа (Warning/Normal)
kubectl get events --field-selector=type=Warning -A

# Получить события для конкретного объекта
kubectl get events --field-selector=involvedObject.name=<pod-name>,involvedObject.kind=Pod

# Следить за ресурсами в реальном времени (--watch)
kubectl get pods --watch
kubectl get pods -w

# Следить с конкретным селектором полей
kubectl get pods --field-selector=status.phase=Pending -w

# Фильтрация по меткам (несколько вариантов)
kubectl get pods -l 'app=myapp,tier=backend'
kubectl get pods -l 'app in (frontend,backend)'
kubectl get pods -l 'app notin (legacy)'
kubectl get pods -l '!deprecated'

← Назад к шпаргалке