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

老司機(jī)和你深聊Kubenertes 資源分配之 Request 和 Limit 解析

開發(fā) 開發(fā)工具
Kubernetes是一個(gè)容器集群管理平臺,Kubernetes需要統(tǒng)計(jì)整體平臺的資源使用情況,合理地將資源分配給容器使用,并且要保證容器生命周期內(nèi)有足夠的資源來保證其運(yùn)行。

 [[200762]]

Kubernetes是一個(gè)容器集群管理平臺,Kubernetes需要統(tǒng)計(jì)整體平臺的資源使用情況,合理地將資源分配給容器使用,并且要保證容器生命周期內(nèi)有足夠的資源來保證其運(yùn)行。 同時(shí),如果資源發(fā)放是獨(dú)占的,即資源已發(fā)放給了個(gè)容器,同樣的資源不會發(fā)放給另外一個(gè)容器,對于空閑的容器來說占用著沒有使用的資源比如CPU是非常浪費(fèi)的,Kubernetes需要考慮如何在優(yōu)先度和公平性的前提下提高資源的利用率。為了實(shí)現(xiàn)資源被有效調(diào)度和分配同時(shí)提高資源的利用率,Kubernetes采用Request和Limit兩種限制類型來對資源進(jìn)行分配。

一、kubenerters中Request和Limit限制方式說明

Request: 容器使用的最小資源需求,作為容器調(diào)度時(shí)資源分配的判斷依賴。只有當(dāng)節(jié)點(diǎn)上可分配資源量>=容器資源請求數(shù)時(shí)才允許將容器調(diào)度到該節(jié)點(diǎn)。但Request參數(shù)不限制容器的***可使用資源。

Limit: 容器能使用資源的資源的***值,設(shè)置為0表示使用資源無上限。

Request能夠保證Pod有足夠的資源來運(yùn)行,而Limit則是防止某個(gè)Pod***制地使用資源,導(dǎo)致其他Pod崩潰。兩者之間必須滿足關(guān)系: 0<=Request<=Limit<=Infinity (如果Limit為0表示不對資源進(jìn)行限制,這時(shí)可以小于Request)

在騰訊云容器服務(wù)(CCS)中,可以在創(chuàng)建服務(wù),在容器編輯欄中點(diǎn)擊顯示高級設(shè)置,在高級設(shè)置中進(jìn)行CPU和Memory的Request和Limit設(shè)置。目前CPU支持設(shè)置Request和Limit,用戶可以根據(jù)業(yè)務(wù)的特點(diǎn)動(dòng)態(tài)的調(diào)整Request和Limit的比例關(guān)系。Memory目前只支持設(shè)置Request,Limit必須強(qiáng)制等于Request,這樣確保容器不會因?yàn)閮?nèi)存的使用量超過了Request但沒有超過Limit的情況下被意外的Kill掉。

二、kubenerters中Request和Limit使用示例

一個(gè)簡單的示例說明Request和Limit的作用,測試集群包括一個(gè)4U4G的節(jié)點(diǎn)。已經(jīng)部署的兩個(gè)Pod(1,2),每個(gè)Pod的資源設(shè)置為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 2U, 1G,1G).

節(jié)點(diǎn)上CPU和內(nèi)存的資源使用情況如下圖所示:

已經(jīng)分配的CPU資源為:1U(分配Pod1)+1U(分配Pod2)=2U,剩余可以分配的CPU資源為2U

已經(jīng)分配的內(nèi)存資源為:1G(分配Pod1)+1G(分配Pod2)=2G,剩余可以分配的內(nèi)存資源為2G

所以該節(jié)點(diǎn)可以再部署一個(gè)(CPU Requst, Memory Requst)=(2U,2G)的Pod部署,或者部署2個(gè)(CPU Requst, Memory Requst)=(1U,1G)的Pod部署

在資源限制方面,每個(gè)Pod1和Pod2使用資源的上限為(2U,1G),即在資源空閑的情況下,Pod使用CPU的量***能達(dá)到2U,使用內(nèi)存的***量為1G。從CPU資源的角度,對于資源使用上線為2U的Pod,通過設(shè)置Request為1U,實(shí)現(xiàn)了2倍數(shù)量的Pod的部署,提高了資源的使用效率。

另外一個(gè)復(fù)雜一點(diǎn)的例子來進(jìn)一步說明Request和Limit的作用,主要說明Request和Limit都為0的Pod對提高資源使用率的作用。測試集群仍然包含有一個(gè)4U4G的Pod。集群中已經(jīng)部署了四個(gè)Pod(1~4),每個(gè)Pod的資源設(shè)置為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 2U, 512M,512M)。

此時(shí)節(jié)點(diǎn)上CPU和內(nèi)存的資源使用情況如下圖所示:

此時(shí)按照Request的需求,已經(jīng)沒有可以供分配的CPU資源。但由于Pod1~4業(yè)務(wù)負(fù)載比較低,造成節(jié)點(diǎn)上CPU使用率較低,造成了資源的浪費(fèi)。這的時(shí)候可以通過將Request設(shè)置為0來實(shí)現(xiàn)對資源使用率的進(jìn)一步提高。在此節(jié)點(diǎn)上部署4個(gè)資源限制為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (0U, 0U, 512M,512M)。資源的使用情況如下圖所示:

Pod(5~8)能夠在Pod(1~4)空閑時(shí),使用節(jié)點(diǎn)上剩余的CPU資源,從而進(jìn)一步提高資源的使用率。

三、kubenerters中資源的搶占

