自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文讀懂為什么 Kubernetes 中需要 DRA (動態(tài)資源分配)機(jī)制

云計算 人工智能
今天我們來聊一下人工智能應(yīng)用場景 - 基于 Traefik AI 網(wǎng)關(guān)構(gòu)建高效、靈活的微服務(wù)架構(gòu)。

在現(xiàn)代云原生架構(gòu)中,Kubernetes 已經(jīng)成為企業(yè)動態(tài)資源調(diào)度的核心技術(shù)。隨著業(yè)務(wù)需求的復(fù)雜性和多樣性日益增加,如何高效地在 Kubernetes 集群中分配和調(diào)整資源,成為提升系統(tǒng)彈性和利用率的關(guān)鍵課題。

動態(tài)資源調(diào)度通過智能化地分配 CPU、內(nèi)存、GPU 等關(guān)鍵資源,不僅能夠滿足不同負(fù)載的性能需求,還能降低資源浪費,提高基礎(chǔ)設(shè)施的投資回報率。本篇文章將圍繞 Kubernetes 動態(tài)資源調(diào)度的核心原理、關(guān)鍵技術(shù)及最佳實踐展開,從調(diào)度框架、擴(kuò)展機(jī)制到實際應(yīng)用場景,全面解析如何在云原生環(huán)境中實現(xiàn)高效、靈活的資源管理,為讀者提供深刻的技術(shù)洞見和實操指導(dǎo)。

一、如何理解 Kubernetes 中動態(tài)資源?

要理解 Kubernetes 中的“動態(tài)資源”,需要區(qū)分傳統(tǒng)資源管理方式和 Kubernetes 的創(chuàng)新之處。傳統(tǒng)方式通常是靜態(tài)分配資源,而 Kubernetes 引入了多種機(jī)制來實現(xiàn)資源的動態(tài)管理,從而更好地適應(yīng)不斷變化的應(yīng)用程序需求。

眾所周知,在傳統(tǒng)的虛擬化或裸金屬環(huán)境中,資源分配通常是靜態(tài)的。通常情況下,管理員預(yù)先為應(yīng)用程序分配固定的 CPU、內(nèi)存、存儲等資源,這些資源在應(yīng)用程序運行期間保持不變。這種方式存在以下局限性:

1、資源浪費: 如果應(yīng)用程序的負(fù)載波動較大,靜態(tài)分配的資源可能在低峰時閑置,造成浪費。

2、彈性不足: 當(dāng)應(yīng)用程序需要更多資源時,靜態(tài)分配無法快速響應(yīng),可能導(dǎo)致性能下降甚至服務(wù)中斷。

3、管理復(fù)雜: 對于大規(guī)模部署和復(fù)雜的應(yīng)用程序,靜態(tài)資源管理變得非常繁瑣。

為了解決上述痛點以及面對不斷新穎的業(yè)務(wù)需求場景,動態(tài)資源的概念便應(yīng)運而生。

其實,圍繞著 Kubernetes 歷史發(fā)展,其已經(jīng)通過多種機(jī)制實現(xiàn)了資源的動態(tài)管理,主要包括以下幾個方面:

1、資源請求和限制(Requests and Limits): 在 Pod 規(guī)范中,可以定義容器的資源請求(Requests)和限制(Limits)。Requests 指定容器運行所需的最小資源量,Kubernetes 調(diào)度器會根據(jù) Requests 來選擇合適的節(jié)點。Limits 指定容器可以使用的最大資源量,防止容器過度使用資源影響其他應(yīng)用。雖然 Requests 和 Limits 是靜態(tài)配置的,但它們?yōu)楹罄m(xù)的動態(tài)調(diào)整奠定了基礎(chǔ)。

2、Horizontal Pod Autoscaler (HPA): HPA 可以根據(jù) CPU 利用率、內(nèi)存使用率或其他自定義指標(biāo)自動調(diào)整 Pod 的副本數(shù)量。當(dāng)指標(biāo)超過預(yù)設(shè)的閾值時,HPA 會自動增加 Pod 副本,反之則減少。這實現(xiàn)了應(yīng)用程序的水平彈性伸縮,根據(jù)實際負(fù)載動態(tài)調(diào)整資源使用。

