Ответ
В Pod Kubernetes может находиться один или несколько контейнеров. Технического жесткого ограничения на максимальное количество нет, но на практике обычно используется от 1 до 3-4 контейнеров в рамках определенных паттернов.
Ключевая идея: Все контейнеры внутри пода:
- Запускаются на одном узле (worker node) и никогда не разделяются.
- Разделяют одни и те же сетевые пространства имен (общий IP-адрес, localhost).
- Могут совместно использовать тома (volumes) для обмена данными.
Типичные сценарии с несколькими контейнерами (Multi-Container Pods):
-
Sidecar-паттерн: Основной контейнер приложения дополняется вспомогательным.
- Пример: Контейнер с веб-приложением (nginx) и sidecar-контейнер, который синхронизирует статические файлы из облачного хранилища (например, s3fs).
-
Ambassador-паттерн: Контейнер-посредник, который управляет сетевыми подключениями для основного приложения (например, прокси к базе данных).
-
Adapter-паттерн: Контейнер, который нормализует или трансформирует выходные данные основного приложения (например, форматирует логи).
Пример манифеста Pod с двумя контейнерами:
apiVersion: v1
kind: Pod
metadata:
name: web-server-with-log-shipper
spec:
volumes:
- name: shared-logs
emptyDir: {}
containers:
- name: nginx
image: nginx:alpine
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
- name: log-shipper # Sidecar-контейнер
image: busybox
command: ["sh", "-c", "tail -f /logs/access.log"]
volumeMounts:
- name: shared-logs
mountPath: /logs
Важно: Хотя можно запустить много контейнеров, чрезмерное их количество усложняет управление жизненным циклом, отладку и распределение ресурсов. Pod следует рассматривать как единицу развертывания для тесно связанных процессов.