大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
801
2025-04-02
1????? 為什么K8S需要Volcano
K8S自帶的的資源調(diào)度器,有一個(gè)明顯的特點(diǎn)是:依次調(diào)度每個(gè)容器。但在AI訓(xùn)練或者大數(shù)據(jù),這種必須多個(gè)容器同時(shí)配合執(zhí)行的情況下,容器依次調(diào)度是無法滿足需要的。因?yàn)檫@些計(jì)算任務(wù)包含的容器們想要的是,要么同時(shí)都成功,要么就都別執(zhí)行。
比如,某個(gè)大數(shù)據(jù)應(yīng)用需要跑1個(gè)Driver容器+10個(gè)Executor容器(對(duì)應(yīng)AI訓(xùn)練的話,就是1個(gè)PS容器+10個(gè)Worker容器)。如果容器是一個(gè)一個(gè)的調(diào)度,假設(shè)在啟動(dòng)最后一個(gè)executor容器(對(duì)應(yīng)AI是Worker容器)時(shí),由于資源不足而調(diào)度失敗無法啟動(dòng)。那么前面的9個(gè)executor容器雖然運(yùn)行著,其實(shí)也是浪費(fèi)的。AI訓(xùn)練也是一樣的道理,必須所有的Worker都同時(shí)運(yùn)行,才能進(jìn)行訓(xùn)練,壞一個(gè),其他的容器就等于白跑。而GPU被容器霸占著卻不能開始計(jì)算,成本是非常高的。
所以當(dāng)你的(1)總體資源需求<集群資源的時(shí)候,普通的K8S自帶調(diào)度器可以跑,沒問題。但是當(dāng)(2)總體資源需求>集群資源的時(shí)候,K8S自帶調(diào)度器會(huì)因?yàn)殡S機(jī)依次調(diào)度容器,使得部分容器無法調(diào)度,從而導(dǎo)致業(yè)務(wù)占著資源又不能開始計(jì)算,死鎖著浪費(fèi)資源。那么場(chǎng)景(1)和場(chǎng)景(2)誰說常態(tài)呢?不用說,肯定是(2)了,誰能大方到一直讓集群空著呢對(duì)吧。這個(gè)時(shí)候就必須需要增強(qiáng)型的K8s資源調(diào)度器Volcano了。
2????? 資源調(diào)度領(lǐng)域
當(dāng)用戶向K8s申請(qǐng)容器所需的計(jì)算資源(如 CPU、Memory、GPU等)時(shí),調(diào)度器負(fù)責(zé)挑選出滿足各項(xiàng)規(guī)格要求的節(jié)點(diǎn)來部署這些容器。通常,滿足各項(xiàng)要求的節(jié)點(diǎn)并非唯一,且水位(節(jié)點(diǎn)已有負(fù)載)各不相同,不同的分配方式最終得到的分配率存在差異,因此,調(diào)度器的一項(xiàng)核心任務(wù)就是以最終資源利用率最優(yōu)的目標(biāo)從眾多候選機(jī)器中挑出最合適的節(jié)點(diǎn)。
除了資源維度上的要求,實(shí)際調(diào)度中還有容災(zāi)和干擾隔離上的考慮:比如同一應(yīng)用的容器不允許全部部署到同一臺(tái)節(jié)點(diǎn)上,很多應(yīng)用會(huì)要求每臺(tái)節(jié)點(diǎn)上只允許有一個(gè)實(shí)例。另外,某些應(yīng)用組件之間還存在互斥關(guān)系(如資源爭(zhēng)搶),嚴(yán)重影響應(yīng)用的性能,因此也不允許它們被部署到同一臺(tái)節(jié)點(diǎn)上。這些限制條件的引入,使得想新寫一款調(diào)度器,能替代原生K8S調(diào)度器并不容易。
3????? 算法分析
Volcano首先要解決的問題就是Gang Scheduling的問題,即一組容器要么都成功,要么都別調(diào)度。這個(gè)是最基本的用來解決資源死鎖的問題,可以很好的提高集群資源利用率(在高業(yè)務(wù)負(fù)載時(shí))。除此之外,它還提供了多種調(diào)度算法,例如priority優(yōu)先級(jí),DRF(dominant resource fairness), binpack等。 我們今天就是挖一挖Volcano內(nèi)部的各種調(diào)度算法實(shí)現(xiàn)。
3.1????? Gang Scheduling
這種調(diào)度算法,首先就是有’組’的概念,調(diào)度結(jié)果成功與否,只關(guān)注整一’組’容器。
具體算法是,先遍歷各個(gè)容器組(代碼里面稱為Job),然后模擬調(diào)度這一組容器中的每個(gè)容器(代碼里面稱為Task)。最后判斷這一組容器可調(diào)度容器數(shù)是否大于最小能接受底限,可以的話就真的往節(jié)點(diǎn)調(diào)度(代碼里面稱為Bind節(jié)點(diǎn))。
3.2????? DRF(dominant resource fairness)
這種調(diào)度算法,主要是Yarn和Mesos都有,而K8S沒有,需要補(bǔ)齊。概括而言,DRF意為:“誰要的資源少,誰的優(yōu)先級(jí)高”。因?yàn)檫@樣可以滿足更多的作業(yè),不會(huì)因?yàn)橐粋€(gè)胖業(yè)務(wù),餓死大批小業(yè)務(wù)。注意:這個(gè)算法選的也是容器組(比如一次AI訓(xùn)練,或一次大數(shù)據(jù)計(jì)算)。
3.3????? binpack
這種調(diào)度算法,目標(biāo)很簡(jiǎn)單:盡量先把已有節(jié)點(diǎn)填滿(盡量不往空白節(jié)點(diǎn)投)。具體實(shí)現(xiàn)上,binpack就是給各個(gè)可以投遞的節(jié)點(diǎn)打分:“假如放在當(dāng)前節(jié)點(diǎn)后,誰更滿,誰的分?jǐn)?shù)就高”。因?yàn)檫@樣可以盡量將應(yīng)用負(fù)載靠攏至部分節(jié)點(diǎn),非常有利于K8S集群節(jié)點(diǎn)的自動(dòng)擴(kuò)縮容功能。注意:這個(gè)算法是針對(duì)單個(gè)容器的。
3.4????? proportion(Queue隊(duì)列)
Queue功能是Yarn調(diào)度器有的功能,K8S需要補(bǔ)齊。不過我對(duì)Queue這個(gè)取名有些不太滿意。因?yàn)樗鼘?shí)際上是用來控制集群總資源分配比例的。比如說某廠有2個(gè)團(tuán)隊(duì),共享一個(gè)計(jì)算資源池。管理員設(shè)置:A團(tuán)隊(duì)最多使用總集群的60%。然后B團(tuán)隊(duì)最多使用總集群的40%。那投遞的任務(wù)量,超過該團(tuán)隊(duì)的可用資源怎么辦?那就排隊(duì)等唄,所以特性取名Queue。
3.5????? 最終權(quán)重
由于Volcano的調(diào)度算法插件實(shí)在太多,每個(gè)插件的決策又有可能互相干擾。所以為了在各個(gè)算法間做權(quán)衡,又給插件設(shè)置了權(quán)重,這樣可以控制每種調(diào)度算法插件的影響因子。比如NodeOrder算法里面,就是在優(yōu)選階段(注:k8s調(diào)度,分預(yù)選階段和優(yōu)選階段。預(yù)選就是排除不符合的節(jié)點(diǎn)。優(yōu)選就是給所有符合的節(jié)點(diǎn)打分)給節(jié)點(diǎn)打分的算法。各個(gè)算法有自己的權(quán)重可以配置。
4????? Volcano
Volcano項(xiàng)目的前身是Kube-Batch,一個(gè)帶著想解決k8s不支持Gang Scheduling問題初衷的項(xiàng)目。后來由于AI和大數(shù)據(jù)等業(yè)務(wù)領(lǐng)域也開始對(duì)K8s有述求情況下,團(tuán)隊(duì)成員希望有一種噴薄而出的感覺,所以帶上具體場(chǎng)景實(shí)踐經(jīng)驗(yàn),重新將項(xiàng)目命名為Volcano,火山。希望能夠推動(dòng)K8S在各個(gè)場(chǎng)景下向火山一樣熱烈綻放。
如果有興趣共享一份力量,可以訪問 https://volcano.sh/ 參與。
K8S Kubernetes 云原生
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。