Ответ
Pod (Под) — это минимальная и самая простая развертываемая единица в Kubernetes. Важно понимать, что это не контейнер, а абстракция над одним или несколькими контейнерами.
Pod представляет собой группу из одного или нескольких контейнеров, которые всегда развертываются вместе на одном и том же узле (Node) и разделяют общие ресурсы.
Ключевые особенности Пода:
- Общее сетевое пространство: Все контейнеры внутри одного пода имеют общий IP-адрес и диапазон портов. Они могут взаимодействовать друг с другом через
localhost
. - Общее хранилище (Volumes): Контейнеры в поде могут совместно использовать подключенные к поду тома (volumes), что позволяет им обмениваться данными.
- Атомарность и общий жизненный цикл: Все контейнеры в поде создаются, запускаются, останавливаются и удаляются вместе. Если главный контейнер пода завершается, весь под перезапускается (в зависимости от политики
restartPolicy
). - Основа для паттернов: Модель пода позволяет реализовывать такие паттерны, как "sidecar", где вспомогательный контейнер расширяет функциональность основного (например, для сбора логов, метрик или в качестве прокси).
Пример манифеста простого пода:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # Имя пода
labels:
app: nginx
spec:
containers:
- name: nginx-container # Имя контейнера внутри пода
image: nginx:latest # Образ для запуска
ports:
- containerPort: 80 # Порт, который слушает контейнер
Почему подами не управляют напрямую?
Поды считаются "эфемерными" (недолговечными). Они не восстанавливаются сами после сбоя узла. Поэтому в реальной практике подами управляют через контроллеры более высокого уровня, такие как:
- Deployment: Обеспечивает декларативное обновление подов и их репликацию (самовосстановление).
- StatefulSet: Для приложений с состоянием, требующих стабильных идентификаторов и хранилища.
- DaemonSet: Гарантирует, что на каждом узле кластера будет запущен один экземпляр пода.