Pod в Kubernetes

Pod — это наименьшая развертываемая единица в Kubernetes, которая представляет собой группу из одного или нескольких контейнеров, разделяющих хранилище и сеть. Pod является основным строительным блоком приложений в Kubernetes.

Характеристики Pod

  • Общая сеть — все контейнеры разделяют IP адрес и порты
  • Общее хранилище — volumes доступны всем контейнерам
  • Жизненный цикл — контейнеры запускаются и останавливаются вместе
  • Эфемерность — Pod'ы могут быть пересозданы в любой момент

Состояния Pod

  • Pending — Pod создан, но контейнеры еще не запущены
  • Running — хотя бы один контейнер запущен
  • Succeeded — все контейнеры успешно завершились
  • Failed — хотя бы один контейнер завершился с ошибкой
  • Unknown — состояние не может быть определено

Пример Pod манифеста

 1apiVersion: v1
 2kind: Pod
 3metadata:
 4  name: my-app
 5  labels:
 6    app: my-app
 7spec:
 8  containers:
 9  - name: app-container
10    image: nginx:1.20
11    ports:
12    - containerPort: 80
13    resources:
14      requests:
15        memory: "128Mi"
16        cpu: "100m"
17      limits:
18        memory: "256Mi"
19        cpu: "200m"
20  - name: sidecar
21    image: busybox
22    command: ["sh", "-c", "while true; do sleep 30; done"]

Типы Pod

  • Single-container Pod — один контейнер (наиболее частый случай)
  • Multi-container Pod — несколько контейнеров для тесной интеграции
  • Init containers — контейнеры для инициализации
  • Sidecar containers — вспомогательные контейнеры

Pod patterns

  • Sidecar — вспомогательный контейнер (логи, прокси)
  • Ambassador — прокси для внешних сервисов
  • Adapter — преобразование данных

Управление Pod через kubectl

 1# Создание Pod из файла
 2kubectl apply -f pod.yaml
 3
 4# Просмотр Pod'ов
 5kubectl get pods
 6
 7# Детальная информация о Pod
 8kubectl describe pod my-app
 9
10# Логи Pod
11kubectl logs my-app
12
13# Выполнение команды в Pod
14kubectl exec -it my-app -- /bin/bash
15
16# Удаление Pod
17kubectl delete pod my-app

Networking в Pod

  • Каждый Pod получает уникальный IP адрес
  • Контейнеры в Pod могут общаться через localhost
  • Pod может взаимодействовать с другими Pod'ами напрямую
  • Сетевые политики могут ограничивать трафик

FAQ

Когда использовать несколько контейнеров в одном Pod?

Когда контейнеры тесно связаны и должны разделять ресурсы, например, веб-сервер с sidecar для логов.

Почему Pod'ы эфемерны?

Pod'ы спроектированы как одноразовые единицы. Для постоянства используй Deployments, которые управляют Pod'ами.