本發(fā)明屬于計算機資源管理相關(guān),更具體地,涉及一種協(xié)同命名空間和控制組群的資源管理方法。
背景技術(shù):
1、容器技術(shù)已經(jīng)廣泛應(yīng)用到大量領(lǐng)域,比如云計算,邊緣計算,自動駕駛等。容器技術(shù)有兩大基石,命名空間namespace與控制組群cgroup。
2、namespace能夠?qū)⒁唤M進程隔離起來,并維護專屬于這組進程的資源,將其與內(nèi)核中全局的資源隔離開來。比如:進程命名空間pid?namespace擁有一組獨立于別的pidnamespace的鏈表,該鏈表僅僅用來維護屬于該pid?namespace的所有進程,當(dāng)namespace中的最后一個進程退出的時候,該namespace會消亡,與此同時,內(nèi)核會遍歷該namespace維護的所有資源,并將其銷毀。
3、cgroup能夠?qū)崿F(xiàn)一組資源(如內(nèi)存,i/o速率,網(wǎng)絡(luò)帶寬等)的統(tǒng)計與限制,當(dāng)創(chuàng)建一個容器時,runtime會自動為該容器創(chuàng)建一個cgroup,在容器中執(zhí)行進程時,通過容器本身的cgroup限制該進程對資源的使用。
4、在實際使用容器技術(shù)時,偶爾會出現(xiàn)資源異常消耗的問題,即主機在運行容器服務(wù)期間,某些資源被逐漸消耗殆盡,甚至出現(xiàn)主機宕機,但是各個容器的cgroup資源記錄并不高的情況。
技術(shù)實現(xiàn)思路
1、針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種針對容器資源逃逸缺陷的檢測方法,其目的在于通過對容器創(chuàng)建工具進行檢測以前提發(fā)現(xiàn)該工具是否存在問題,避免在使用容器技術(shù)期間出現(xiàn)資源被耗盡的漏洞。
2、為實現(xiàn)上述目的,本發(fā)明提供了一種協(xié)同命名空間和控制組群的資源管理方法,包括:
3、創(chuàng)建共享命名空間的容器,生成所述容器對應(yīng)的控制組群并在所述控制組群中添加初始化的鏈表;為容器在共享命名空間中初次創(chuàng)建資源,在所述鏈表中添加用于索引所述資源所處的共享命名空間的索引元素,并標(biāo)記所述資源受控于對應(yīng)容器的所述控制組群;
4、退出容器,包括:
5、步驟s31:判斷目標(biāo)鏈表是否為空,若為空,則跳轉(zhuǎn)至步驟s34,若不為空,則執(zhí)行步驟s32;所述目標(biāo)鏈表為當(dāng)前退出容器對應(yīng)的鏈表;
6、步驟s32:遍歷目標(biāo)鏈表所指向的所有共享命名空間的資源,根據(jù)標(biāo)記找到受控于目標(biāo)控制組群的所有資源并記錄為殘留資源;所述目標(biāo)控制組群為當(dāng)前退出容器對應(yīng)的控制組群;
7、步驟s33:利用全局控制組群對所述殘留資源進行管理,所述全局控制組群為內(nèi)核中唯一且全局共享的控制組群;
8、步驟s34:退出容器,銷毀所退出容器的控制組群;
9、在具有殘留資源的命名空間中再次創(chuàng)建資源,包括:
10、步驟s41:判斷所述殘留資源是否由所述全局控制組群管理,若是,則執(zhí)行步驟s42,若否,則執(zhí)行步驟s43;
11、步驟s42:判斷所述殘留資源的資源量是否超過當(dāng)前容器的資源上限,若是,則執(zhí)行步驟s43,若否,執(zhí)行步驟s44;
12、步驟s43:釋放所述殘留資源,從內(nèi)核中申請資源,在當(dāng)前容器對應(yīng)的所述鏈表中添加用于索引所申請資源所處的共享命名空間的索引元素,并標(biāo)記所申請的資源受控于當(dāng)前容器的所述控制組群;跳轉(zhuǎn)至步驟s45;
13、步驟s44:將全局控制組群中對所述殘留資源的管理信息轉(zhuǎn)移至當(dāng)前容器的控制組群中以將殘留資源作為當(dāng)前容器的資源,實現(xiàn)殘留資源的回收;
14、步驟s45:結(jié)束資源創(chuàng)建。
15、優(yōu)選地,所述鏈表包含一個或多個子鏈表,不同子鏈表對應(yīng)不同類型的命名空間,同一子鏈表中的元素用于索引歸屬于同一類型命名空間中的各個命名空間。
16、優(yōu)選地,所述全局控制組群具有不超過硬上限的初始資源上限且全局控制組群的資源上限動態(tài)可調(diào),所述硬上限為固定不變的預(yù)設(shè)上限;
17、在步驟s33中,利用全局控制組群對所述殘留資源進行管理,包括:
18、步驟s331:判斷所述全局控制組群當(dāng)前的資源上限是否大于當(dāng)前待銷毀的控制組群的資源上限,若是,則跳轉(zhuǎn)至步驟s333,若否,則執(zhí)行步驟s332;
19、步驟s332:將所述全局控制組群的資源上限調(diào)整為所述硬上限和待銷毀的控制組群的資源上限中的較小者;
20、步驟s333:判斷所述全局控制組群能否完全容納所述殘留資源,若是,執(zhí)行步驟s338:
21、步驟s338:利用所述全局控制組群管理所述殘留資源,跳轉(zhuǎn)至步驟s34。
22、優(yōu)選地,在步驟s333中,若所述全局控制組群不能完全容納所述殘留資源,則釋放所述控制組群所管理的至少部分殘留資源并再次判斷所述全局控制組群能否完全容納所述殘留資源,若是,則利用所述全局控制組群管理所述殘留資源,若否,則釋放所述殘留資源。
23、優(yōu)選地,所述釋放所述控制組群所管理的至少部分殘留資源并再次判斷所述全局控制組群能否完全容納所述殘留資源,包括:
24、步驟s334:初始化計數(shù)器的計數(shù)值;
25、步驟s335:釋放所述全局控制組群中所有殘留時間大于等于當(dāng)前計數(shù)值的殘留資源,且計數(shù)值減1;
26、步驟s336:判斷所述全局控制組群能否完全容納所述殘留資源,若是,執(zhí)行步驟s338;若否,執(zhí)行步驟s337;
27、步驟s337:判斷當(dāng)前計數(shù)值是否等于-1,若是,則釋放所述殘留資源,并跳轉(zhuǎn)至步驟s34;若否,則跳轉(zhuǎn)至步驟s335;
28、步驟s338:利用所述全局控制組群管理所述殘留資源,將所述全局控制組群中新增的殘留資源的殘留時間設(shè)置為0,將其中已有殘留資源的殘留時間加1,跳轉(zhuǎn)至步驟s34。
29、優(yōu)選地,在步驟s334中,初始化計數(shù)值為5。
30、優(yōu)選地,在訪問命名空間的內(nèi)核函數(shù)中添加轉(zhuǎn)移指令,當(dāng)為容器在命名空間中創(chuàng)建資源時,通過添加有轉(zhuǎn)移指令的內(nèi)核函數(shù)訪問命名空間,當(dāng)所訪問的命名空間中存在殘留資源時,觸發(fā)指令以執(zhí)行步驟s41~步驟s45。
31、本發(fā)明還提供了一種電子設(shè)備,包括存儲器和處理器,所述存儲器存儲有計算機程序,所述處理器執(zhí)行所述計算機程序時實現(xiàn)如上任一項所述的方法的步驟。
32、本發(fā)明還提供了一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上任一項所述的方法的步驟。
33、本發(fā)明還提供了一種計算機程序產(chǎn)品,包括計算機程序或指令,所述計算機程序或指令被處理器執(zhí)行時實現(xiàn)如上任一項所述的方法的步驟。
34、總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,本發(fā)明主要具有以下有益效果:
35、1、本發(fā)明首先發(fā)現(xiàn)了在使用容器技術(shù)時出現(xiàn)資源被逐漸消耗殆盡的問題所在,其原因在于當(dāng)多個容器共享namespace時,容器重啟期間,該容器之前所創(chuàng)建的資源以及對資源進行管理的cgroup不能同步銷毀,其cgroup通常能隨著容器的重啟而清零,但是其之前所創(chuàng)建的資源很有可能還存于namespace中,該部分資源沒有被cgroup管理,形成殘留資源,隨著容器重啟次數(shù)的增多,其殘留資源逐漸累積,導(dǎo)致資源耗盡?;谒l(fā)現(xiàn)的問題根源,本發(fā)明提出了一種協(xié)同namespace和cgroup的資源管理方法,在cgroup中添加鏈表,基于該鏈表可以索引容器所處的namespace,當(dāng)在namespace中為容器創(chuàng)建資源時,對其所創(chuàng)建的資源進行標(biāo)記,通過所添加的鏈表以及所添加的標(biāo)記,可以索引到該容器在哪些命名空間創(chuàng)建了哪些資源;當(dāng)容器退出時,其對應(yīng)的cgroup將被銷毀,而其cgroup管理的位于共享namespace中的資源可能仍然殘留于namespace,基于鏈表和標(biāo)記,可以找到位于共享namespace中的殘留資源,利用全局cgroup進行管理,如此,容器退出且其cgroup被銷毀后,全局cgroup仍然管理著殘留資源,避免資源逃逸。當(dāng)共享namespace中其他的容器需要申請資源時,優(yōu)先回收全局cgroup管理的殘留資源,提高系統(tǒng)資源利用率,當(dāng)無法回收時,則將殘留資源釋放,如此,便能避免主機在運行容器服務(wù)期間某些資源被逐漸消耗殆盡的問題。
36、2、進一步地,通過對全局cgroup的資源上限進行設(shè)計,使其根據(jù)當(dāng)前待銷毀的cgroup的資源上限進行調(diào)節(jié)且有不會超過其硬上限,如此可以確保殘留資源始終保持在一個合理的范圍內(nèi),且能夠防范惡意攻擊。
37、3、進一步地,設(shè)置計數(shù)器,當(dāng)全局cgroup的剩余資源空間不夠時,通過計數(shù)器進行計數(shù),對全局cgroup所管理的殘留資源按照先進先出的原則進行一定程度的釋放,若釋放后還不夠容納殘留資源,則認為該殘留資源可能存在惡意攻擊,直接將其釋放,以保證系統(tǒng)安全。