Что такое 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 и операционные процессы.