Что такое Sidecar-контейнер в Kubernetes?

«Что такое Sidecar-контейнер в Kubernetes?» — вопрос из категории Kubernetes, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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) для контейнеров, не превращая основной образ в монолит.