Для чего нужны сайдкары (sidecar) в Kubernetes?

«Для чего нужны сайдкары (sidecar) в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сайдкар — это паттерн проектирования пода, при котором в одном поде вместе с основным контейнером приложения (main) запускаются один или несколько вспомогательных контейнеров. Они расширяют или усиливают функциональность основного приложения, разделяя с ним сетевой namespace, IPC и, опционально, тома.

Типичные сценарии использования из моего опыта:

  1. Сбор и агрегация логов:

    • Основное приложение пишет логи в stdout/stderr или в файл на общем томе emptyDir.
    • Сайдкар (например, Fluent Bit, Filebeat) забирает эти логи и отправляет в централизованную систему (Elasticsearch, Loki).
      
      containers:
    • name: app image: my-app:latest volumeMounts:
      • name: log-volume mountPath: /var/log/app
    • name: log-sidecar image: fluent/fluent-bit:latest volumeMounts:
      • name: log-volume mountPath: /var/log/app # Монтируем тот же том
      • name: config-volume mountPath: /fluent-bit/etc/
  2. Проксирование сетевого трафика (Service Mesh):

    • В Istio/Linkerd сайдкар-прокси (Envoy) инжектируется в каждый под. Он управляет трафиком, обеспечивая TLS, метрики, трассировку и политики доступа без изменений в коде приложения.
  3. Синхронизация конфигурации и секретов:

    • Сайдкар может следить за изменениями в ConfigMap/Secret и обновлять файлы на общем томе, после чего отправлять сигнал основному приложению на перезагрузку конфигурации (например, через SIGHUP).
  4. Мониторинг и профилирование:

    • Запуск агентов мониторинга (Prometheus Node Exporter, Pyroscope agent) в качестве сайдкара для сбора метрик конкретного приложения.

Преимущества паттерна:

  • Разделение ответственности: Приложение занимается бизнес-логикой, сайдкар — инфраструктурными задачами.
  • Общая модель безопасности: Сайдкар работает в том же security context, что упрощает настройку.
  • Совместный жизненный цикл: Сайдкар создается и удаляется вместе с подом, что обеспечивает согласованность.

Недостаток: Тесная связность. Апгрейд сайдкара требует пересоздания пода, что может привести к даунтайму приложения, если не используются стратегии rolling update.