為什么 K8s 需要 Volcano

      網(wǎng)友投稿 1415 2025-04-02

      Volcano 是基于 Kubernetes 的批處理系統(tǒng),源自于華為云開(kāi)源出來(lái)的。Volcano 方便 AI、大數(shù)據(jù)、基因、渲染等諸多行業(yè)通用計(jì)算框架接入,提供高性能任務(wù)調(diào)度引擎,高性能異構(gòu)芯片管理,高性能任務(wù)運(yùn)行管理等能力。

      為什么 K8s 需要 Volcano

      K8s 自帶的的資源調(diào)度器,有一個(gè)明顯的特點(diǎn)是:依次調(diào)度每個(gè)容器。但在 AI 訓(xùn)練或者大數(shù)據(jù),這種必須多個(gè)容器同時(shí)配合執(zhí)行的情況下,容器依次調(diào)度是無(wú)法滿足需要的,因?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)度失敗無(wú)法啟動(dòng),那么前面的 9 個(gè) executor 容器雖然運(yùn)行著,其實(shí)也是浪費(fèi)的。

      AI 訓(xùn)練也是一樣的道理,必須所有的 Worker 同時(shí)運(yùn)行,才能進(jìn)行訓(xùn)練,壞一個(gè),其他的容器就等于白跑。而 GPU 被容器霸占著卻不能開(kāi)始計(jì)算,成本是非常高的。

      所以當(dāng)你的(1)總體資源需求 < 集群資源的時(shí)候,普通的 K8s 自帶調(diào)度器可以跑,沒(méi)問(wèn)題。但是當(dāng)(2)總體資源需求 > 集群資源的時(shí)候,K8s 自帶調(diào)度器會(huì)因?yàn)殡S機(jī)依次調(diào)度容器,使得部分容器無(wú)法調(diào)度,從而導(dǎo)致業(yè)務(wù)占著資源又不能開(kāi)始計(jì)算,死鎖著浪費(fèi)資源。那么場(chǎng)景(1)和場(chǎng)景(2)誰(shuí)說(shuō)常態(tài)呢?不用說(shuō),肯定是(2)了,誰(shuí)能大方到一直讓集群空著呢對(duì)吧。這種情況就必須需要增強(qiáng)型的 K8s 資源調(diào)度器 Volcano 了。

      資源調(diào)度領(lǐng)域

      當(dāng)用戶向 K8s 申請(qǐng)容器所需的計(jì)算資源(如 CPU、Memory、GPU 等)時(shí),調(diào)度器負(fù)責(zé)挑選出滿足各項(xiàng)規(guī)格要求的節(jié)點(diǎn)來(lái)部署這些容器。通常,滿足各項(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)上。這些限制條件的引入,使得想新寫(xiě)一款調(diào)度器,能替代原生 K8s 調(diào)度器并不容易。

      算法分析

      Volcano 首先要解決的問(wèn)題就是 Gang Scheduling 的問(wèn)題,即一組容器要么都成功,要么都別調(diào)度。這是最基本的用來(lái)解決資源死鎖的問(wèn)題,可以很好提高集群資源利用率(在高業(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 沒(méi)有,需要補(bǔ)齊。概括而言,DRF 意為:“誰(shuí)要的資源少,誰(shuí)的優(yōu)先級(jí)高”。這樣可以滿足更多的作業(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)后,誰(shuí)更滿,誰(shuí)的分?jǐn)?shù)就高”。因?yàn)檫@樣就能盡量將應(yīng)用負(fù)載靠攏至部分節(jié)點(diǎn),非常有利于 K8s 集群節(jié)點(diǎn)的自動(dòng)擴(kuò)縮容功能。注意:這個(gè)算法是針對(duì)單個(gè)容器的。

      為什么 K8s 需要 Volcano?

      3.4 proportion(Queue 隊(duì)列)

      Queue 功能是 Yarn 調(diào)度器有的功能,K8s 需要補(bǔ)齊。不過(guò)我對(duì) Queue 這個(gè)取名有些不太滿意。因?yàn)樗鼘?shí)際是用來(lái)控制集群總資源分配比例的。比如某廠有 2 個(gè)團(tuán)隊(duì),共享一個(gè)計(jì)算資源池。管理員設(shè)置:A 團(tuán)隊(duì)最多使用總集群的 60%,B 團(tuán)隊(duì)最多使用總集群的 40%。投遞的任務(wù)量,超過(guò)該團(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)重可以配置。

      Volcano

      Volcano 項(xiàng)目的前身是 Kube-Batch,一個(gè)帶著想解決 K8s 不支持 Gang Scheduling 問(wèn)題初衷的項(xiàng)目。后來(lái)由于 AI 和大數(shù)據(jù)等業(yè)務(wù)領(lǐng)域也開(kāi)始對(duì) K8s 有述求,團(tuán)隊(duì)成員希望有一種噴薄而出的感覺(jué),所以帶上具體場(chǎng)景實(shí)踐經(jīng)驗(yàn),重新將項(xiàng)目命名為 Volcano–火山,希望能夠推動(dòng) K8s 在各個(gè)場(chǎng)景下向火山一樣熱烈綻放。

      項(xiàng)目地址

      原文:?https://www.infoq.cn/article/wR2zUHduOKmPbKo6Q2bd

      容器 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)容。

      上一篇:如何在wps表格中快速輸入1萬(wàn)個(gè)序號(hào)?
      下一篇:Excel密碼,保障數(shù)據(jù)安全的必備步驟
      相關(guān)文章
      亚洲三级高清免费| 亚洲国产无套无码av电影| 亚洲AV成人片色在线观看高潮 | 妇女自拍偷自拍亚洲精品| 亚洲乱码国产乱码精华| 亚洲国产成人99精品激情在线| 亚洲小视频在线观看| 亚洲AV人无码综合在线观看| 亚洲AV无码日韩AV无码导航| 亚洲av无码国产精品色午夜字幕| 亚洲AV无码久久寂寞少妇| 亚洲AV无码乱码国产麻豆穿越| 亚洲成年人在线观看| 久久亚洲精品成人AV| 亚洲国产成人久久| 亚洲成a人片在线观看精品| 亚洲午夜精品久久久久久app | 亚洲欧洲日产国码高潮αv| 亚洲性日韩精品国产一区二区| 91麻豆国产自产在线观看亚洲| 亚洲中文字幕久久精品无码喷水 | 亚洲精品无码成人片久久| 亚洲AV无码一区东京热久久| 亚洲精品免费视频| 亚洲白色白色永久观看| 亚洲w码欧洲s码免费| 亚洲日本va一区二区三区| 在线观看亚洲电影| 国产自偷亚洲精品页65页| 亚洲AV成人一区二区三区AV| 亚洲福利一区二区精品秒拍| 亚洲婷婷第一狠人综合精品| 亚洲αⅴ无码乱码在线观看性色| 亚洲?v无码国产在丝袜线观看| 亚洲免费无码在线| 久久亚洲一区二区| 亚洲国产av一区二区三区丶| 亚洲日韩精品无码AV海量| www.亚洲精品| 亚洲国产精品无码久久SM| 亚洲欧洲日韩国产|