一、追蹤 Kubernetes 系統(tǒng)組件
特性狀態(tài): Kubernetes v1.27 [beta]
系統(tǒng)組件追蹤功能記錄各個(gè)集群操作的時(shí)延信息和這些操作之間的關(guān)系。
Kubernetes 組件基于 gRPC 導(dǎo)出器的 OpenTelemetry 協(xié)議 發(fā)送追蹤信息,并用 OpenTelemetry Collector 收集追蹤信息,再將其轉(zhuǎn)交給追蹤系統(tǒng)的后臺(tái)。
1、追蹤信息的收集
關(guān)于收集追蹤信息、以及使用收集器的完整指南,可參見 Getting Started with the OpenTelemetry Collector。 不過(guò),還有一些特定于 Kubernetes 組件的事項(xiàng)值得注意。
默認(rèn)情況下,Kubernetes 組件使用 gRPC 的 OTLP 導(dǎo)出器來(lái)導(dǎo)出追蹤信息,將信息寫到 IANA OpenTelemetry 端口。 舉例來(lái)說(shuō),如果收集器以 Kubernetes 組件的邊車模式運(yùn)行, 以下接收器配置會(huì)收集 span 信息,并將它們寫入到標(biāo)準(zhǔn)輸出。
receivers:
otlp:
protocols:
grpc:
exporters:
# 用適合你后端環(huán)境的導(dǎo)出器替換此處的導(dǎo)出器
logging:
logLevel: debug
service:
pipelines:
traces:
receivers: [otlp]
exporters: [logging]
2、組件追蹤
2.1 kube-apiserver 追蹤
kube-apiserver 為傳入的 HTTP 請(qǐng)求、傳出到 webhook 和 etcd 的請(qǐng)求以及重入的請(qǐng)求生成 span。 由于 kube-apiserver 通常是一個(gè)公開的端點(diǎn),所以它通過(guò)出站的請(qǐng)求傳播 W3C 追蹤上下文, 但不使用入站請(qǐng)求的追蹤上下文。
2.2 在 kube-apiserver 中啟用追蹤
要啟用追蹤特性,需要使用 --tracing-config-file=<<配置文件路徑> 為 kube-apiserver 提供追蹤配置文件。下面是一個(gè)示例配置,它為萬(wàn)分之一的請(qǐng)求記錄 span,并使用了默認(rèn)的 OpenTelemetry 端點(diǎn)。
apiVersion: apiserver.config.k8s.io/v1beta1
kind: TracingConfiguration
# 默認(rèn)值
#endpoint: localhost:4317
samplingRatePerMillion: 100
有關(guān) TracingConfiguration 結(jié)構(gòu)體的更多信息,請(qǐng)參閱 API 服務(wù)器配置 API (v1beta1)。
2.3 kubelet 追蹤
特性狀態(tài): Kubernetes v1.27 [beta]
kubelet CRI 接口和實(shí)施身份驗(yàn)證的 HTTP 服務(wù)器被插樁以生成追蹤 span。 與 API 服務(wù)器一樣,端點(diǎn)和采樣率是可配置的。 追蹤上下文傳播也是可以配置的。始終優(yōu)先采用父 span 的采樣決策。 用戶所提供的追蹤配置采樣率將被應(yīng)用到不帶父級(jí)的 span。 如果在沒(méi)有配置端點(diǎn)的情況下啟用,將使用默認(rèn)的 OpenTelemetry Collector 接收器地址 “l(fā)ocalhost:4317”。
2.4 在 kubelet 中啟用追蹤
要啟用追蹤,需應(yīng)用追蹤配置。 以下是 kubelet 配置的示例代碼片段,每 10000 個(gè)請(qǐng)求中記錄一個(gè)請(qǐng)求的 span,并使用默認(rèn)的 OpenTelemetry 端點(diǎn):
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
KubeletTracing: true
tracing:
# 默認(rèn)值
#endpoint: localhost:4317
samplingRatePerMillion: 100
如果 samplingRatePerMillion 被設(shè)置為一百萬(wàn) (1000000),則所有 span 都將被發(fā)送到導(dǎo)出器。
Kubernetes v1.27 中的 kubelet 從垃圾回收、Pod 同步例程以及每個(gè) gRPC 方法中收集 span。CRI-O 和 containerd 這類關(guān)聯(lián)的容器運(yùn)行時(shí)可以將鏈路鏈接到其導(dǎo)出的 span,以提供更多上下文信息。
請(qǐng)注意導(dǎo)出 span 始終會(huì)對(duì)網(wǎng)絡(luò)和 CPU 產(chǎn)生少量性能開銷,具體取決于系統(tǒng)的總體配置。 如果在啟用追蹤的集群中出現(xiàn)類似性能問(wèn)題,可以通過(guò)降低 samplingRatePerMillion 或通過(guò)移除此配置來(lái)徹底禁用追蹤來(lái)緩解問(wèn)題。
3、?穩(wěn)定性
追蹤工具仍在積極開發(fā)中,未來(lái)它會(huì)以多種方式發(fā)生變化。 這些變化包括:span 名稱、附加屬性、檢測(cè)端點(diǎn)等等。 此類特性在達(dá)到穩(wěn)定版本之前,不能保證追蹤工具的向后兼容性。
二、代理
用戶在使用 Kubernetes 的過(guò)程中可能遇到幾種不同的代理(proxy):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-620841.html
- kubectl proxy:
- 運(yùn)行在用戶的桌面或 pod 中
- 從本機(jī)地址到 Kubernetes apiserver 的代理
- 客戶端到代理使用 HTTP 協(xié)議
- 代理到 apiserver 使用 HTTPS 協(xié)議
- 指向 apiserver
- 添加認(rèn)證頭信息
- apiserver proxy:
- 是一個(gè)建立在 apiserver 內(nèi)部的“堡壘”
- 將集群外部的用戶與集群 IP 相連接,這些 IP 是無(wú)法通過(guò)其他方式訪問(wèn)的
- 運(yùn)行在 apiserver 進(jìn)程內(nèi)
- 客戶端到代理使用 HTTPS 協(xié)議 (如果配置 apiserver 使用 HTTP 協(xié)議,則使用 HTTP 協(xié)議)
- 通過(guò)可用信息進(jìn)行選擇,代理到目的地可能使用 HTTP 或 HTTPS 協(xié)議
- 可以用來(lái)訪問(wèn) Node、 Pod 或 Service
- 當(dāng)用來(lái)訪問(wèn) Service 時(shí),會(huì)進(jìn)行負(fù)載均衡
- kube proxy:
- 在每個(gè)節(jié)點(diǎn)上運(yùn)行
- 代理 UDP、TCP 和 SCTP
- 不支持 HTTP
- 提供負(fù)載均衡能力
- 只用來(lái)訪問(wèn) Service
- apiserver 之前的代理/負(fù)載均衡器:
- 在不同集群中的存在形式和實(shí)現(xiàn)不同 (如 nginx)
- 位于所有客戶端和一個(gè)或多個(gè) API 服務(wù)器之間
- 存在多個(gè) API 服務(wù)器時(shí),扮演負(fù)載均衡器的角色
- 外部服務(wù)的云負(fù)載均衡器:
- 由一些云供應(yīng)商提供 (如 AWS ELB、Google Cloud Load Balancer)
- Kubernetes 服務(wù)類型為 LoadBalancer 時(shí)自動(dòng)創(chuàng)建
- 通常僅支持 UDP/TCP 協(xié)議
- SCTP 支持取決于云供應(yīng)商的負(fù)載均衡器實(shí)現(xiàn)
- 不同云供應(yīng)商的云負(fù)載均衡器實(shí)現(xiàn)不同
Kubernetes 用戶通常只需要關(guān)心前兩種類型的代理,集群管理員通常需要確保后面幾種類型的代理設(shè)置正確文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-620841.html
到了這里,關(guān)于Kubernetes集群管理 —追蹤 Kubernetes 系統(tǒng)組件、代理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!