為了使業(yè)務(wù)能安然度過(guò)高峰(如節(jié)日活動(dòng)、電商大促等),企業(yè)一般會(huì)按照高峰的流量預(yù)估準(zhǔn)備資源。同時(shí)對(duì)于這種業(yè)務(wù)對(duì)擴(kuò)容延遲非常敏感的情況,Kubernetes 社區(qū)的 Cluster Autoscaler 自動(dòng)擴(kuò)容節(jié)點(diǎn)方案存在 Pod 啟動(dòng)過(guò)慢的問(wèn)題,因此推薦企業(yè)選擇具備快速?gòu)棾鲇?jì)算資源與快速啟用業(yè)務(wù)應(yīng)用的云產(chǎn)品,比如火山引擎彈性容器實(shí)例 VCI,可滿(mǎn)足分鐘級(jí)數(shù)萬(wàn)核 vCPU 計(jì)算資源的需求。

相比之下,離線任務(wù)是指在沒(méi)有實(shí)時(shí)數(shù)據(jù)輸入的情況下,對(duì)大量數(shù)據(jù)進(jìn)行批量處理的任務(wù),它們通常沒(méi)有時(shí)間限制,可以在后臺(tái)運(yùn)行,例如大數(shù)據(jù)分析、機(jī)器學(xué)習(xí)的數(shù)據(jù)標(biāo)注和訓(xùn)練作業(yè)、科學(xué)計(jì)算、日志分析、數(shù)據(jù)清洗等。這些任務(wù)通常涉及到大量的數(shù)據(jù)處理和計(jì)算,因此需要強(qiáng)大的計(jì)算能力和存儲(chǔ)能力來(lái)支持。

仍以字節(jié)跳動(dòng)為例,截至 2023 年,字節(jié)跳動(dòng)離線訓(xùn)練的框架拓?fù)淇梢赃_(dá)到每天 10000 任務(wù)的量級(jí),有約 160 萬(wàn)核的離線訓(xùn)練作業(yè)被部署在 Kubernetes 集群上(占總訓(xùn)練量的 40%)。下圖展示了某業(yè)務(wù)團(tuán)隊(duì)離線任務(wù)的 CPU 使用率情況,可以看到,這些任務(wù)的運(yùn)行時(shí)間較短,在幾十分鐘左右,雖然在凌晨等在線服務(wù)的流量波谷時(shí)段有運(yùn)行高峰,但整體在時(shí)間上還是呈現(xiàn)不確定性。

對(duì)于這類(lèi)任務(wù),提升資源利用率的難點(diǎn)在于如何提前預(yù)備不定時(shí)進(jìn)行的離線任務(wù)所需要的資源,同時(shí)在任務(wù)運(yùn)行結(jié)束后快速回收資源,即提升整體裝箱率(Bin Packing Efficiency)——通過(guò)在集群中有效地分配資源,以最小化運(yùn)行工作負(fù)載所需的節(jié)點(diǎn)數(shù)量。

VCI 助力離線任務(wù)場(chǎng)景降本增效

彈性容器實(shí)例 VCI 是火山引擎云原生團(tuán)隊(duì)基于字節(jié)跳動(dòng)內(nèi)部深度實(shí)踐,推出的一種無(wú)服務(wù)器 Serverless 和容器化的計(jì)算服務(wù),通過(guò) Virtual Kubelet 技術(shù)與火山引擎容器服務(wù) VKE 無(wú)縫結(jié)合,提供彈性計(jì)算和 Kubernetes 編排能力。它能通過(guò)免運(yùn)維、免規(guī)劃以及按量付費(fèi)的方式,幫助用戶(hù)降低使用成本。

關(guān)鍵概念:裝箱率

面對(duì)離線業(yè)務(wù)場(chǎng)景,彈性容器實(shí)例 VCI 具有諸多天然優(yōu)勢(shì),其中最關(guān)鍵的是彈性容器所帶來(lái)的資源成本優(yōu)勢(shì)。

在分析 Kubernetes 架構(gòu)中離線業(yè)務(wù)的資源成本時(shí),理解裝箱率這一概念是至關(guān)重要的。通常而言,裝箱率指的是在給定資源容量限制下,實(shí)際使用的資源量占總可用資源量的比例,是衡量資源利用率的重要指標(biāo)。

