Метки, селекторы и базовые команды kubectl

Метки — это «клей» Kubernetes: по ним сервисы находят поды, а вы фильтруете объекты. Заодно разберём ежедневные команды kubectl.

Label (метка) — пара ключ-значение на объекте; selector — правило выбора объектов по их меткам.

Метки — фундаментальный механизм связывания в Kubernetes. Deployment находит свои поды по меткам, Service направляет трафик на поды по меткам, вы сами фильтруете вывод по меткам. Никаких жёстких ссылок — только совпадение меток.

Метки в манифесте

metadata:
  labels:
    app: web
    tier: frontend
    env: prod

Теперь можно выбрать все поды фронтенда в проде:

kubectl get pods -l tier=frontend,env=prod

get — список объектов

Базовая команда для обзора. -o wide добавит колонки (узел, IP), -A покажет все namespace:

kubectl get pods
kubectl get pods -o wide
kubectl get deployments,services

describe — подробности и события

Когда под не стартует, describe — первое, что смотрят: внизу вывода список событий с причиной проблемы (не скачался образ, не хватило ресурсов):

kubectl describe pod nginx-pod

Вывод:

...
Events:
  Type     Reason     Age   Message
  ----     ------     ----  -------
  Normal   Scheduled  10s   Successfully assigned default/nginx-pod to minikube
  Normal   Pulling    9s    Pulling image "nginx:1.27"
  Normal   Started    6s    Started container nginx

logs — что пишет приложение

Логи контейнера в поде. Флаг -f — следить в реальном времени:

kubectl logs nginx-pod
kubectl logs -f nginx-pod

exec — зайти внутрь

Выполнить команду или открыть оболочку внутри контейнера для отладки:

kubectl exec -it nginx-pod -- sh

delete — удалить объект

Удалить можно по имени или по файлу манифеста:

kubectl delete pod nginx-pod
kubectl delete -f web-deploy.yaml
КомандаНазначение
kubectl getсписок объектов
kubectl describeдетали и события объекта
kubectl logsлоги контейнера
kubectl exec -itкоманда/оболочка внутри контейнера
kubectl deleteудалить объект

Итог

  • Метки и селекторы связывают объекты по совпадению ключ-значение.
  • get, describe, logs, exec, delete — каждодневный набор kubectl.
  • describe с его событиями — первый инструмент при диагностике проблем.
Проверьте себя
1. Для чего служат метки (labels)?
AДля шифрования данных
BДля связывания и выбора объектов по парам ключ-значение
CДля нумерации узлов
DДля хранения логов
2. Какая команда покажет события и причину, по которой под не запускается?
Akubectl get
Bkubectl logs
Ckubectl describe pod
Dkubectl scale
3. Чем выбрать все поды с меткой tier=frontend?
Akubectl get pods -l tier=frontend
Bkubectl logs tier=frontend
Ckubectl exec tier=frontend
Dkubectl describe tier=frontend
Поддержать проект