Kubernetes 系統元件的追蹤
Kubernetes v1.27 [beta]
系統元件追蹤記錄叢集中操作的延遲與關係。
Kubernetes 元件使用 OpenTelemetry 協定 與 gRPC 匯出器發出追蹤,並且可以使用 OpenTelemetry Collector 收集並路由至追蹤後端。
追蹤收集
Kubernetes 元件具有內建的 OTLP gRPC 匯出器,可匯出追蹤,無論是否使用 OpenTelemetry Collector 皆可。
如需收集追蹤與使用 Collector 的完整指南,請參閱 OpenTelemetry Collector 入門。但是,有幾件事需要注意,這些是 Kubernetes 元件特有的。
依預設,Kubernetes 元件在 IANA OpenTelemetry 埠 4317 上使用 OTLP 的 grpc 匯出器匯出追蹤。例如,如果 Collector 以 Sidecar 形式在 Kubernetes 元件旁執行,則下列接收器組態將收集 Span 並將其記錄到標準輸出
receivers:
otlp:
protocols:
grpc:
exporters:
# Replace this exporter with the exporter for your backend
logging:
logLevel: debug
service:
pipelines:
traces:
receivers: [otlp]
exporters: [logging]
若要直接將追蹤發送到後端而無需使用 Collector,請在使用所需追蹤後端位址的 Kubernetes 追蹤組態檔中指定端點欄位。此方法免除了對 Collector 的需求,並簡化了整體結構。
對於追蹤後端標頭組態,包括身份驗證詳細資訊,環境變數可以與 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/v1beta1
kind: TracingConfiguration
# default value
#endpoint: localhost:4317
samplingRatePerMillion: 100
如需關於 TracingConfiguration
結構的更多資訊,請參閱 API 伺服器組態 API (v1beta1)。
kubelet 追蹤
Kubernetes v1.27 [beta]
(依預設啟用: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
featureGates:
KubeletTracing: true
tracing:
# default value
#endpoint: localhost:4317
samplingRatePerMillion: 100
如果 samplingRatePerMillion
設定為一百萬 (1000000
),則每個 Span 都將傳送至匯出器。
Kubernetes v1.32 中的 kubelet 從垃圾收集、Pod 同步常式以及每個 gRPC 方法收集 Span。kubelet 使用 gRPC 請求傳播追蹤環境定義,以便具有追蹤檢測的容器執行期 (例如 CRI-O 與 containerd) 可以將其匯出的 Span 與來自 kubelet 的追蹤環境定義建立關聯。產生的追蹤將在 kubelet 與容器執行期 Span 之間具有父子連結,在偵錯節點問題時提供有用的環境資訊。
請注意,匯出 Span 始終會產生少許的網路與 CPU 效能負擔,具體取決於系統的整體組態。如果叢集中有任何類似的問題在啟用追蹤的情況下執行,則可以透過降低 samplingRatePerMillion
或完全移除組態來停用追蹤,以減輕問題。
穩定性
追蹤檢測仍在積極開發中,並且可能會以各種方式變更。這包括 Span 名稱、附加屬性、檢測端點等。在此功能升級為穩定版之前,不保證追蹤檢測的回溯相容性。
下一步
- 閱讀關於 OpenTelemetry Collector 入門
- 閱讀關於 OTLP 匯出器組態