为集群数据面组件启用链路追踪

更新时间:2025-03-19 02:04:22

kubelet的链路追踪可以记录kubelet在节点上执行的关键操作轨迹,例如 Pod 生命周期管理、API 调用等,以便定位系统性能瓶颈并排查集群问题。启用后,kubelet的链路信息将自动上报至可观测链路 OpenTelemetry 版,提供可视化的链路明细、实时拓扑等监控数据。

如果您不熟悉链路追踪,可参见基本概念了解相关基础概念。

前提条件

  • 已创建1.28及以上的ACK托管集群ACK专有集群。如需升级,请参见手动升级集群

  • Helmv3版本。如需升级,请参见Helm V2升级迁移至Helm V3

    安装本功能依赖的组件OpenTelemetry Collector时,Helm需为3.9及以上版本。
  • 已开通可观测链路 OpenTelemetry 版并授权,请参见准备工作

    可观测链路 OpenTelemetry 版为分布式应用提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具。
说明

使用本功能时,除ACK集群产生的费用外,还会产生可观测数据量计费,由可观测链路 OpenTelemetry 版收取。关于可观测链路 OpenTelemetry 版提供的免费额度和具体定价,请参见计费说明


实现集群数据面的链路追踪流程如下:

  1. 获取可观测链路 OpenTelemetry 版数据接入点和鉴权Token,并将鉴权Token存储在集群Secret中,以便让OpenTelemetry Collector正确读取配置和鉴权信息。

  2. 部署 OpenTelemetry Collector 组件,用于收集、处理和导出观测数据。

    ACK应用市场提供快速部署 OpenTelemetry Collector 的方式,可在集群内以 DaemonSet 模式部署。
  3. 通过kubelet配置开启链路追踪并配置相关参数(采样率),让采集数据通过 OpenTelemetry Collector 转发至可观测链路 OpenTelemetry 版

步骤一:获取接入点和鉴权Token

  1. 登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心

  2. 开源框架区域单击OpenTelemetry卡片。

  3. 选择数据上报地域,选择连接方式阿里云内网方式上报方式gRPC,保存接入点信息供后续使用。

    初次接入的地域将会自动进行资源初始化,请按页面提示完成操作。

    image

步骤二:将鉴权Token存储到集群Secret

将鉴权 Token 存储到 ACK 集群的Secret中后,您可以通过变量引用的方式在 OpenTelemetry Collector 的 ConfigMap 中使用此鉴权 Token 信息。Secret 与下一步安装的 OpenTelemetry Collector 需处于同一命名空间。

OpenTelemetry Collector 默认部署在 otel-collector 命名空间。您可以手动创建 otel-collector 命名空间,也可以使用其他命名空间,并在安装OpenTelemetry Collector时选择该命名空间。
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择配置管理 > 保密字典

  3. 单击创建,按照页面提示完成Secret的创建。

    配置项

    取值

    示例

    配置项

    取值

    示例

    名称

    opentelemetry-exporter-config

    重要

    请使用此值,不要自定义名称。

    image

    类型

    Opaque

    对数据值进行 base64 编码

    名称(键)

    grpc-token

    重要

    请使用此值,请勿自定义名称。

    步骤一获取的鉴权Token信息

步骤三:安装 OpenTelemetry Collector