在 Kubernetes 集群中,裝箱率往往用于衡量工作負(fù)載(容器化應(yīng)用)實(shí)際占用的計(jì)算資源(CPU、內(nèi)存等)與節(jié)點(diǎn)總計(jì)算資源容量之間的比率,可以通過(guò)將節(jié)點(diǎn)上所有 Pod 的資源請(qǐng)求(Requests)之和除以節(jié)點(diǎn)的總資源容量來(lái)計(jì)算。高裝箱率意味著高資源利用率,即表示在可用資源內(nèi),大部分資源都被有效使用,閑置的資源較少,進(jìn)一步而言,支撐相同離線任務(wù)所需投入的資源成本也會(huì)更少。

離線任務(wù)場(chǎng)景下的計(jì)算資源浪費(fèi)

在介紹彈性容器 VCI 如何支撐離線業(yè)務(wù)場(chǎng)景降低資源成本之前,我們首先簡(jiǎn)單討論在傳統(tǒng)以云服務(wù)器節(jié)點(diǎn)為中心的 Kubernetes 集群架構(gòu)中運(yùn)行容器化的離線業(yè)務(wù)應(yīng)用時(shí)造成計(jì)算資源浪費(fèi)的幾個(gè)關(guān)鍵因素:

必須為系統(tǒng)預(yù)留資源:Kubernetes 為了保證云服務(wù)器節(jié)點(diǎn)具有充足的資源支撐系統(tǒng)進(jìn)程與核心組件的穩(wěn)定運(yùn)行,需要在每個(gè)節(jié)點(diǎn)上進(jìn)行計(jì)算資源預(yù)留,即便預(yù)留資源在大多數(shù)時(shí)間內(nèi)實(shí)際上處于閑置狀態(tài),也無(wú)法被普通工作負(fù)載使用,這將導(dǎo)致集群整體裝箱率的下降,特別是在資源緊張的環(huán)境中,未利用的預(yù)留資源可能會(huì)成為瓶頸。此外,云服務(wù)器規(guī)格越大,所需要預(yù)留的計(jì)算資源也會(huì)越多,造成的資源閑置浪費(fèi)情況也越嚴(yán)重。

離線任務(wù)難以合理利用節(jié)點(diǎn)資源:這個(gè)問(wèn)題有以下三種常規(guī)場(chǎng)景:

● 首先,不同任務(wù)對(duì)于計(jì)算資源(CPU、內(nèi)存等)的需求差異較大,而受限于云服務(wù)器較為固定的 CPU、內(nèi)存規(guī)格情況,難以實(shí)現(xiàn)“完美匹配”,從而極為可能導(dǎo)致某些計(jì)算資源在特定云服務(wù)器節(jié)點(diǎn)上過(guò)剩,但卻無(wú)法被其他任務(wù)利用,從而導(dǎo)致整體資源裝箱率較低;

● 其次,不同離線任務(wù)運(yùn)行的啟動(dòng)和結(jié)束時(shí)間不同,極有可能導(dǎo)致云服務(wù)器產(chǎn)生資源“碎片”,即小塊未被利用的資源分布在不同的云服務(wù)器上,往往難以被新的離線任務(wù)有效利用;

● 最后,某些業(yè)務(wù)場(chǎng)景下,離線任務(wù)之間存在依賴(lài)關(guān)系或者優(yōu)先級(jí)差異,這意味著某些任務(wù)往往需要等待其他任務(wù)完成之后才能啟動(dòng),這種依賴(lài)性進(jìn)一步加劇了云服務(wù)器資源利用率的挑戰(zhàn)。

需要為任務(wù)執(zhí)行周期之外的“時(shí)間”買(mǎi)單:云資源的成本開(kāi)銷(xiāo)一般可以通過(guò)“所需資源量 * 使用時(shí)間”進(jìn)行衡量,在認(rèn)為所需資源量不變的情況下,盡量壓縮資源的使用時(shí)間,也可以有效降低成本。對(duì)于離線業(yè)務(wù)而言,真正需要計(jì)算資源其實(shí)是任務(wù)從啟動(dòng)到執(zhí)行結(jié)束的這段時(shí)間,這段時(shí)間也稱(chēng)為“業(yè)務(wù)實(shí)際運(yùn)行時(shí)間”,理想的情況是只為所用計(jì)算資源的“業(yè)務(wù)實(shí)際運(yùn)行時(shí)間”付費(fèi),而在以云服務(wù)器節(jié)點(diǎn)為中心的 Kubernetes 集群架構(gòu)中,一方面需要額外為離線任務(wù)的前置部署階段和后置停止階段付費(fèi);另一方面還可能因?yàn)榧汗?jié)點(diǎn)彈性伸縮策略所導(dǎo)致的頻繁對(duì)云服務(wù)器初始化所花費(fèi)的時(shí)間買(mǎi)單。

