Kubernetes 系统组件的跟踪
Kubernetes v1.27 [beta]系统组件追踪记录集群中操作的延迟和关系。
Kubernetes 组件使用 OpenTelemetry 协议,通过 gRPC 导出器发出追踪,可以使用 OpenTelemetry Collector 收集和路由到追踪后端。
追踪收集
Kubernetes 组件内置了用于 OTLP 的 gRPC 导出器,可以导出追踪,无论是使用 OpenTelemetry Collector,还是不使用 OpenTelemetry Collector。
有关收集追踪和使用收集器的完整指南,请参阅 OpenTelemetry Collector 入门。但是,有一些特定于 Kubernetes 组件的注意事项。
默认情况下,Kubernetes 组件使用 gRPC 导出器通过 IANA OpenTelemetry 端口 4317 导出追踪。例如,如果收集器作为 Kubernetes 组件的 sidecar 运行,则以下接收器配置将收集 span 并将其记录到标准输出
receivers:
otlp:
protocols:
grpc:
exporters:
# Replace this exporter with the exporter for your backend
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug]
要直接将追踪发出到后端,而无需使用收集器,请在 Kubernetes 追踪配置文件中的 endpoint 字段中指定所需的追踪后端地址。此方法无需收集器,并简化了整体结构。
对于追踪后端标头配置,包括身份验证详细信息,可以使用环境变量 OTEL_EXPORTER_OTLP_HEADERS,请参阅 OTLP 导出器配置。
此外,对于追踪资源属性配置,例如 Kubernetes 集群名称、命名空间、Pod 名称等,也可以使用环境变量 OTEL_RESOURCE_ATTRIBUTES,请参阅 OTLP Kubernetes 资源。
组件追踪
kube-apiserver 追踪
kube-apiserver 为传入 HTTP 请求以及传出的 webhook 请求、etcd 和重入请求生成 span。它使用 W3C Trace Context 传播传出的请求,但不会使用附加到传入请求的 trace context,因为 kube-apiserver 通常是一个公共端点。
启用 kube-apiserver 中的追踪
要启用追踪,请使用 --tracing-config-file=<path-to-config> 为 kube-apiserver 提供一个追踪配置文件。这是一个示例配置,用于记录 1/10000 请求的 span,并使用默认 OpenTelemetry 端点
apiVersion: apiserver.config.k8s.io/v1
kind: TracingConfiguration
# default value
#endpoint: localhost:4317
samplingRatePerMillion: 100
有关 TracingConfiguration 结构体的更多信息,请参阅 API 服务器配置 API (v1)。
kubelet 追踪
Kubernetes v1.34 [稳定](默认启用)kubelet CRI 接口和经过身份验证的 http 服务器被工具化以生成追踪 span。与 apiserver 一样,端点和采样率是可配置的。还配置了 trace context 传播。始终尊重父 span 的采样决策。如果提供追踪配置采样率,则该采样率将应用于没有父 span 的 span。如果没有配置端点,则默认 OpenTelemetry Collector 接收器地址设置为“localhost:4317”。
启用 kubelet 中的追踪
要启用追踪,请应用 追踪配置。这是一个 kubelet 配置片段示例,用于记录 1/10000 请求的 span,并使用默认 OpenTelemetry 端点
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
tracing:
# default value
#endpoint: localhost:4317
samplingRatePerMillion: 100
如果 samplingRatePerMillion 设置为一百万 (1000000),则每个 span 都将发送到导出器。
Kubernetes v1.35 中的 kubelet 收集垃圾回收、pod 同步例程以及每个 gRPC 方法的 span。kubelet 使用 trace context 传播 gRPC 请求,以便具有追踪工具的容器运行时,例如 CRI-O 和 containerd,可以将它们导出的 span 与 kubelet 的 trace context 关联。生成的追踪将具有 kubelet 和容器运行时 span 之间的父子链接,在调试节点问题时提供有用的上下文。
请注意,导出 span 始终会对网络和 CPU 方面带来一些性能开销,具体取决于系统的整体配置。如果集群中启用了追踪出现任何问题,则通过减少 samplingRatePerMillion 或完全禁用追踪(通过删除配置)来缓解问题。
稳定性
追踪工具仍在积极开发中,可能会以各种方式发生变化。这包括 span 名称、附加属性、工具化端点等。在 此功能毕业到稳定版本之前,无法保证追踪工具的向后兼容性。
接下来
- 阅读关于 OpenTelemetry Collector 入门
- 阅读关于 OTLP 导出器配置