Kubernetes中資源通過Request和Limit的設(shè)置,能夠?qū)崿F(xiàn)容器對資源的更高效的使用。在如果多個(gè)容器同時(shí)對資源進(jìn)行充分利用,資源使用盡量的接近Limit。這個(gè)時(shí)候Node節(jié)點(diǎn)上的資源總量要小于所有Pod中Limit的總會,就會發(fā)生資源搶占。

對于資源搶占的情況,Kubernetes根據(jù)資源能不能進(jìn)行伸縮進(jìn)行分類,分為可壓縮資源和不可以壓縮資源。CPU資源--是現(xiàn)在支持的一種可壓縮資源。內(nèi)存資源和磁盤資源為現(xiàn)在支持的不可壓縮資源。

可壓縮資源的搶占策略---按照Requst的比值進(jìn)行分配

例如在示例一種,假設(shè)在部署了Pod(1,2)的基礎(chǔ)上,又部署了資源限制和Pod1相同的兩個(gè)容器Pod(3,4)。這個(gè)時(shí)候,節(jié)點(diǎn)上的資源模型為。

假設(shè)四個(gè)Pod同時(shí)負(fù)載變高,CPU使用量超過1U,這個(gè)時(shí)候每個(gè)Pod將會按照各自的Request設(shè)置按比例分占CPU調(diào)度的時(shí)間片。在示例中,由于4個(gè)Pod設(shè)置的Request都為1U,發(fā)生資源搶占時(shí),每個(gè)Pod分到的CPU時(shí)間片為1U/(1U×4),實(shí)際占用的CPU核數(shù)為1U。在搶占發(fā)生時(shí),Limit的值對CPU時(shí)間片的分配為影響,在本例中如果條件容器Limit值的設(shè)置,搶占情況下CPU分配的比例保持不變。

不可壓縮資源的搶占策略---按照優(yōu)先級的不同,進(jìn)行Pod的驅(qū)逐

對于不可壓縮資源,如果發(fā)生資源搶占,則會按照優(yōu)先級的高低進(jìn)行Pod的驅(qū)逐。驅(qū)逐的策略為: 優(yōu)先驅(qū)逐Request=Limit=0的Pod,其次驅(qū)逐0<Request<Limit<Infinity (Limit為0的情況也包括在內(nèi))。 0<Request==Limit的Pod的會被保留,除非出現(xiàn)刪除其他Pod后,節(jié)點(diǎn)上剩余資源仍然沒有達(dá)到Kubernetes需要的剩余資源的需求。

由于對于不可壓縮資源,發(fā)生搶占的情況會出Pod被意外Kill掉的情況,所以建議對于不可以壓縮資源(Memory,Disk)的設(shè)置成0<Request==Limit。

針對內(nèi)存搶占,本文進(jìn)行了一次小的測試,示例中依次部署了Pod(1~3)單個(gè)Pod。節(jié)點(diǎn)中資源的示例圖為:

步驟1: 部署Pod1,資源參數(shù)為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (2U, 2U, 2G,2G),此時(shí)Pod1中進(jìn)程使用1.9G內(nèi)存,Pod1運(yùn)行依然正常。

步驟2: 部署Pod2,資源參數(shù)為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 1G,2G),此時(shí)Pod2中進(jìn)程使用0.9G內(nèi)存,程序運(yùn)行正常。超過1G,小于2G時(shí)程序運(yùn)行正常,但超過2G程序異常。

步驟3: 部署Pod3,資源參數(shù)為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 0G,0)。此時(shí)保持Pod1中進(jìn)程使用內(nèi)存為1.9G,Pod2中內(nèi)存使用為0.9G,pod3搶占內(nèi)存,搶占內(nèi)存大小為2G。這時(shí),Pod3***會出現(xiàn)因內(nèi)存不足異常的情況。同時(shí)Pod2有時(shí)也會出現(xiàn)內(nèi)存不足異常的情況。但Pod1一直能夠正常運(yùn)行

步驟4:修改Pod2的參數(shù)為(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 1G,1G),仍然保持步驟3中資源的使用量。這時(shí)Pod3仍然***出現(xiàn)內(nèi)存不足而異常的情況,但Pod1和Pod2一直運(yùn)行正常。

原文鏈接:https://cloud.tencent.com/community/article/905142

【本文是51CTO專欄作者“騰訊云技術(shù)社區(qū)”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系原作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-11-20 13:00:17

ZegoLive

2024-06-05 09:53:17

2023-03-10 07:47:41

克隆jQuery

2020-11-09 14:15:23

代碼菜鳥老司機(jī)

2017-05-24 10:58:28

linux系統(tǒng)技巧

2009-12-24 11:04:59

固定分配資源動(dòng)態(tài)分配資源

2022-04-19 07:47:13

數(shù)據(jù)中心末端資源分配

2018-07-17 13:59:51

權(quán)威

2016-11-28 16:09:37

2018-09-28 15:06:41

MySQL優(yōu)化指南數(shù)據(jù)庫

2018-10-09 09:42:27

MySQL優(yōu)化單表

2021-04-09 09:51:52

CyclicBarri Java循環(huán)柵欄

2020-03-09 10:21:12

Java集合類 Guava

2024-06-04 09:48:14

自動(dòng)駕駛模型

2021-02-06 08:34:49

函數(shù)memoize文檔

2018-12-19 10:52:35

嵌入式CPU微處理器

2019-08-20 09:30:18

Spring Clou組件Eureka

2017-10-17 11:09:06

2018-12-04 09:07:36

運(yùn)維問題排查

2023-04-17 08:00:00

點(diǎn)贊
收藏

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