部署模式

OpenTelemetryCollector 自定义资源支持多种部署模式,允许你根据遥测采集需求选择最合适的策略。

Deployment

这是标准的部署模式,也是大多数用例的默认选项。

StatefulSet

当你的工作负载需要持久化状态管理,例如使用 Collector 的 File Storage Extension 或实现 Tail Sampling Processor 时,建议使用 StatefulSet 部署模式。此模式可确保每个 Collector 实例在重启后仍保持其标识和存储。

DaemonSet

对于需要从集群中每个节点采集遥测数据的场景,DaemonSet 部署模式是理想选择。尤其是在使用 Collector 的 Filelog Receiver 从所有节点捕获容器日志时,这种模式非常有用。

Sidecar

Sidecar 部署模式会将 Collector 直接注入到应用程序 Pod 中,从而支持两个主要用例:

  1. 日志文件访问:当你需要从容器内部读取日志文件时,可将 Collector 作为 sidecar 注入,并配置 Filelog Receiver 使用共享卷(例如 emptyDir)来访问日志。

  2. localhost 遥测转发:当应用程序通过 localhost 发送遥测数据时,sidecar Collector 可以接收这些数据,并通过加密且经过身份验证的连接将其转发到外部服务。

NOTE

在 sidecar 模式下,Operator 不拥有 Pod 生命周期,因此它不会为 Collector 创建 ServiceIngressNetworkPolicyHorizontalPodAutoscaler 资源。当需要从 Pod 外部访问端口时,请通过应用程序自身的 Service 暴露 sidecar。启用 spec.observability.metrics.enableMetrics 时,仍会创建 PodMonitor 资源。

Sidecar 注入配置

NOTE

使用 sidecar 部署模式时,你必须配置两个设置:

  1. OpenTelemetryCollector 自定义资源中设置 spec.mode: sidecar
  2. sidecar.opentelemetry.io/inject 注解添加到 Pod 或 namespace

sidecar.opentelemetry.io/inject 注解可应用于 Pod 级别或 namespace 级别。如果两者都设置,则当 Pod 级别注解被设置为 false 或特定的 OpenTelemetryCollector CR 名称时,Pod 级别注解优先。

支持的注解值:

apiVersion: v1
kind: Pod
metadata:
  ...
  annotations:
    sidecar.opentelemetry.io/inject: "<value>"
  ...
  1. 该注解接受以下值:
  • false:禁用 Collector 注入(注解缺失时的默认行为)
  • true:使用同一 namespace 中的 OpenTelemetryCollector CR 配置注入 Collector
  • <collector_name>:使用同一 namespace 中指定的 <collector_name> OpenTelemetryCollector CR 注入 Collector
  • <namespace>/<collector_name>:使用 <namespace> namespace 中指定的 <collector_name> OpenTelemetryCollector CR 注入 Collector

sidecar 注入示例部署:

WARNING

sidecar.opentelemetry.io/inject 注解必须放在 spec.template.metadata.annotations 下(Pod 模板),而不是放在 Deployment 自身的 metadata.annotations 下。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
      annotations:
        sidecar.opentelemetry.io/inject: "my-collector"
    spec:
      containers:
      - name: app
        image: myapp:latest
  1. 此配置会将 my-collector OpenTelemetryCollector CR 中定义的 Collector 作为 sidecar 容器注入到该 Deployment 创建的每个 Pod 中。