kubectl — что это, как использовать CLI Kubernetes | Глоссарий FREEHOSTING

kubectl

Kubernetes Control CLI
kubectl — kubectl — официальная утилита командной строки для управления Kubernetes. Отправляет HTTP-запросы к API-серверу кластера, разворачивает и обновляет манифесты, смотрит логи подов, выполняет команды внутри контейнеров. Базовый инструмент SRE и DevOps.

Определение простыми словами

kubectl — это «пульт управления» Kubernetes: одна команда — один HTTP-запрос к API-серверу. Через него вы создаёте поды и сервисы, смотрите статус деплоя, читаете логи, заходите внутрь контейнера для отладки. Конфигурация подключения и текущего контекста хранится в файле ~/.kube/config — там адреса API-серверов, сертификаты и токены.

kubectl поддерживает несколько кластеров и неймспейсов через контексты. Утилита расширяется плагинами через krew (kubectl ctx, kubectl ns, kubectl tree), а вывод можно отдать в jq или yq для скриптов.

Сравнение

Инструмент Назначение Где удобен
kubectl Прямые операции с API кластера Ежедневная работа SRE/разработчика
Helm Управление пакетами (charts) Шаблонизация и релизы приложений
k9s TUI поверх kubectl Интерактивная навигация по подам и логам
kustomize Сборка манифестов из оверлеев Среды dev/stage/prod без копипаста
OpenLens / Lens Графический клиент Обзор и преподавание новичкам

Кейсы использования

  • Деплой новой версии приложения: kubectl apply -f deploy.yaml и kubectl rollout status — стандартный CI-шаг.
  • Отладка упавшего пода: kubectl describe pod, kubectl logs —previous, kubectl exec -it — /bin/sh для входа в контейнер.
  • Маршрутизация трафика на локальную машину: kubectl port-forward svc/api 8080:80 для проверки сервиса без публикации.
  • Резервное копирование: kubectl get all -A -o yaml > backup.yaml как страховка перед миграцией кластера.
  • Негативный сценарий: kubectl delete -f без бэкапа в проде уносит ConfigMap и Secret. Поможет включённый аудит-лог, контроль ролей RBAC и привычка работать через —dry-run=client перед apply.

Технические детали

# Установка стабильной версии kubectl на Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
kubectl version --client

# Подключение к кластеру (KUBECONFIG от провайдера)
export KUBECONFIG=~/.kube/prod-cluster.yaml
kubectl config get-contexts
kubectl config use-context prod

# Базовые операции
kubectl get pods -A -o wide
kubectl describe pod nginx-7c79c4b -n web
kubectl logs -f deploy/api -n web --tail=200
kubectl exec -it deploy/api -n web -- sh

# Безопасный apply: сухой прогон + diff
kubectl apply -f deploy.yaml --dry-run=client -o yaml
kubectl diff -f deploy.yaml
kubectl apply -f deploy.yaml

# Откат деплоя на предыдущую ревизию
kubectl rollout history deploy/api -n web
kubectl rollout undo deploy/api -n web

Частые вопросы

Чем kubectl отличается от Helm?

kubectl работает с готовыми манифестами и одиночными ресурсами. Helm — пакетный менеджер: шаблонизирует YAML, поддерживает версии релизов и откаты на уровне пакета. На практике их используют вместе — Helm готовит манифесты, kubectl применяет точечные правки и отладку.

Как переключаться между кластерами в kubectl?

Используйте контексты: kubectl config get-contexts покажет список, kubectl config use-context имя переключит. Удобный плагин kubectx (через krew) даёт интерактивный выбор и сокращает синтаксис.

Безопасно ли держать kubeconfig на ноутбуке?

Файл содержит токен или клиентский сертификат с правами на кластер — относитесь к нему как к приватному SSH-ключу. Храните только нужные контексты, шифруйте диск, используйте короткоживущие токены OIDC и отдельные kubeconfig для prod и dev.