OpenTelemetry Collector 是一个可观测数据采集器,提供了统一的数据接收、处理和导出能力。OpenTelemetry Collector 可支持对接各类开源可观测数据(例如 Jaeger、Prometheus、Fluent Bit 等),避免需要部署多个可观测采集器。

  1. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  2. 搜索opentelemetry-collector,点击卡片。

    此页面包含组件介绍和组件Helm Chart的参数说明。您可以在此页面了解,也可以根据下文指引完成必要配置。
  3. 然后在页面右上角单击一键部署,选择集群和命名空间,按照页面指引进入下一步。

    组件的命名空间需与步骤二创建的Secret命名空间保持一致。

  4. 选择Chart版本(建议使用默认版本),设置 Chart 参数,按照页面提示完成Chart的安装。

    参数

    说明

    示例

    参数

    说明

    示例

    mode

    设置为 daemonset,以DaemonSet的模式部署 OpenTelemetry Collector 。

    mode: "daemonset"

    image

    enableXtraceTokenFromSecret

    设置为 true,以通过环境变量引用鉴权 Token。开启后,鉴权 Token 将不会以明文的方式存储在 OpenTelemetry Collector 的 ConfigMap 中,避免敏感信息泄露。

    enableXtraceTokenFromSecret: true
    请确保您已完成步骤二的操作,避免Chart部署失败。

    image

    exporters

    添加名为otlp的数据导出器(Exporter),用于指定链路数据上报的地址。

    endpoint设置为步骤一中获取的内网接入点。

    exporters:
      otlp:
        endpoint: <此前获取的内网接入点>
        tls:
          insecure: true
        headers:
          Authentication: ${env:OPENTELEMETRY_GRPC_TOKEN}

    image

    receivers

    添加名为otlp/kubelet的接收器(Receiver),监听本地 4317 端口,通过 OTLP/gRPC 协议接收 kubelet 链路数据。

      receivers:
        otlp/kubelet: # 创建一个名为 otlp/kubelet 的接收器
          protocols:
            grpc:
              endpoint: 127.0.0.1:4317

    image

    service.pipelines.traces

    配置OpenTelemetry Collector 的处理管道,在 service.pipelines.traces.exporters中添加 otlp 导出器,在service.pipelines.traces.receivers中添加 otlp/kubelet 接收器。

          traces:
            exporters:
              - debug
              - otlp
            processors:
              - memory_limiter
              - batch
              - resource
            receivers:
              - otlp
              - jaeger
              - zipkin
              - otlp/kubelet

    image

    hostNetwork

    设置为 true,OpenTelemetry Collector 可直接使用主机的 IP 地址和端口进行通信。

    hostNetwork: true

    image

    成功安装后,页面将自动跳转至Helm页面。

    前往工作负载 > 守护进程集页面,选择组件的命名空间,如有名为 opentelemetry-collector-agent 的 DaemonSet 且所有Pod运行状态为Running,表示安装成功。

步骤四:为 kubelet 开启链路追踪

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 在节点池列表的操作列,单击Kubelet 配置,按照页面提示添加自定义参数、了解注意事项并提交配置。

    • 下拉选择 tracing,并选择 endpoint,值填写为 localhost:4317,代表 kubelet 链路数据将发送至 localhost:4317。该地址与中步骤三 otlp/kubelet Receiver 中的 endpoint 对应。

    • 再次下拉选择 tracing,并选择 samplingRatePerMillion,控制采样率,决定每一百万次请求中被采样的比例。链路追踪可能会对集群网络和CPU性能产生一定影响,具体取决于整体配置情况。如遇性能问题,可根据集群的负载情况适当调低采样率。

      例如,1000000表示100%的采样率,即每一百万次请求中,所有请求都会被采样和记录;100000表示10%的采样率;10000表示1%的采样率。

      image

步骤五:在可观测链路 OpenTelemetry 版上查看调用链路数据

  1. 登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击应用列表

  2. 在页面顶部选择地域,然后单击应用名称kubelet按照控制台指引查看链路信息。

    下方仅介绍主要页签。如需了解不同页签的详细说明,请参见应用详情的相关文档。
    • 调用链分析页签:kubelet请求的调用链、应用拓扑等。

      • 在页面左上角的搜索框中输入resources.k8s.cluster.name : "集群ClusterId",筛选指定集群的调用链。

        集群ClusterId可在集群列表获取。
      • 单击Trace列表的Trace ID,查看一个kubelet请求的Trace详情,包括拓扑视图、涉及的服务数、调用的接口数等。

    • 提供服务页签:kubelet对外提供的接口的请求数、错误数和平均耗时等。

    • 依赖服务页签:对kubelet依赖服务的请求,例如请求containerd的请求数、错误数、平均耗时等。

相关文档

如需监测并记录集群API Server组件的链路数据,请参见为集群控制面组件启用链路追踪

  • 本页导读 (1)
  • 前提条件
  • 步骤一:获取接入点和鉴权Token
  • 步骤二:将鉴权Token存储到集群Secret中
  • 步骤三:安装 OpenTelemetry Collector
  • 步骤四:为 kubelet 开启链路追踪
  • 步骤五:在可观测链路 OpenTelemetry 版上查看调用链路数据
  • 相关文档