Pod

Тема дорожной карты · Kubernetes

Pod Kubernetes — наименьшая единица развёртывания в K8s, представляющая один или несколько тесно связанных контейнеров, разделяющих сетевое пространство имён, петлевой адрес localhost и опционально тома хранилища. Каждый Pod получает уникальный IP-адрес в масштабе кластера, назначаемый CNI-плагином; контейнеры внутри одного Pod'а взаимодействуют через localhost, а с другими Pod'ами и Service'ами — через их кластерные IP или DNS-имена, разрешаемые CoreDNS. Поля спецификации Pod'а — spec.containers[].image, spec.containers[].resources.requests, spec.containers[].env, spec.volumes и spec.initContainers — определяют полную среду выполнения, включая хранилище на основе emptyDir или PersistentVolumeClaim. В production Pod'ы редко создаются напрямую; вместо этого ими управляют контроллеры более высокого уровня — Deployment, StatefulSet, DaemonSet, Job, — обрабатывающие замену Pod'ов, масштабирование и rolling-обновления. kubectl describe pod <name> и kubectl logs <pod> -c <container> — основные диагностические команды для проверки событий Pod'а, потребления ресурсов и вывода контейнера.

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

Pod — один из workload-примитивов Kubernetes. Определяет желаемое состояние набора pods — число реплик, pod template, стратегия обновления — а контроллер непрерывно сводит реальное состояние к желаемому. При падении pod или ноды контроллер планирует замену. При обновлении pod template контроллер оркестрирует rolling update с health-проверками между батчами.

Когда применять

Выбирайте Pod по характеристикам нагрузки: Deployment для stateless-сервисов (HTTP API, воркеры), StatefulSet для stateful с stable network identity (БД, очереди), DaemonSet для one-pod-per-node инфраструктуры (log-коллекторы, CNI), Job для batch-задач, CronJob для запланированных batch. Смешивание типов без нужды создаёт операционную сложность; выбирайте простейший подходящий примитив.

Типичные ошибки

Workload-ловушки: слишком низкие resource requests (pods scheduled, но выселяются под нагрузкой) или слишком высокие (кластер выглядит полным при малом реальном использовании); отсутствие liveness/readiness-проб (load balancer шлёт трафик на полу-стартанутые pods); использование Deployment для stateful-нагрузок, которым нужна StatefulSet-упорядоченность. Всегда измеряйте реальное использование ресурсов до sizing.

Связанные понятия

Полезные ресурсы