Ответ
Sidecar — это паттерн проектирования в Kubernetes, при котором к основному контейнеру Pod'а добавляется один или несколько вспомогательных контейнеров, расширяющих или дополняющих его функциональность. Эти контейнеры разделяют жизненный цикл, сеть, хранилище и пространство имён с основным приложением.
Ключевые принципы:
- Разделение ответственности: Основной контейнер содержит бизнес-логику, sidecar — вспомогательную (логирование, синхронизация, прокси).
- Общие ресурсы: Контейнеры в Pod'е совместно используют:
- Сетевое пространство (localhost).
- Тома (volumes) для обмена файлами.
- Цикл жизни (запускаются и останавливаются вместе).
Типичные use-cases:
- Логирование и мониторинг: Sidecar-контейнер собирает логи с общего тома и отправляет их в централизованную систему (Fluentd, Logstash).
- Прокси-сервис: Контейнер-прокси (например, Envoy, NGINX) обрабатывает входящий/исходящий трафик для основного приложения (сервисная сеть — Service Mesh).
- Синхронизация конфигураций: Контейнер (как
git-sync) периодически обновляет конфиги на общем томе, основной контейнер использует их.
Пример манифеста:
apiVersion: v1
kind: Pod
metadata:
name: webapp-with-log-sidecar
spec:
containers:
- name: main-app # Основной контейнер
image: my-webapp:latest
volumeMounts:
- name: log-volume
mountPath: /var/log/app
- name: log-sidecar # Sidecar-контейнер
image: fluentd:latest
volumeMounts:
- name: log-volume
mountPath: /var/log/app
command: ['fluentd', '-c', '/etc/fluentd.conf']
volumes:
- name: log-volume
emptyDir: {}
Преимущество: Позволяет модифицировать или расширять поведение основного приложения без изменения его кода.