Мультиконтейнерные Pod'ы
При работе с мультиконтейнерными pod'ами необходимо настроить автоинструментирование таким образом, чтобы оно корректно обрабатывало несколько контейнеров. Operator предоставляет гибкие возможности для управления тем, какие контейнеры получают инструментирование и как взаимодействуют несколько инструментирований.
Содержание
Поведение по умолчаниюУказание целевых контейнеровНесколько инструментирований в одном pod'еФормат аннотации имени контейнераИзоляция переменных окруженияПример: мульти-языковое приложениеВажные замечанияПоведение по умолчанию
По умолчанию, при аннотировании pod'а для автоинструментирования, Operator внедряет инструментирование в первый контейнер в спецификации pod'а. Это хорошо работает для pod'ов с одним контейнером, но может быть неприемлемо для мультиконтейнерных сценариев.
Указание целевых контейнеров
Чтобы контролировать, какие контейнеры получают инструментирование, используйте аннотацию container-names:
В этом примере только контейнеры app и worker получают Java-инструментирование, а контейнер sidecar остаётся без инструментирования.
Несколько инструментирований в одном pod'е
Вы можете применить разные типы инструментирования к разным контейнерам внутри одного pod'а:
Эта конфигурация применяет:
- Java-инструментирование к контейнеру
java-app - Python-инструментирование к контейнеру
python-worker - Отсутствие инструментирования к контейнеру
nginx
Формат аннотации имени контейнера
Аннотация имени контейнера имеет следующий формат:
Где <language> может быть:
javapythonnodejsdotnetgoapache-httpdsdk
Изоляция переменных окружения
Каждый инструментированный контейнер получает свой собственный набор переменных окружения для инструментирования. Вы можете настроить параметры для конкретных контейнеров с помощью Instrumentation CR:
Пример: мульти-языковое приложение
В следующем примере контейнеры myapp и myapp2 будут инструментированы с помощью Java, а myapp3 — с помощью Python:
Важные замечания
- Go автоинструментирование не поддерживает мультиконтейнерные pod'ы. При внедрении Go автоинструментирования первым контейнером должен быть единственный, который вы хотите инструментировать.
- Этот тип инструментирования не позволяет инструментировать один контейнер несколькими языковыми инструментированиями.
- Аннотация
instrumentation.opentelemetry.io/container-namesне используется для этой функциональности.