部署模式

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

Deployment

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

StatefulSet

当您的工作负载需要持久状态管理,例如使用 Collector 的 File Storage Extension 或实现 Tail Sampling Processor 时,推荐使用 StatefulSet 部署模式。该模式确保每个 Collector 实例在重启后保持其身份和存储。

DaemonSet

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

Sidecar

Sidecar 部署模式将 Collector 直接注入到应用 Pod 中,支持两种主要用例:

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

  2. 本地主机遥测转发:当应用通过 localhost 发送遥测数据时,sidecar Collector 可以接收这些数据,并通过加密和认证连接将其转发到外部服务。

Sidecar 注入配置

NOTE

使用 sidecar 部署模式时,必须配置以下两项:

  1. OpenTelemetryCollector 自定义资源中设置 spec.mode: sidecar
  2. 在 Pod 或命名空间上添加 sidecar.opentelemetry.io/inject 注解

sidecar.opentelemetry.io/inject 注解可以应用于 Pod 级别或命名空间级别。如果两者都设置,当注解值为 false 或指定具体的 OpenTelemetryCollector CR 名称时,Pod 级别注解优先。

支持的注解值:

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