Короткий ответ
Sidecar дополняет функциональность основного контейнера (сбор логов, синхронизация файлов, proxy service mesh), ambassador проксирует исходящие соединения основного контейнера к внешним сервисам, упрощая ему сетевую логику, а adapter нормализует выходные данные основного контейнера (например, формат логов или метрик) к единому виду, ожидаемому внешней системой мониторинга.
Как это работает подробнее
все три паттерна используют общую инфраструктуру Pod — разделяемую сеть (localhost) и, при необходимости, общие volume — чтобы дополнительный контейнер мог взаимодействовать с основным без сетевых издержек и сложной конфигурации обнаружения сервисов. Разница между паттернами — не в механизме, а в роли: sidecar расширяет возможности, ambassador упрощает исходящий трафик, adapter — приводит данные к общему формату на выходе.
Пример кода
containers:
- name: app
image: myapp:1.0
- name: log-shipper
image: fluent-bit:2.2
volumeMounts:
- { name: logs, mountPath: /var/log/app }
volumes:
- name: logs
emptyDir: {}Что использовать на практике
- Практика. самый распространённый пример sidecar — proxy service mesh (Envoy в Istio/Linkerd), который прозрачно перехватывает весь входящий/исходящий трафик пода для телеметрии, mTLS и маршрутизации, не требуя изменений в коде приложения. Adapter часто встречается там, где legacy-приложение пишет логи в нестандартном формате, а adapter-контейнер преобразует их в формат, понятный централизованной системе логирования.
Подводные камни
- Риски. добавлять sidecar без учёта его собственного потребления ресурсов (CPU/память), которое суммируется с основным контейнером при планировании и влияет на итоговый QoS Pod; не предусматривать независимый жизненный цикл sidecar при завершении основного контейнера — в версиях Kubernetes до появления нативной поддержки "sidecar containers" (restartPolicy на уровне initContainer, начиная с 1.28) порядок остановки sidecar мог приводить к преждевременному обрыву соединений основного приложения.