在 Kubernetes 上用 Helm 部署 OpenTelemetry Collector 完整指南

Helm 是 K8s 环境部署 OpenTelemetry Collector 的标准方式。本文讲解 Chart 的核心概念(values 配置、Presets、环境变量替换)、DaemonSet 与 Deployment 两种部署模式的取舍,以及 OTLP 接收器、批处理、内存限制等关键配置项,并对比观测云 DataKit 的一键 DaemonSet 部署方案。

最佳实践
在 Kubernetes 上用 Helm 部署 OpenTelemetry Collector 完整指南封面

在 Kubernetes 中部署 OpenTelemetry Collector,官方 Helm Chart 是最省事的路径——它把 RBAC 权限、工作负载配置、服务暴露打包成模板,经配置与验证后部署;但要用好它,得先理解 values 覆盖、Presets 预设与部署模式这三个核心概念。

核心要点速览

  • Helm Chart 通过 values.yaml 覆盖默认配置,切勿直接改模板;
  • Presets 是一键开启的预置功能包(如 K8s 元数据富化),自动处理 RBAC;
  • DaemonSet 贴近数据源、Deployment 便于集中处理,可组合使用;
  • Collector 接入后端前,应分别确认接收器、导出器协议和网络可达性。

部署前先懂三个概念

1. 配置文件与默认 values:Chart 自带完整的默认配置,你的 values.yaml 只做增量覆盖。所有定制都发生在这一层,保留 values 便于迁移,但升级仍需核对字段、默认项与组件兼容性。

2. Presets 预设:复杂功能的一键开关。比如开启 kubernetesAttributes 预设,Chart 会自动创建所需 RBAC 权限,并配置好 k8sattributes 处理器,为遥测数据附加 Pod 名、命名空间、节点等 K8s 元数据——手动配这些要写几十行 YAML。

3. 环境变量替换:敏感信息(Token、密钥)不要写死在 values 里,通过环境变量注入,配置中以 ${env:VAR_NAME} 引用。

两种部署模式怎么选?

模式 特点 适用场景
DaemonSet 每个符合调度条件的节点一个实例,贴近数据源 采集节点日志、主机指标、本机应用 OTLP 流量
Deployment 独立副本组,便于扩缩容 集中式网关:汇聚集群流量做统一处理、限流、路由

生产环境常见组合:DaemonSet 做节点级采集(Agent 角色),Deployment 做集群级汇聚(Gateway 角色),两层各司其职。

部署实操步骤

前置条件:与选定 Chart 兼容的 Kubernetes/Helm 版本及集群部署权限。以下固定 Chart 0.176.0、Contrib 0.162.0;需先在同一 namespace 建立 Secret datakit-otlp-endpoint,其 traces-url 保存接收端完整 HTTP Trace URL(含实际端口/路径),不凭空添加 Token Header。

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update

准备 values.yaml:

mode: daemonset
image:
  repository: otel/opentelemetry-collector-contrib
  tag: "0.162.0"
command:
  name: otelcol-contrib

presets:
  kubernetesAttributes:
    enabled: true

extraEnvs:
  - name: DATAKIT_TRACES_URL
    valueFrom:
      secretKeyRef:
        name: datakit-otlp-endpoint
        key: traces-url

resources:
  requests:
    cpu: 100m
    memory: 256Mi
  limits:
    cpu: "1"
    memory: 1Gi

ports:
  otlp:
    enabled: true
    hostPort: 4317
  otlp-http:
    enabled: true
    hostPort: 4318
  jaeger-compact:
    enabled: false
  jaeger-thrift:
    enabled: false
  jaeger-grpc:
    enabled: false
  zipkin:
    enabled: false

config:
  receivers:
    jaeger: null
    prometheus: null
    zipkin: null
    otlp:
      protocols:
        grpc:
          endpoint: ${env:MY_POD_IP}:4317
        http:
          endpoint: ${env:MY_POD_IP}:4318
  processors:
    memory_limiter:
      check_interval: 5s
      limit_percentage: null
      spike_limit_percentage: null
      limit_mib: 800
      spike_limit_mib: 150
    batch:
      send_batch_size: 8192
      timeout: 5s
  exporters:
    debug: null
    otlp_http/datakit:
      traces_endpoint: ${env:DATAKIT_TRACES_URL}
  service:
    pipelines:
      logs: null
      metrics: null
      traces:
        receivers: [otlp]
        processors: [memory_limiter, k8s_attributes, batch]
        exporters: [otlp_http/datakit]

部署:

helm install otel-collector open-telemetry/opentelemetry-collector --version 0.176.0 -f values.yaml

配置要点解读

  • memory_limiter 必须放在管道第一个处理器:它在接近配置阈值时拒绝数据,但不能保证避免 OOM,需结合容器限额和实际负载验证;
  • 元数据处理后再 batch:攒批导出,显著降低后端请求压力;
  • K8s 元数据富化:kubernetesAttributes 预设在资源身份可关联且权限/配置正确时附加 Pod/命名空间标签,不能保证每条数据都能关联,后续按业务维度聚合全靠它;
  • CORS:若接收浏览器直发的 OTLP 流量,HTTP 接收器需配置 cors.allowed_origins;CORS 不是认证或网络访问控制。

配置 DataKit 作为接收端

后端使用观测云时,可以按 DataKit Kubernetes 部署文档配置 DaemonSet,再让 Collector 向已启用的 OTLP 接收端导出。应用清单前,先核对工作空间地址、权限与采集器配置:

# 应用观测云控制台生成的 datakit.yaml
kubectl apply -f datakit.yaml

按 OpenTelemetry 接入文档检查 DataKit 的实际监听地址与协议;Collector 的 exporter 需与之匹配,不能把示例中的 4318 当作 DataKit 默认端口。先发送一条测试链路,核对服务名和 Pod 标签,再决定是否调整原有 Collector 处理器。

常见问题(FAQ)

Q:DaemonSet 模式下应用怎么找到 Collector? 示例开放 hostPort,网络策略与节点路由允许时可通过 status.hostIP 指向本节点;需核对 eligible node、端口冲突与协议。Deployment 应移除 hostPort,改用 Service 地址,不保证同节点或最低延迟。

Q:Chart 升级会丢配置吗? 可能受默认项、字段和组件改名影响。保留 values,先 render 并检查配置、探针、RBAC 与后端连通性;本例使用新组件名 k8s_attributes/otlp_http,显式移除默认日志/指标管道并保留健康检查。

Q:资源限额设多少? 视流量而定,示例 requests 100m/256Mi、limits 1C/1Gi 只是演示,需实测流量、队列与拒绝率决定容量;按《监控 Collector》的指标持续调优。

Q:多集群怎么管理配置? values.yaml 按集群分层(基础层 + 集群覆盖层),用 Helm 的 -f 多文件叠加,或上 GitOps(ArgoCD/Flux)统一管理。

系列阅读

[1]: 观测云文档《DataKit》https://docs.guance.com/datakit/
[2]: 观测云文档《OpenTelemetry》https://docs.guance.com/integrations/opentelemetry/

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台