1. 程式人生 > >Kubernetes資源排程2-資源動態排程

Kubernetes資源排程2-資源動態排程

1.基於SLA驅動的資源動態排程演算法

將應用分為不同型別,將不同應用排程到不同資源狀態節點上,減少應用因資源不足帶來的問題,根據SLA協議實時監控應用資源使用狀況,動態調整應用資源佔用率,提高資源使用率。

SLA協議:Service-Level Agreement的縮寫,意思是服務等級協議。是關於網路服務供應商和客戶間的一份合同,其中定義了服務型別、服務質量和客戶付款等術語。

監控容器在一段時間內資源使用率資料,使用擬合函式來擬合數據(機器學習迴歸),通過擬合函式來計算容器虛擬資源到達使用率上限的時間,根據時間對容器進行排序。

1. tj時刻容器i的cpu使用率cij, 記憶體使用率mij

    

2.線性迴歸得到cpu使用率與時間的擬合函式Ztjc  預測容器icpu使用率到達上限Ciu的時間ticu,令Ztjc=Ciu,解得ticu

3.根據每個容器的ticu升序排列,得到排序方案Sc,容器i在排序方案中的序列號為Sic

4.求得記憶體使用率與時間的擬合函式Ytjm    預測記憶體使用達到上限Miu的時間timu 令 Ytjm=Miu  得到timu

5.根據每個容器的timu升序排列,得到排序方案Sm,容器i在排序方案中的序列號為Sim

6.對於排序方案Sc, Sm進行整合:

7.考慮SLA處理問題的優先順序pre

S為最終排序,每次選擇S中第一位作為資源排程的目標

8.根據容器資源使用率的下限,確定容器資源是否可以回收

一段時間內cpu的平均使用率c`i  記憶體平均使用率m`i

cid  mid為cpu,記憶體使用率下限   ciu  cmu  cpu記憶體使用率上限

Ci已經分配的資源   deltaC 要回收的資源

物理機節點K可分配的資源

若任務所需資源小於物理機節點的資源,則執行節點內排程,否則執行節點間排程。

總結一下,利用容器的cpu,記憶體的預測情況以及SLA協議來對容器進行排序,根據資源使用率上下限進行節點內以及節點間的排程

參考論文:

[1]邊俊峰. 基於Docker的資源排程及應用容器叢集管理系統設計與實現[D].山東大學,2017.

2.基於Kubernetes-on-EGO的兩級資源排程器

目前的 Kubernetes 排程器是單程序的同步排程,當系統排程任務大量增加時,排程器會發生阻塞延時,不能滿足排程效率高的要求;排程計劃是不對外暴露的,不能滿足大規模資料中心中使用者自己通過配置調配資源的問題。第一個問題應該是存在的,第二個問題現在應該支援了吧,需要研究一下。

單體排程:

單體式排程指排程器是單一程序執行在某臺主機上,排程器經過內建的演算法將任務分派給叢集中的某臺主機,所有任務都服從一個排程器的安排,這種架構簡單,但是這種排程器存在著缺陷,對於長時間執行的服務如 Web 服務和批處理任務如 Map Reduce 任務沒有區分排程;應對不同場景,排程器應有不同的排程邏輯;排程器是單程序設計,在叢集規模增大排程任務增多時,排程會導致佇列阻塞。

二級排程;

二級排程是指資源排程和任務排程分離,這樣任務排程邏輯就可以更加靈活,根據不同的應用需求配置不同的排程邏輯,叢集之間資源還可以保證處於共享狀態。Mesos 使用二級排程架構,在 Mesos 中資源會主動提供給上層應用層排程,在二級排程邏輯,待排程的任務跟資源管理器互動,資源管理器主動給任務分配動態資源。使用者能夠靈活使用排程策略。二級排程也存在問題:應用層排程隱藏了全域性資源排程,排程器無法看到全域性資源的配置情況,只看到資源管理器提供的資源,因此會導致資源排程不合理,降低資源的使用效率。

首先使用者建立 Pod,向系統提交建立 Pod 的請求,Kubernetes 元件 APIServer接受使用者的資源請求,將資源請求的資訊邏輯層儲存到 
Etcd 中儲存,二級排程系統的上層排程也就是一級排程首先接受並初始處理使用者的資源請求,比如將使用者的資源格式化為排程系統所能識別的資源格式,這裡會將 Memory 的資源請求除以 1000,並進行取整,以此來增大資源的利用率;上次排程接受使用者請求並進行處理後,接下來進入下層的二級排程系統,首先登陸到 EGO 的系統中,登陸成功則進行 Client 的資訊註冊,進而進入最主要的資源分配階段,首先進行資源分配,排程系統查詢資源池中可用的資源,查詢到可用的資源則進入到構建排程結果階段,將可用的資源資訊,建立 
Pod 的資訊,使用者註冊的 Client 資訊組織到一起,而後排程系統讀取排程結果,最後將排程結果返回給整個雲平臺系統,本次任務排程資源分配結束,排程系統成功為使用者分配到可用的資源。接下來就是Kubernetes 系統得知排程結束,使用系統分配的資源為使用者的任務啟動服務。

k8s自身的排程系統是接受待排程任務,然後根據待排程任務資源情況以及物理機節點情況來進行進行節點選擇,最終執行任務排程。二級排程系統是將資源分配與任務排程分離,資源排程系統為任務分配資源,根據分配結果再進行任務排程。通過將資源排程和任務排程分離,使得資源排程提高排程效率,下層任務排程可以靈活的接入使用者定義的任務排程演算法和排程機制,這使得任務排程邏輯不僅可以根據不同應用要求而進行裁剪,而且保留了在叢集之間共享資源的可能性。

參考論文:

[1]臺慧敏. 基於Kubernetes-on-EGO的兩級資源排程器的設計與實現[D].西安電子科技大學,2017.