crane-scheduler基於真實負載進行k8s排程

滴滴滴發表於2024-12-05

原生 kubernetes 排程器只能基於資源的 resource request 進行排程,然而 Pod 的真實資源使用率,往往與其所申請資源的 request/limit 差異很大,導致叢集負載不均的問題。

crane-scheduler基於叢集的真實負載資料構造了一個簡單卻有效的模型,作用於排程過程中的 Filter 與 Score 階段,並提供了一種靈活的排程策略配置方式,從而有效緩解叢集中資源負載不均問題,真正實現將本增效。

背景

將服務部署在Kubernetes叢集上是當今許多企業的首選方案,其能幫助企業自動化部署、彈性伸縮以及容錯處理等工作,減少了人工操作和維護工作量,提高了服務的可靠性和穩定性,有效實現了降本增效。但kubernetes 的原生排程器只能透過資源請求來排程 pod,這很容易造成一系列負載不均的問題:

  1. 叢集中的部分節點,資源的真實使用率遠低於 resource request,卻沒有被排程更多的 Pod,這造成了比較大的資源浪費。

  2. 而叢集中的另外一些節點,其資源的真實使用率事實上已經過載,卻無法為排程器所感知到,這極大可能影響到業務的穩定性。

這些無疑都與企業上雲的最初目的相悖,為業務投入了足夠的資源,卻沒有達到理想的效果。crane-scheduler打破了資源 resource request 與真實使用率之間的鴻溝,著力於排程層面,讓排程器直接基於真實使用率進行排程,使用最大化的同時排除了穩定性的後顧之憂,真正實現降本增效。

Kubernetes 排程框架

Kubernetes官方提供了可插拔架構的排程框架,能夠進一步擴充套件Kubernetes排程器,下圖展示了排程框架中的排程上下文及其中的擴充套件點,一個擴充套件可以註冊多個擴充套件點,以便可以執行更復雜的有狀態的任務。

相關文章