3、Vertical Pod Autoscaler (VPA): VPA 可以自動調(diào)整 Pod 中容器的資源請求(Requests)和限制(Limits)。VPA 監(jiān)控容器的資源使用情況,并根據(jù)歷史數(shù)據(jù)和實時負(fù)載推薦合適的資源配置。VPA 可以自動更新 Pod 的資源配置,或者提供建議供管理員手動調(diào)整。這實現(xiàn)了應(yīng)用程序的垂直彈性伸縮,根據(jù)實際需求動態(tài)調(diào)整單個 Pod 的資源分配。

 4、動態(tài)卷分配(Dynamic Volume Provisioning): Kubernetes 允許根據(jù)需要動態(tài)創(chuàng)建和分配持久卷。當(dāng) Pod 需要存儲時,可以動態(tài)地創(chuàng)建一個新的持久卷并將其掛載到 Pod 上。這避免了預(yù)先創(chuàng)建大量持久卷的麻煩,提高了存儲資源的利用率。

5、動態(tài)資源分配(DRA - Dynamic Resource Allocation): 這是 Kubernetes 較新的一個特性,旨在解決除 CPU、內(nèi)存和存儲之外的其他類型資源的動態(tài)分配問題,例如 GPU、FPGA 等硬件加速器。DRA 允許應(yīng)用程序以更精細(xì)的方式請求和使用這些特殊資源,并允許資源驅(qū)動程序根據(jù)實時需求進(jìn)行分配和管理。DRA 將持久卷 API 的概念推廣到通用資源的管理,提供了更靈活、更高效的資源分配機(jī)制。

本文主要圍繞“動態(tài)資源分配(DRA - Dynamic Resource Allocation)” 進(jìn)行展開描述。在詳細(xì)解析 DRA 之前,我們先了解一下 Device Plugin 概念,那么,什么是  Device Plugin 呢?

Kubernetes 的 Device Plugin 機(jī)制(源于 KEP-3573)是一項早期就引入 Kubernetes 的重要功能,旨在擴(kuò)展 Kubernetes 的資源管理能力,使其能夠支持除 CPU 和內(nèi)存之外的各種硬件資源,例如圖形處理器(GPU)、數(shù)據(jù)處理單元(DPU)、現(xiàn)場可編程門陣列(FPGA)以及非統(tǒng)一內(nèi)存訪問(NUMA)節(jié)點等。

Device Plugin 機(jī)制通過提供一個簡單而強(qiáng)大的接口——Device Plugin Interface,實現(xiàn)了對這些硬件資源的抽象和管理。通過實現(xiàn)這個接口,第三方供應(yīng)商或用戶可以開發(fā)自己的 Device Plugin,從而將特定的硬件資源集成到 Kubernetes 集群中。

從某種意義上而言,Device Plugin (設(shè)備插件)的引入極大擴(kuò)展了 Kubernetes 的能力,使其不僅局限于管理傳統(tǒng)的 CPU 和內(nèi)存資源,還能支持各種類型的特殊硬件資源。這對于依賴硬件加速的任務(wù)(如 AI 模型訓(xùn)練、數(shù)據(jù)科學(xué)計算和高性能網(wǎng)絡(luò)處理)具有重要意義。通過設(shè)備插件,用戶可以更高效地利用集群中的硬件資源,同時通過標(biāo)準(zhǔn)化的接口降低管理和集成的復(fù)雜性。

需要注意的是,Kubernetes 在不同版本中對動態(tài)資源分配的支持經(jīng)歷了多次迭代。從 Kubernetes v1.26 到 v1.31,DRA 的經(jīng)典實現(xiàn)以 Alpha 特性形式提供,但由于其局限性和不完善性,該實現(xiàn)已經(jīng)被廢棄。目前主流 Kubernetes 版本(從 v1.32 開始)引入了更現(xiàn)代化的動態(tài)資源分配方法,在設(shè)計上更加成熟和穩(wěn)定,并被廣泛應(yīng)用于生產(chǎn)環(huán)境。

二、如何在 Kubernetes 中使用 GPU 資源 ?

眾所周知,長期以來,在云計算領(lǐng)域,人們普遍認(rèn)為計算資源主要以中央處理器(CPU)為中心,應(yīng)用程序的開發(fā)和部署也大多圍繞 CPU 進(jìn)行。這種以 CPU 為中心的模式在過去很長一段時間內(nèi)有效地支撐了各種業(yè)務(wù)需求。然而,隨著人工智能、大數(shù)據(jù)分析、高性能計算等技術(shù)的蓬勃發(fā)展,以及新興業(yè)務(wù)模式的不斷涌現(xiàn),越來越多的應(yīng)用場景對計算能力提出了前所未有的高要求,需要遠(yuǎn)超傳統(tǒng) CPU 的強(qiáng)大算力才能有效支撐業(yè)務(wù)的持續(xù)發(fā)展和創(chuàng)新。

