kubelet的链路追踪可以记录kubelet在节点上执行的关键操作轨迹,例如 Pod 生命周期管理、API 调用等,以便定位系统性能瓶颈并排查集群问题。启用后,kubelet的链路信息将自动上报至可观测链路 OpenTelemetry 版,提供可视化的链路明细、实时拓扑等监控数据。
如果您不熟悉链路追踪,可参见基本概念了解相关基础概念。
前提条件
已创建1.28及以上的ACK托管集群、ACK专有集群。如需升级,请参见手动升级集群。
Helm为v3版本。如需升级,请参见将Helm V2升级迁移至Helm V3。
安装本功能依赖的组件OpenTelemetry Collector时,Helm需为3.9及以上版本。
已开通可观测链路 OpenTelemetry 版并授权,请参见准备工作。
可观测链路 OpenTelemetry 版为分布式应用提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具。
使用本功能时,除ACK集群产生的费用外,还会产生可观测数据量计费,由可观测链路 OpenTelemetry 版收取。关于可观测链路 OpenTelemetry 版提供的免费额度和具体定价,请参见计费说明。
实现集群数据面的链路追踪流程如下:
获取可观测链路 OpenTelemetry 版数据接入点和鉴权Token,并将鉴权Token存储在集群Secret中,以便让OpenTelemetry Collector正确读取配置和鉴权信息。
部署 OpenTelemetry Collector 组件,用于收集、处理和导出观测数据。
ACK应用市场提供快速部署 OpenTelemetry Collector 的方式,可在集群内以 DaemonSet 模式部署。
通过kubelet配置开启链路追踪并配置相关参数(采样率),让采集数据通过 OpenTelemetry Collector 转发至可观测链路 OpenTelemetry 版。
步骤一:获取接入点和鉴权Token
登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心。
在开源框架区域单击OpenTelemetry卡片。
选择数据上报地域,选择连接方式为阿里云内网方式,上报方式为gRPC,保存接入点信息供后续使用。
初次接入的地域将会自动进行资源初始化,请按页面提示完成操作。
步骤二:将鉴权Token存储到集群Secret中
将鉴权 Token 存储到 ACK 集群的Secret中后,您可以通过变量引用的方式在 OpenTelemetry Collector 的 ConfigMap 中使用此鉴权 Token 信息。Secret 与下一步安装的 OpenTelemetry Collector 需处于同一命名空间。
OpenTelemetry Collector 默认部署在 otel-collector 命名空间。您可以手动创建 otel-collector 命名空间,也可以使用其他命名空间,并在安装OpenTelemetry Collector时选择该命名空间。
步骤三:安装 OpenTelemetry Collector
OpenTelemetry Collector 是一个可观测数据采集器,提供了统一的数据接收、处理和导出能力。OpenTelemetry Collector 可支持对接各类开源可观测数据(例如 Jaeger、Prometheus、Fluent Bit 等),避免需要部署多个可观测采集器。
登录容器服务管理控制台,在左侧导航栏选择 。
搜索opentelemetry-collector,点击卡片。
此页面包含组件介绍和组件Helm Chart的参数说明。您可以在此页面了解,也可以根据下文指引完成必要配置。
然后在页面右上角单击一键部署,选择集群和命名空间,按照页面指引进入下一步。
组件的命名空间需与步骤二创建的Secret命名空间保持一致。
选择Chart版本(建议使用默认版本),设置 Chart 参数,按照页面提示完成Chart的安装。
参数
说明
示例
参数
说明
示例
mode
设置为
daemonset
,以DaemonSet的模式部署 OpenTelemetry Collector 。mode: "daemonset"
enableXtraceTokenFromSecret
设置为
true
,以通过环境变量引用鉴权 Token。开启后,鉴权 Token 将不会以明文的方式存储在 OpenTelemetry Collector 的 ConfigMap 中,避免敏感信息泄露。enableXtraceTokenFromSecret: true
请确保您已完成步骤二的操作,避免Chart部署失败。
exporters
添加名为
otlp
的数据导出器(Exporter),用于指定链路数据上报的地址。将
endpoint
设置为步骤一中获取的内网接入点。exporters: otlp: endpoint: <此前获取的内网接入点> tls: insecure: true headers: Authentication: ${env:OPENTELEMETRY_GRPC_TOKEN}
receivers
添加名为
otlp/kubelet
的接收器(Receiver),监听本地 4317 端口,通过 OTLP/gRPC 协议接收 kubelet 链路数据。receivers: otlp/kubelet: # 创建一个名为 otlp/kubelet 的接收器 protocols: grpc: endpoint: 127.0.0.1:4317
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
hostNetwork
设置为
true
,OpenTelemetry Collector 可直接使用主机的 IP 地址和端口进行通信。hostNetwork: true
成功安装后,页面将自动跳转至Helm页面。
前往工作负载 > 守护进程集页面,选择组件的命名空间,如有名为 opentelemetry-collector-agent 的 DaemonSet 且所有Pod运行状态为Running,表示安装成功。
步骤四:为 kubelet 开启链路追踪
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池列表的操作列,单击Kubelet 配置,按照页面提示添加自定义参数、了解注意事项并提交配置。
下拉选择 tracing,并选择 endpoint,值填写为
localhost:4317
,代表 kubelet 链路数据将发送至 localhost:4317。该地址与中步骤三 otlp/kubelet Receiver 中的endpoint
对应。再次下拉选择 tracing,并选择 samplingRatePerMillion,控制采样率,决定每一百万次请求中被采样的比例。链路追踪可能会对集群网络和CPU性能产生一定影响,具体取决于整体配置情况。如遇性能问题,可根据集群的负载情况适当调低采样率。
例如,1000000表示100%的采样率,即每一百万次请求中,所有请求都会被采样和记录;100000表示10%的采样率;10000表示1%的采样率。
步骤五:在可观测链路 OpenTelemetry 版上查看调用链路数据
登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击应用列表。
在页面顶部选择地域,然后单击应用名称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 版上查看调用链路数据
- 相关文档