Ответ
Sidecar-контейнер — это дополнительный контейнер, который работает в одном поде с основным контейнером, расширяя его функциональность. Он разделяет с основным контейнером сетевые интерфейсы, volumes и другие ресурсы пода.
Пример использования:
apiVersion: v1
kind: Pod
metadata:
name: webapp
spec:
containers:
- name: main-app
image: nginx:alpine
ports:
- containerPort: 80
- name: log-sidecar
image: busybox:latest
command: ["sh", "-c", "while true; do echo $(date) >> /var/log/nginx/access.log; sleep 5; done"]
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
volumes:
- name: shared-logs
emptyDir: {}
Типичные сценарии в DevOps:
- Логирование и сбор логов (как в примере выше, для последующей отправки в Fluentd или Logstash).
- Мониторинг и экспорт метрик (например, запуск
prometheus-node-exporterрядом с основным приложением). - Проксирование или обслуживание сертификатов (например, контейнер с
nginxилиenvoyдля TLS-терминации). - Синхронизация конфигураций или секретов (контейнер, который следит за изменениями в ConfigMap/Secret и обновляет файлы в общем volume).
- Тестирование и отладка (временный контейнер с инструментами для сетевой диагностики или профилирования).
Преимущество: Позволяет соблюдать принцип единственной ответственности (Single Responsibility Principle) для контейнеров, не превращая основной образ в монолит.