在 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 便于集中处理,可组合使用;
  • 观测云 DataKit 提供等价能力:一条 DaemonSet YAML 完成全集群采集。

部署前先懂三个概念

1. 配置文件与默认 values:Chart 自带完整的默认配置,你的 values.yaml 只做增量覆盖。所有定制都发生在这一层,升级 Chart 时配置不丢。

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

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

两种部署模式怎么选?

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

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

部署实操步骤

前置条件:K8s 1.16+、Helm 3、集群部署权限。

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

准备 values.yaml

mode: daemonset                    # 或 deployment

presets:
  kubernetesAttributes:
    enabled: true                  # 自动附加 K8s 元数据

config:
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: 0.0.0.0:4317
        http:
          endpoint: 0.0.0.0:4318

  processors:
    batch:
      send_batch_size: 8192
      timeout: 5s
    memory_limiter:
      check_interval: 5s
      limit_mib: 800
      spike_limit_mib: 150         # 内存保护,防 OOM

  exporters:
    otlp:
      endpoint: "http://datakit-service:4318"
      headers:
        Authorization: "Token ${env:GUANCE_TOKEN}"

  service:
    pipelines:
      traces:
        receivers: [otlp]
        processors: [memory_limiter, batch]
        exporters: [otlp]

部署:

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

配置要点解读

  • memory_limiter 必须放在管道第一个处理器:它是防止 Collector OOM 的保险丝,内存逼近限额时主动拒绝新数据;
  • batch 紧跟其后:攒批导出,显著降低后端请求压力;
  • K8s 元数据富化kubernetesAttributes 预设让每条遥测数据自带 Pod/命名空间标签,后续按业务维度聚合全靠它;
  • CORS:若接收浏览器直发的 OTLP 流量,HTTP 接收器需配置 cors.allowed_origins

观测云落地:DataKit 的 K8s 一键部署

如果后端是观测云,可以进一步简化——DataKit 官方提供 K8s DaemonSet 部署,一条命令全集群生效

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

DataKit 内置 OTLP 接收(4317/4318)、K8s 元数据自动富化、容器日志采集与主机指标采集,上述 Helm 配置中的接收器、处理器、富化预设全部开箱自带,应用直接把 OTLP 端点指向本节点 DataKit 即可。已在用 OTel Collector 的团队,也可把 exporter 指向 DataKit 服务地址,平滑迁移。

常见问题(FAQ)

Q:DaemonSet 模式下应用怎么找到 Collector? 通过 status.hostIP 注入环境变量,应用把 OTLP 端点指向节点 IP——同节点通信,延迟最低。

Q:Chart 升级会丢配置吗? 不会。所有定制在 values.yaml 中,helm upgrade 时带上原文件即可;建议 values 纳入 Git 管理。

Q:资源限额设多少? 视流量而定,起步建议 requests 100m/256Mi、limits 1C/1Gi,配合 memory_limiter 留 20% 余量;按《监控 Collector》的指标持续调优。

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

系列阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台