在傳統(tǒng)的虛擬化或裸金屬服務(wù)器環(huán)境中部署和承載這些高算力需求的業(yè)務(wù),往往會導(dǎo)致顯著的資源浪費。例如,為滿足峰值負(fù)載而配置的硬件資源,在業(yè)務(wù)低谷期會處于閑置狀態(tài),造成巨大的經(jīng)濟(jì)成本消耗。此外,傳統(tǒng)的部署方式在資源彈性伸縮和快速部署方面也存在諸多限制,難以滿足現(xiàn)代應(yīng)用快速變化的需求。

為了有效應(yīng)對這些挑戰(zhàn),實現(xiàn)降本增效的目標(biāo),越來越多的企業(yè)開始積極擁抱云原生技術(shù),探索如何在云原生生態(tài)系統(tǒng)中實現(xiàn)資源的動態(tài)承載。云原生技術(shù)以容器化、微服務(wù)和自動化等為核心,能夠更好地管理和調(diào)度各種計算資源,包括 CPU、GPU、FPGA 等異構(gòu)計算資源,從而實現(xiàn)資源的按需分配、彈性伸縮和高效利用,最大程度地降低成本并提高運營效率。

然而,在 Kubernetes 中部署 GPU 節(jié)點池,即使是初始階段,也需要一些特定于供應(yīng)商的軟件組件,其中最關(guān)鍵的包括 Kubernetes 設(shè)備插件和 GPU 驅(qū)動程序。安裝 GPU 驅(qū)動程序是必不可少的,這是毋庸置疑的。然而,我們?yōu)槭裁催€需要安裝特定的設(shè)備插件呢?

原因在于 Kubernetes 平臺本身并不原生支持諸如 GPU 這類特殊硬件資源。設(shè)備插件的關(guān)鍵作用就在于發(fā)現(xiàn)并向應(yīng)用程序暴露這些資源。其工作機(jī)制是:設(shè)備插件通過設(shè)備插件 API 接收可分配資源列表,并將其傳遞給 kubelet,從而對外呈現(xiàn)節(jié)點上的 GPU 數(shù)量。kubelet 負(fù)責(zé)持續(xù)跟蹤這些資源,并將節(jié)點上各種資源類型的數(shù)量匯報給 API Server,以便 kube-scheduler 在進(jìn)行 Pod 調(diào)度決策時能夠充分利用這些信息。

然而,這種基于設(shè)備插件的方案存在一些固有的局限性:

1、資源選擇的精細(xì)程度有限: 只能通過一些節(jié)點屬性和標(biāo)簽來對節(jié)點上的資源類型進(jìn)行相對粗略的選擇,無法進(jìn)行更精細(xì)的控制。

2、缺乏有效的調(diào)度反饋機(jī)制: 設(shè)備插件和 kube-scheduler 之間缺乏有效的反饋回路。這意味著,即使 kube-scheduler 為一個待調(diào)度的 Pod 找到了看似合適的節(jié)點,設(shè)備插件也無法根據(jù)節(jié)點的就緒狀態(tài)等關(guān)鍵因素進(jìn)行進(jìn)一步的“校驗”,這可能導(dǎo)致 Pod 被錯誤地調(diào)度到尚未完全準(zhǔn)備好接收新資源的“未就緒”節(jié)點上。

為了有效克服上述局限性,Kubernetes 引入了動態(tài)資源分配(DRA)機(jī)制。DRA 的核心目標(biāo)是確保應(yīng)用程序能夠在恰當(dāng)?shù)臅r機(jī)獲得所需數(shù)量的資源?!皠討B(tài)資源分配 API”將持久卷 API 的設(shè)計理念擴(kuò)展到通用資源的管理,例如 GPU 等。它支持基于實時需求和預(yù)設(shè)配置進(jìn)行動態(tài)的資源調(diào)整,從而最大程度地減少人工干預(yù)的需求。

三、如何理解 DRA(Dynamic Resource Allocation) ?

DRA 即全稱為(Dynamic Resource Allocation,動態(tài)資源分配) 是 Kubernetes 提供的一項至關(guān)重要的機(jī)制,用于實現(xiàn) Pod 和 Pod 內(nèi)容器之間資源的高效請求、管理和共享。

DRA 的核心目標(biāo)是通過靈活且統(tǒng)一的方式管理復(fù)雜的異構(gòu)資源,使 Kubernetes 能夠適配現(xiàn)代云原生場景中日益多樣化的需求。在本質(zhì)上,DRA 是對通用資源持久卷(Generic Resource Persistent Volume,PV)API 的泛化,其設(shè)計理念在于提供更強(qiáng)的靈活性,特別是在涉及 GPU 等特殊硬件設(shè)備時,DRA 的優(yōu)勢尤為明顯。

