Что такое kubectl и для чего он используется?

Что такое kubectl и для чего он используется

kubectl — это командная строка (CLI) для взаимодействия с Kubernetes-кластером. По сути это стандартный клиент, который отправляет запросы к Kubernetes API-серверу и позволяет вам управлять ресурсами кластера: создавать, изменять, удалять и просматривать состояние Pod, Deployment, Service, ConfigMap, Secret, Node, Namespace и других объектов.

Как это работает (коротко)

kubectl читает файл конфигурации (kubeconfig, обычно ~/.kube/config), в котором хранятся сведения о кластерах, пользователях и контекстах (комбинация кластер-пользователь-namespace). Команды kubectl переводятся в REST-вызовы к API-серверу Kubernetes; аутентификация и авторизация определяются настройками в kubeconfig и политиками RBAC в кластере.

Основные сценарии использования

  • Просмотр ресурсов: kubectl get pods, kubectl get svc --all-namespaces.

  • Детальная информация: kubectl describe pod my-pod.

  • Применение манифестов (YAML/JSON): kubectl apply -f deployment.yaml.

  • Создание/удаление ресурсов: kubectl create -f file.yaml, kubectl delete -f file.yaml.

  • Логи и отладка: kubectl logs my-pod, kubectl exec -it my-pod -- /bin/sh.

  • Порт-форвардинг для локального доступа к сервису: kubectl port-forward svc/my-svc 8080:80.

  • Масштабирование: kubectl scale deployment/my-deploy --replicas=5.

  • Роллауты: kubectl rollout status deployment/my-deploy, kubectl rollout undo ....

  • Управление узлами: kubectl cordon node1, kubectl drain node1.

  • Просмотр метрик (при установленном metrics-server): kubectl top pods.

Декларативный vs императивный подход

  • Императивные команды (create, set, scale) выполняют конкретное действие сразу.

  • Декларативный подход (рекомендуемый) — писать YAML-манифесты и применять их через kubectl apply -f. Тогда состояние кластера описывается в файлах, что удобно для версионирования (GitOps) и повторяемости.

Полезные опции и приёмы

  • -n NAMESPACE или --all-namespaces.

  • Форматы вывода: -o wide, -o yaml, -o json, -o jsonpath='{...}'.

  • kubectl explain <resource> — показывает схему и поля ресурса.

  • kubectl diff -f manifest.yaml — показывает отличия между локальным манифестом и реальным состоянием (полезно перед apply).

  • kubectl apply -k . — поддержка kustomize для наложения конфигураций.

  • --dry-run=client|server — симуляция без фактического изменения (клиентская или серверная проверка).

  • Лэйблы и селекторы: kubectl get pods -l app=nginx — фильтрация по меткам.

Безопасность и права

Доступ через kubectl ограничивается правами пользователя, указанного в kubeconfig и политиками RBAC в кластере. Важно не хранить секреты в открытом виде (YAML в репозитории) и не исполнять команды от имени администратора без необходимости.

Расширения и плагины

kubectl поддерживает плагины (расширения командной строки). Сообщество предлагает менеджер плагинов krew, набор утилит для удобства (например, переключение контекста/неймспейса, удобные просматривающие утилиты). Плагины упрощают задачи, которые часто повторяются.

Когда и зачем используется в реальной работе

kubectl — основной инструмент разработчика, оператора (SRE/DevOps) и инженера по поддержке для:

  • Быстрой диагностики инцидентов (логи, exec, describe).

  • Развертывания и обновления приложений (apply, rollout).

  • Автоматизации в скриптах и CI/CD (в сочетании с манифестами).

  • Управления жизненным циклом кластерных ресурсов и узлов.

Примеры команд

kubectl get pods -n frontend
kubectl apply -f ./manifests/
kubectl logs -f deploy/my-app
kubectl exec -it my-pod -- bash
kubectl port-forward svc/my-service 8080:80
kubectl scale deployment/api --replicas=3
kubectl describe node node-1
kubectl config use-context production
kubectl explain deployment.spec.replicas

Резюме технических свойств (кратко)

  • CLI-клиент для Kubernetes API.

  • Работает через kubeconfig/контексты.

  • Поддерживает декларативные манифесты и множество операций над ресурсами.

  • Имеет богатый набор опций для вывода, фильтрации, отладки и управления.

  • Расширяем через плагины; интегрируется в CI/CD и операционные процессы.