Определение простыми словами
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.