部署模式
OpenTelemetryCollector 自定义资源支持多种部署模式,允许你根据遥测采集需求选择最合适的策略。
Deployment
这是标准的部署模式,也是大多数用例的默认选项。
StatefulSet
当你的工作负载需要持久化状态管理,例如使用 Collector 的 File Storage Extension 或实现 Tail Sampling Processor 时,建议使用 StatefulSet 部署模式。此模式可确保每个 Collector 实例在重启后仍保持其标识和存储。
DaemonSet
对于需要从集群中每个节点采集遥测数据的场景,DaemonSet 部署模式是理想选择。尤其是在使用 Collector 的 Filelog Receiver 从所有节点捕获容器日志时,这种模式非常有用。
Sidecar
Sidecar 部署模式会将 Collector 直接注入到应用程序 Pod 中,从而支持两个主要用例:
-
日志文件访问:当你需要从容器内部读取日志文件时,可将 Collector 作为 sidecar 注入,并配置 Filelog Receiver 使用共享卷(例如
emptyDir)来访问日志。 -
localhost 遥测转发:当应用程序通过
localhost发送遥测数据时,sidecar Collector 可以接收这些数据,并通过加密且经过身份验证的连接将其转发到外部服务。
在 sidecar 模式下,Operator 不拥有 Pod 生命周期,因此它不会为 Collector 创建 Service、Ingress、NetworkPolicy 或 HorizontalPodAutoscaler 资源。当需要从 Pod 外部访问端口时,请通过应用程序自身的 Service 暴露 sidecar。启用 spec.observability.metrics.enableMetrics 时,仍会创建 PodMonitor 资源。
Sidecar 注入配置
使用 sidecar 部署模式时,你必须配置两个设置:
- 在
OpenTelemetryCollector自定义资源中设置spec.mode: sidecar - 将
sidecar.opentelemetry.io/inject注解添加到 Pod 或 namespace
sidecar.opentelemetry.io/inject 注解可应用于 Pod 级别或 namespace 级别。如果两者都设置,则当 Pod 级别注解被设置为 false 或特定的 OpenTelemetryCollector CR 名称时,Pod 级别注解优先。
支持的注解值:
- 该注解接受以下值:
false:禁用 Collector 注入(注解缺失时的默认行为)true:使用同一 namespace 中的OpenTelemetryCollectorCR 配置注入 Collector<collector_name>:使用同一 namespace 中指定的<collector_name>OpenTelemetryCollectorCR 注入 Collector<namespace>/<collector_name>:使用<namespace>namespace 中指定的<collector_name>OpenTelemetryCollectorCR 注入 Collector
sidecar 注入示例部署:
sidecar.opentelemetry.io/inject 注解必须放在 spec.template.metadata.annotations 下(Pod 模板),而不是放在 Deployment 自身的 metadata.annotations 下。
- 此配置会将
my-collectorOpenTelemetryCollectorCR 中定义的 Collector 作为 sidecar 容器注入到该 Deployment 创建的每个 Pod 中。