多容器 Pod
在处理多容器 Pod 时,需要配置自动检测以适当处理多个容器。Operator 提供了灵活的选项来控制哪些容器接收检测以及多个检测如何交互。
默认行为
默认情况下,当你为 Pod 添加自动检测注解时,Operator 会将检测注入到 Pod 规范中的第一个容器。这对于单容器 Pod 非常有效,但可能不适用于多容器场景。
指定目标容器
要控制哪些容器接收检测,请使用 container-names 注解:
在此示例中,只有 app 和 worker 容器接收 Java 检测,而 sidecar 容器保持未检测状态。
一个 Pod 中的多种检测
你可以对同一 Pod 中的不同容器应用不同类型的检测:
该配置应用了:
- 对
java-app容器的 Java 检测 - 对
python-worker容器的 Python 检测 nginx容器不进行检测
容器名称注解格式
容器名称注解遵循以下格式:
其中 <language> 可以是:
javapythonnodejsdotnetgoapache-httpdsdk
环境变量隔离
每个被检测的容器都会获得自己的一套检测环境变量。你可以使用 Instrumentation CR 配置容器特定的设置:
示例:多语言应用
在以下示例中,myapp 和 myapp2 容器将使用 Java 检测,myapp3 使用 Python 检测:
重要说明
- Go 自动检测不支持多容器 Pod。注入 Go 自动检测时,第一个容器应是唯一需要检测的容器。
- 此类检测不允许对单个容器应用多种语言的检测。
instrumentation.opentelemetry.io/container-names注解不适用于此功能。