Kubernetes 系統元件的跟蹤

特性狀態: Kubernetes v1.27 [beta]

系統元件跟蹤記錄了叢集中操作的延遲和關係。

Kubernetes 元件使用 OpenTelemetry 協議與 gRPC 匯出器發出跟蹤,可以透過 OpenTelemetry Collector 收集並路由到跟蹤後端。

跟蹤收集

Kubernetes 元件內建了用於 OTLP 的 gRPC 匯出器,可以透過 OpenTelemetry Collector 或不透過 OpenTelemetry Collector 匯出跟蹤。

有關收集跟蹤和使用收集器的完整指南,請參閱 OpenTelemetry Collector 入門。但是,有一些特定於 Kubernetes 元件的注意事項。

預設情況下,Kubernetes 元件使用 OTLP 的 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 跟蹤上下文,但由於 kube-apiserver 通常是公共端點,因此不使用附加到傳入請求的跟蹤上下文。

在 kube-apiserver 中啟用跟蹤

要啟用跟蹤,請使用 `--tracing-config-file=<path-to-config>` 為 kube-apiserver 提供跟蹤配置檔案。這是一個示例配置,它為 10000 個請求中的 1 個請求記錄 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 [穩定] (預設啟用:true)

kubelet CRI 介面和經過身份驗證的 HTTP 伺服器都經過檢測以生成跟蹤 Span。與 apiserver 一樣,端點和取樣率都是可配置的。跟蹤上下文傳播也已配置。父 Span 的取樣決策始終受到尊重。提供的跟蹤配置取樣率將應用於沒有父 Span 的 Span。如果未配置端點,則預設 OpenTelemetry Collector 接收器地址“localhost:4317”將被設定。

在 kubelet 中啟用跟蹤

要啟用跟蹤,請應用 跟蹤配置。這是一個 kubelet 配置示例片段,它為 10000 個請求中的 1 個請求記錄 Span,並使用預設的 OpenTelemetry 端點:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
tracing:
  # default value
  #endpoint: localhost:4317
  samplingRatePerMillion: 100

如果 `samplingRatePerMillion` 設定為一百萬(`1000000`),則每個 Span 都將傳送到匯出器。

Kubernetes v1.34 中的 kubelet 會從垃圾收集、Pod 同步例程以及每個 gRPC 方法收集 Span。kubelet 會透過 gRPC 請求傳播跟蹤上下文,以便支援跟蹤檢測的容器執行時(例如 CRI-O 和 containerd)可以將其匯出的 Span 與來自 kubelet 的跟蹤上下文相關聯。生成的跟蹤將在 kubelet 和容器執行時 Span 之間具有父子連結,這在除錯節點問題時提供了有用的上下文。

請注意,匯出 Span 始終會帶來網路和 CPU 方面的小幅效能開銷,具體取決於系統的總體配置。如果在啟用了跟蹤的叢集中出現此類問題,可以透過降低 `samplingRatePerMillion` 或透過刪除配置完全停用跟蹤來緩解問題。

穩定性

跟蹤檢測仍在積極開發中,可能會以各種方式發生變化。這包括 Span 名稱、附加屬性、檢測的端點等。在此功能穩定之前,無法保證跟蹤檢測的向後相容性。

下一步

最後修改時間:2025 年 7 月 2 日下午 12:05 (PST):KEP-2831: kubelet tracing GA in 1.34 (f8d1342d61)