具體案例

接下來(lái)我們以一個(gè)簡(jiǎn)化的離線任務(wù)場(chǎng)景為例,通過(guò)對(duì)比常規(guī)云服務(wù)器節(jié)點(diǎn)和彈性容器實(shí)例的資源使用情況,幫助大家更加直觀地理解彈性容器 VCI 如何降低資源使用成本:

假設(shè) Kubernetes 集群中可使用的云服務(wù)器節(jié)點(diǎn)規(guī)格均為 4C-8Gi,3 個(gè)離線任務(wù)對(duì)應(yīng)的 Pod 資源需求均為 2C-4Gi,而且在不同的時(shí)間點(diǎn)(第 0 秒和第 10 秒)調(diào)度到集群中開(kāi)始執(zhí)行,以此來(lái)分析資源裝箱率情況。

首先,根據(jù)節(jié)點(diǎn)預(yù)留資源策略(www.volcengine.com/docs/6460/144563),可明確計(jì)算出每個(gè) 4C-8Gi 規(guī)格的云服務(wù)所需要預(yù)留的資源為 0.1C-1.8Gi(此處未包括 Daemonset 類(lèi)型系統(tǒng)組件的資源占用。實(shí)際上,系統(tǒng)組件的資源需求取決于集群中安裝的具體組件,通常每個(gè)節(jié)點(diǎn)需要至少 0.5C-0.5Gi 資源用于系統(tǒng)組件),因此每個(gè)節(jié)點(diǎn)均只能承載單個(gè) 2C-4Gi 資源需求的 Pod,剩余 1.9C-2.2Gi 資源處于閑置浪費(fèi)狀態(tài)。這意味著對(duì)于每個(gè)云服務(wù)器節(jié)點(diǎn)而言,其裝箱率僅為 50%,值得一提的是真實(shí)場(chǎng)景下 Kubernetes 集群中云服務(wù)器節(jié)點(diǎn)的裝箱率也約為 50%。

其次,在時(shí)間軸的前 10 秒,集群中運(yùn)行了 2 臺(tái) 4C-8Gi 的云服務(wù)器,共有 3.8C-4.4Gi 的閑置資源(2 * 1.9C-2.2Gi)。當(dāng)來(lái)到時(shí)間軸的第 10 秒,同樣需要 2C-4Gi 資源的 Pod 3 開(kāi)始執(zhí)行,此時(shí)即便集群中的閑置資源總量足夠,卻也因?yàn)榉謱儆趦蓚€(gè)“碎片”而無(wú)法支撐 Pod 3 的運(yùn)行,只能再啟動(dòng)一個(gè)新的云服務(wù)器節(jié)點(diǎn),從而使得閑置浪費(fèi)資源進(jìn)一步增多??傮w而言,在暫不考慮節(jié)點(diǎn)初始化時(shí)間等因素的情況下,運(yùn)行 60C*秒-120Gi*秒的離線任務(wù),卻需要為此消耗 120C*秒-240Gi*秒的云服務(wù)器計(jì)算資源。

而如果使用彈性容器實(shí)例 VCI 運(yùn)行上述任務(wù),用戶(hù)只需為實(shí)際運(yùn)行中的業(yè)務(wù)所占用的計(jì)算資源付費(fèi),Pod 需要何種規(guī)格的計(jì)算資源只需要?jiǎng)?chuàng)建對(duì)應(yīng)規(guī)格的彈性容器實(shí)例 VCI 即可,裝箱率可達(dá)到 100%,運(yùn)行 60C*秒-120Gi*秒的離線任務(wù),也只需要 60C*秒-120Gi*秒的彈性容器計(jì)算資源即可,無(wú)任何資源閑置浪費(fèi)。

從下圖的實(shí)際生產(chǎn)案例監(jiān)控曲線中,也能夠非常直觀地看出彈性容器實(shí)例 VCI 的高裝箱率所帶來(lái)的資源成本節(jié)省優(yōu)勢(shì)。

使用云服務(wù)器:存在大量閑置資源
使用 VCI:完全按需使用

