Ответ
Контейнеры в одном поде (Pod) делят общие сетевые пространства (один IP), пространство имен и могут совместно использовать тома. Я использую эту возможность для тесно связанных процессов.
Основные сценарии и управление:
- Sidecar-паттерн: Основной контейнер (например, веб-сервер) работает вместе со вспомогательным (sidecar), который расширяет его функциональность.
- Пример: Контейнер Nginx (основной) и контейнер
vault-agent(sidecar), который динамически обновляет секреты и записывает их в общий том для Nginx.
- Пример: Контейнер Nginx (основной) и контейнер
- Ambassador-паттерн: Контейнер-посредник, который управляет всеми исходящими сетевыми подключениями основного контейнера (например, для проксирования или мониторинга трафика).
- Adapter-паттерн: Контейнер, который нормализует или трансформирует выходные данные основного контейнера (например, приводит логи к единому формату).
Ключевые механизмы управления:
- Общие тома (
emptyDir,configMap): Для обмена данными. - Локальный хост: Контейнеры общаются друг с другом по
localhostи разным портам. - Совместный жизненный цикл: Все контейнеры в поде запускаются и останавливаются вместе. Если один из них аварийно завершается, перезапускается весь под.
- Init-контейнеры: Выполняются строго перед основными и успешно завершаются. Использую их для предварительной настройки (например, клонирование репозитория, ожидание готовности БД).
Важно: Так как под — неделимая единица масштабирования, помещаю в него только контейнеры, которые действительно должны быть развернуты вместе на одной "ноде".