通常而言,DRA 核心特性與工作機(jī)制主要體現(xiàn)在如下幾點,具體可參考:

1. 對通用資源持久卷 API 的泛化

傳統(tǒng)的資源分配方式通常只涵蓋 CPU 和內(nèi)存等通用資源,而 DRA 的出現(xiàn)則使 Kubernetes 能夠支持更廣泛的資源類型。這種泛化的實現(xiàn),使得 DRA 不僅限于硬件設(shè)備的管理,還能夠擴(kuò)展到其他復(fù)雜資源類型,從而滿足不同場景下的動態(tài)需求。例如,在深度學(xué)習(xí)場景中,用戶不僅可以請求 GPU 資源,還可以指定具體的顯存大小或計算核心數(shù),以便更精確地滿足任務(wù)需求。

2. 第三方資源驅(qū)動程序的關(guān)鍵作用

DRA 的高效運行離不開第三方資源驅(qū)動程序的支持。這些驅(qū)動程序主要負(fù)責(zé)以下任務(wù):

資源發(fā)現(xiàn):檢測和報告節(jié)點上的可用資源狀態(tài),例如 GPU 的數(shù)量、型號和當(dāng)前負(fù)載情況。

資源分配:根據(jù)用戶的具體需求分配資源,并將資源綁定到目標(biāo) Pod。

資源監(jiān)控:在資源生命周期內(nèi)持續(xù)跟蹤資源的使用狀態(tài),以確保任務(wù)的順利完成并避免資源沖突。

通過第三方驅(qū)動程序,DRA 能夠?qū)崿F(xiàn)對資源的細(xì)粒度控制。例如,在 AI 模型訓(xùn)練任務(wù)中,用戶可以通過自定義驅(qū)動程序參數(shù)指定 GPU 顯存分配的上限,以適應(yīng)特定模型對顯存的需求,從而最大化計算性能和資源利用率。

3. 參數(shù)化與結(jié)構(gòu)化的資源管理

DRA 在 Kubernetes 1.30 中引入了一種基于結(jié)構(gòu)化參數(shù)的機(jī)制。這一機(jī)制允許用戶為不同類型的資源定義靈活的需求和初始化參數(shù)。例如:

GPU 配置:可以指定顯存大小、計算核心數(shù)、CUDA 支持版本等。

FPGA 配置:可以定義板卡型號、邏輯單元使用量或頻率等。

網(wǎng)絡(luò)設(shè)備:支持指定帶寬、吞吐量或 RDMA 能力。

基于這種參數(shù)化設(shè)計為用戶提供了高度靈活的資源定制能力,同時也為復(fù)雜資源的動態(tài)管理奠定了基礎(chǔ)。

作為 Kubernetes 動態(tài)資源管理中的關(guān)鍵機(jī)制之一,動態(tài)資源分配 (DRA) 目標(biāo)在于為特殊資源的高效利用提供統(tǒng)一、靈活的管理方式。DRA 通過將資源的請求、分配、調(diào)度和監(jiān)控模塊化和參數(shù)化,使 Kubernetes 能夠以標(biāo)準(zhǔn)化的方式支持各種異構(gòu)硬件資源,從而滿足現(xiàn)代云原生應(yīng)用對高性能計算和精細(xì)化資源管理的需求。

責(zé)任編輯:華軒 來源: 架構(gòu)驛站
相關(guān)推薦

2025-01-03 17:07:23

2024-06-24 08:05:00

人工智能AI

2024-12-16 07:41:35

2024-01-03 08:54:17

Kubernetes策略工具

2022-05-12 08:01:18

KubernetesDocker容器

2021-04-24 09:02:36

Linux 內(nèi)存分配

2022-10-08 06:38:01

元宇宙NFT加密貨幣

2023-06-26 16:51:49

數(shù)字孿生數(shù)字技術(shù)

2021-10-18 14:30:55

物聯(lián)網(wǎng)IOT

2021-02-26 05:24:35

Java垃圾回收

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2023-05-11 15:24:12

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動架構(gòu)數(shù)據(jù)

2020-06-03 08:19:00

Kubernetes

2018-09-05 15:51:25

Java自動拆裝箱

2023-03-08 11:54:00

NB-IoT智能管理
點贊
收藏

51CTO技術(shù)棧公眾號