面對(duì)離線業(yè)務(wù)場(chǎng)景,彈性容器實(shí)例 VCI 除了具備資源成本優(yōu)勢(shì)之外,也能幫助客戶(hù)進(jìn)一步降低企業(yè)云上架構(gòu)的計(jì)算資源運(yùn)維成本。彈性容器 VCI 通過(guò)與容器服務(wù) VKE 無(wú)縫集成,同時(shí)實(shí)現(xiàn)了 Kubernetes 集群控制平面全托管和數(shù)據(jù)平面的 Serverless 化全托管、免運(yùn)維、安全隔離,極大地降低用戶(hù)在 Kubernetes 基礎(chǔ)設(shè)施上的運(yùn)維成本,并且省去了容量規(guī)劃的復(fù)雜性,幫助用戶(hù)聚焦于自己的業(yè)務(wù)應(yīng)用。

● 接入成本:彈性容器 VCI 兼容 Kubernetes 的使用方式,用戶(hù)只需適配 Kubernetes 就可以達(dá)到一次開(kāi)發(fā),到處運(yùn)行的效果。此外,借助于 VCI Profile 配置文件等能力可以支持在業(yè)務(wù)無(wú)侵入的情況下使用彈性容器作為算力資源(www.volcengine.com/docs/6460/1209385);

● 運(yùn)維成本:用戶(hù)無(wú)需管理特定的資源,彈性容器 VCI 提供安全可靠的容器計(jì)算資源,用戶(hù)無(wú)需關(guān)注系統(tǒng)的升級(jí)、安全補(bǔ)丁以及故障恢復(fù)等各種問(wèn)題;

● 算力成本:彈性容器 VCI 基于火山引擎海量計(jì)算資源,讓用戶(hù)無(wú)需為沒(méi)有使用的資源付費(fèi),例如為了保障資源供給而提前購(gòu)買(mǎi)資源、為少量任務(wù)而購(gòu)買(mǎi)過(guò)量的資源等。

實(shí)際客戶(hù)落地案例

某客戶(hù)是一家以智能化、自動(dòng)化驅(qū)動(dòng)的藥物研發(fā)科技公司,為全球生物醫(yī)藥企業(yè)提供藥物發(fā)現(xiàn)一體化解決方案。作為 AI 制藥領(lǐng)域的龍頭企業(yè),該客戶(hù)使用了多云架構(gòu),單個(gè)鏡像超過(guò) 20G,經(jīng)常需要同時(shí)拉起超過(guò) 500 個(gè)節(jié)點(diǎn),所以其對(duì)算力的性?xún)r(jià)比要求極高。

火山引擎云原生團(tuán)隊(duì)和客戶(hù)合作構(gòu)建的云原生基礎(chǔ)設(shè)施,通過(guò) VCI 極速?gòu)椥陨炜s和超高資源利用率的特性,實(shí)現(xiàn)秒級(jí)拉起萬(wàn)核 CPU 資源,保障高峰期客戶(hù)的算力需要;通過(guò)鏡像預(yù)熱、鏡像緩存、P2P 傳輸?shù)裙δ?,?shí)現(xiàn)超大鏡像秒級(jí)加載,實(shí)現(xiàn)了數(shù)千 Pod 分鐘級(jí)自動(dòng)擴(kuò)縮容,充分助力 AI 提速;通過(guò) VCI+VKE 資源成本控制,幫助客戶(hù)將集群裝箱率提升到 95% 以上。

結(jié)語(yǔ)

面向未來(lái),上云仍是全球范圍內(nèi)的廣泛趨勢(shì),根據(jù) Gartner 的研究報(bào)告,企業(yè)在公共云上的 IT 支出將超過(guò)傳統(tǒng) IT 支出,到 2025 年,51% 的 IT 預(yù)算將用于基于云的系統(tǒng)開(kāi)發(fā)和運(yùn)營(yíng)。

通過(guò)彈性容器實(shí)例 VCI,火山引擎云原生團(tuán)隊(duì)希望能幫助更多企業(yè)解決上好云、用好云的難題,提供基礎(chǔ)設(shè)施免運(yùn)維、計(jì)算資源免規(guī)劃、極致彈性的 Serverless 容器化產(chǎn)品與服務(wù),讓云資源真正為企業(yè)業(yè)務(wù)帶來(lái)效益。

分享到

xiesc

相關(guān)推薦