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'ами.