從輪詢切換到基於 CRI 事件的容器狀態更新
功能狀態:
Kubernetes v1.25 [alpha]
(預設啟用:false)本頁說明如何遷移節點以使用基於事件的容器狀態更新。與依賴輪詢的舊方法相比,基於事件的實作減少了 kubelet 的節點資源消耗。您可能知道此功能稱為事件驅動的 Pod 生命周期事件產生器 (PLEG)。這是 Kubernetes 專案內部用於關鍵實作細節的名稱。
基於輪詢的方法稱為通用 PLEG。
準備開始
- 您需要執行提供此功能的 Kubernetes 版本。Kubernetes v1.27 包含基於事件的容器狀態更新的 Beta 支援。此功能為 Beta 版,但預設為停用,因為它需要容器執行期的支援。
- 您的 Kubernetes 伺服器版本必須為 1.26 或更高版本。若要檢查版本,請輸入
kubectl version
。如果您執行的是不同版本的 Kubernetes,請查看該版本的說明文件。 - 使用的容器執行期必須支援容器生命週期事件。即使您已啟用此功能閘道,如果容器執行期未宣告支援容器生命週期事件,kubelet 也會自動切換回舊版通用 PLEG 機制。
為什麼要切換到 Evented PLEG?
- 通用 PLEG 因為頻繁輪詢容器狀態而產生不可忽略的額外負擔。
- Kubelet 並行輪詢容器狀態加劇了這種額外負擔,從而限制了其擴展性,並導致效能不佳和可靠性問題。
- Evented PLEG 的目標是透過取代定期輪詢來減少閒置期間不必要的工作。
切換到 Evented PLEG
啟動 Kubelet 時啟用 功能閘道
EventedPLEG
。您可以透過編輯 kubelet 組態檔 並重新啟動 kubelet 服務來管理 kubelet 功能閘道。您需要在使用此功能的每個節點上執行此操作。在繼續之前,請確保節點已排空。
啟動容器執行期並啟用容器事件產生。
您的 Kubernetes 伺服器版本必須為 1.26 或更高版本。若要檢查版本,請輸入版本 1.7 以上
版本 1.26 以上
檢查 CRI-O 是否已設定為發出 CRI 事件,方法是驗證組態,
crio config | grep enable_pod_events
如果已啟用,輸出應類似於以下內容
enable_pod_events = true
若要啟用它,請使用旗標
--enable-pod-events=true
啟動 CRI-O 守護程式,或使用包含以下幾行的 dropin 組態[crio.runtime] enable_pod_events: true
kubectl version
。驗證 kubelet 是否正在使用基於事件的容器階段變更監控。若要檢查,請在 kubelet 日誌中尋找術語
EventedPLEG
。輸出應類似於此
I0314 11:10:13.909915 1105457 feature_gate.go:249] feature gates: &{map[EventedPLEG:true]}
如果您已將
--v
設定為 4 或更高,您可能會看到更多條目,指出 kubelet 正在使用基於事件的容器狀態監控。I0314 11:12:42.009542 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=3b2c6172-b112-447a-ba96-94e7022912dc I0314 11:12:44.623326 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40 I0314 11:12:44.714564 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40
下一步
- 在 Kubernetes 增強提案 (KEP) 中了解更多關於設計的資訊:Kubelet Evented PLEG 以獲得更好的效能。
上次修改時間為太平洋標準時間 2024 年 2 月 20 日上午 9:48:將更多功能狀態簡碼切換為資料驅動 (7b6866063f)