Skip to content
EN

Sidecar pattern

Коротко:

Sidecar pattern — containers, работающие рядом с main application container в одном Kubernetes pod. Share network + volumes, но отдельные processes. Используется для: log shipping (Fluent Bit sidecar), service mesh (Envoy proxy), config reload (watch ConfigMap), secrets sync (Vault agent), data synchronization. Главный plus: separation of concerns без application code changes.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Same pod = same IP + shared volumes
  • Lifecycle: start/stop вместе с main container
  • Common sidecars: istio-proxy, filebeat, vault-agent, oauth2-proxy
  • Init containers: run once до main (setup)
  • Downsides: resource overhead × pod_count, complexity

Пример

# Pod with sidecar
spec:
  containers:
  - name: app
    image: my-app:v1
  - name: log-shipper  # sidecar
    image: fluent/fluent-bit
    volumeMounts:
    - { name: logs, mountPath: /var/log }
  volumes:
  - name: logs
    emptyDir: {}

Смежные термины

Что такое Sidecar Pattern?

Sidecar pattern — это архитектурный подход, который используется в контейнерной среде для разделения функциональности приложения на два компонента: основной сервис и вспомогательный сервис (sidecar). Основной сервис отвечает за бизнес-логику, тогда как sidecar берет на себя задачи, такие как мониторинг, управление конфигурацией и взаимодействие с внешними системами. Это позволяет упростить разработку и развертывание, а также улучшить управление и масштабируемость приложений.

Преимущества и недостатки Sidecar Pattern

Sidecar pattern имеет ряд преимуществ:

  • Модульность: Разделение логики приложения на независимые компоненты упрощает разработку и тестирование.
  • Упрощенное управление конфигурацией: Вспомогательные сервисы могут управлять конфигурациями и обновлениями без изменения основного кода приложения.
  • Улучшенная наблюдаемость: Sidecar может интегрироваться с инструментами мониторинга, такими как Prometheus или Jaeger, для отслеживания производительности приложения.

Тем не менее, существует и ряд недостатков:

  • Сложность развертывания: При добавлении новых компонентов увеличивается сложность инфраструктуры.
  • Дополнительные накладные расходы: Sidecar требует дополнительных ресурсов, что может увеличить затраты на инфраструктуру.

Пример реализации Sidecar Pattern

Рассмотрим практический пример реализации Sidecar pattern с использованием Docker и Kubernetes. В этом примере мы создадим основной сервис на Node.js и sidecar-сервис для логирования с использованием Fluentd.

version: '3'
services:
  app:
    image: node:14
    command: node app.js
    ports:
      - '3000:3000'
    networks:
      - my-network
    volumes:
      - .:/usr/src/app
  fluentd:
    image: fluent/fluentd:v1.12-1
    ports:
      - '24224:24224'
    volumes:
      - ./fluentd.conf:/fluentd/etc/fluentd.conf
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

В данном примере основной сервис (app) и sidecar (fluentd) работают в одной сети. Fluentd собирает логи из основного приложения и отправляет их в систему хранения данных.

Для настройки Fluentd используется конфигурационный файл fluentd.conf, который определяет, как обрабатывать и куда отправлять логи. Например:

source
  @type tail
  path /usr/src/app/logs/*.log
  pos_file /fluentd/logs/position.log
  format none

match *.*
  @type stdout

Это позволяет вам легко интегрировать дополнительные функции, такие как мониторинг и логирование, без необходимости изменять код основного приложения. Sidecar pattern дает возможность гибко масштабировать и управлять различными аспектами приложения, что делает его популярным выбором для современных микросервисных архитектур.

Больше по теме

Часто задаваемые вопросы

Sidecar vs multi-process container?

Sidecar — separate container (different image + update cycle). Multi-process — все в одном image (anti-pattern в K8s, usage supervisord). Sidecar cleaner.

Overhead?

Каждый sidecar adds: ~30-100 MB memory, CPU slice. В 100-pod cluster — significant. Используйте только когда нужно.

Common pitfalls?

Sidecar crash → pod kill если restartPolicy: Always. Используйте lifecycle hooks + правильный readiness probe.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.