本技術(shù)涉及云計(jì)算,尤其涉及一種安全容器的創(chuàng)建方法及裝置。
背景技術(shù):
1、隨著云計(jì)算的發(fā)展,以容器和微服務(wù)為代表的云原生技術(shù),受到人們的廣泛關(guān)注。然而,在云原生場(chǎng)景下,容器是多租戶資源隔離的,普通容器直接運(yùn)行于物理機(jī)的內(nèi)核,對(duì)物理機(jī)具有安全隱患?;诖?,安全容器(pod)應(yīng)運(yùn)而生。與普通容器相比,安全容器都運(yùn)行在一個(gè)輕量級(jí)虛擬機(jī)中,擁有獨(dú)立的操作系統(tǒng)內(nèi)核以及虛擬化層的安全隔離。通過安全容器做的虛擬化級(jí)別的隔離不僅保證了云原始場(chǎng)景下用戶資源隔離,也保證了平臺(tái)自身的安全性。
2、目前,在云原生環(huán)境中,創(chuàng)建安全容器主要是基于kubernetes(簡(jiǎn)稱:k8s)平臺(tái)統(tǒng)一管理物理機(jī)資源,根據(jù)用戶定義需求,動(dòng)態(tài)調(diào)度并提供的安全容器,安全容器使用的計(jì)算資源基于硬件虛擬化技術(shù)提供,而存儲(chǔ)資源采用的是virtio-9p、virtio-fs、virtio-blk、virtio-scsi等虛擬化技術(shù),需要kubernetes首先將容器訪問的存儲(chǔ)系統(tǒng)在worker節(jié)點(diǎn)物理機(jī)上進(jìn)行映射,然后虛擬機(jī)監(jiān)視程序(virtual?machine?monitor,vmm)通過虛擬化技術(shù)將存儲(chǔ)設(shè)備虛擬給安全容器的虛擬機(jī)。
3、然而,現(xiàn)有技術(shù)安全容器無法獲得直接運(yùn)行在物理機(jī)上性能,導(dǎo)致安全容器無法獲得高性能存儲(chǔ)能力。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供一種安全容器的創(chuàng)建方法及裝置,以解決安全容器無法獲得高性能存儲(chǔ)能力的問題。
2、第一方面,本技術(shù)提供一種安全容器的創(chuàng)建方法,應(yīng)用于kubernetes云原生平臺(tái)的管理節(jié)點(diǎn),包括:
3、獲取pod定義,所述pod定義用于說明創(chuàng)建安全容器所需的資源及資源數(shù)量;
4、通過api?server獲取pod創(chuàng)建請(qǐng)求,所述pod創(chuàng)建請(qǐng)求是根據(jù)所述pod定義生成的;
5、根據(jù)所述pod創(chuàng)建請(qǐng)求,通過api?server創(chuàng)建pod信息;
6、通過scheduler,根據(jù)調(diào)度策略、所述pod信息對(duì)應(yīng)的資源及資源數(shù)量,在所述kubernetes云原生平臺(tái)中分配用于運(yùn)行所述安全容器的worker節(jié)點(diǎn);
7、更新所述pod信息的host,并將所述pod信息的狀態(tài)更新為待創(chuàng)建,所述host與所述worker節(jié)點(diǎn)對(duì)應(yīng)。
8、第二方面,本技術(shù)提供一種安全容器的創(chuàng)建方法,應(yīng)用于kubernetes云原生平臺(tái)的worker節(jié)點(diǎn),包括:
9、通過kubelet從所述kubernetes云原生平臺(tái)的管理節(jié)點(diǎn)中獲取host與所述worker節(jié)點(diǎn)對(duì)應(yīng)的、且狀態(tài)為待創(chuàng)建的pod信息;
10、根據(jù)所述pod信息,調(diào)用device?plugin提供的grpc服務(wù)為安全容器分配設(shè)備資源;
11、根據(jù)所述設(shè)備資源,創(chuàng)建所述安全容器。
12、在一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述設(shè)備資源,創(chuàng)建所述安全容器,包括:
13、調(diào)用安全容器運(yùn)行時(shí)組件,生成runpodsandbox請(qǐng)求,所述runpodsandbox請(qǐng)求用于指示創(chuàng)建所述安全容器時(shí)所需的設(shè)備資源以及用于對(duì)guest?kernel和image進(jìn)行配置的配置信息;
14、根據(jù)所述runpodsandbox請(qǐng)求,調(diào)用所述安全容器運(yùn)行時(shí)組件,創(chuàng)建安全容器。
15、在一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述runpodsandbox請(qǐng)求,調(diào)用所述安全容器運(yùn)行時(shí)組件,創(chuàng)建安全容器,包括:
16、根據(jù)所述runpodsandbox請(qǐng)求拉取所述安全容器的容器鏡像;
17、根據(jù)所述容器鏡像以及所述設(shè)備資源,對(duì)運(yùn)行所述安全容器的虛擬機(jī)進(jìn)行配置;
18、根據(jù)所述runpodsandbox請(qǐng)求的配置信息,對(duì)guest?kernel和image進(jìn)行配置;
19、啟動(dòng)配置后的虛擬機(jī);
20、通過所述安全容器運(yùn)行時(shí)組件,通知所述虛擬機(jī)中的agent對(duì)所述安全容器進(jìn)行資源配置,所述資源配置包括以下至少一項(xiàng):加載內(nèi)核模塊、加載設(shè)備驅(qū)動(dòng)、配置網(wǎng)絡(luò)、掛載文件系統(tǒng)、配置安全策略;
21、通過所述安全容器運(yùn)行組件,返回用于指示創(chuàng)建成功的創(chuàng)建結(jié)果。
22、在一種可能的實(shí)現(xiàn)方式中,在所述通過kubelet從所述kubernetes云原生平臺(tái)的管理節(jié)點(diǎn)中獲取host與所述worker節(jié)點(diǎn)對(duì)應(yīng)的、且狀態(tài)為待創(chuàng)建的pod信息之前,所述方法還包括:
23、通過device?plugin服務(wù)將所述worker節(jié)點(diǎn)可用的設(shè)備資源的類型和數(shù)量注冊(cè)到所述kubernetes云原生平臺(tái)。
24、在一種可能的實(shí)現(xiàn)方式中,所述通過device?plugin服務(wù)將所述worker節(jié)點(diǎn)可用的設(shè)備資源的類型和數(shù)量注冊(cè)到所述kubernetes云原生平臺(tái),包括:
25、讀取服務(wù)配置文件,獲取待處理的設(shè)備標(biāo)識(shí);
26、對(duì)所述worker節(jié)點(diǎn)的設(shè)備進(jìn)行掃描,確定所述待處理的設(shè)備標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)設(shè)備的設(shè)備資源的類型和數(shù)量;
27、將所述worker節(jié)點(diǎn)的各目標(biāo)設(shè)備的驅(qū)動(dòng)更新為vfio/vfio-pci;
28、通過所述device?plugin服務(wù)確定所述worker節(jié)點(diǎn)可用的設(shè)備資源的類型和數(shù)量;
29、通過所述device?plugin服務(wù)啟動(dòng)grpc服務(wù);
30、將所述device?plugin服務(wù)注冊(cè)到kubelet服務(wù);
31、通過所述kubelet服務(wù)調(diào)用所述grpc服務(wù)獲取所述可用的設(shè)備資源的類型和數(shù)量;
32、將所述可用的設(shè)備資源的類型和數(shù)量注冊(cè)到所述kubernetes云原生平臺(tái)。
33、在一種可能的實(shí)現(xiàn)方式中,所述方法還包括:
34、調(diào)用所述安全容器運(yùn)行時(shí)組件,運(yùn)行所述安全容器;
35、根據(jù)所述創(chuàng)建結(jié)果,更新所述安全容器的狀態(tài)。
36、第三方面,本技術(shù)提供一種安全容器的創(chuàng)建裝置,應(yīng)用于kubernetes云原生平臺(tái)的管理節(jié)點(diǎn),包括:
37、第一獲取模塊,用于獲取pod定義,所述pod定義用于說明創(chuàng)建安全容器所需的資源及資源數(shù)量;
38、第二獲取模塊,用于通過api?server獲取pod創(chuàng)建請(qǐng)求,所述pod創(chuàng)建請(qǐng)求是根據(jù)所述pod定義生成的;
39、創(chuàng)建模塊,用于根據(jù)所述pod創(chuàng)建請(qǐng)求,通過api?server創(chuàng)建pod信息;
40、分配模塊,用于通過scheduler,根據(jù)調(diào)度策略、所述pod信息對(duì)應(yīng)的資源及資源數(shù)量,在所述kubernetes云原生平臺(tái)中分配用于運(yùn)行所述安全容器的worker節(jié)點(diǎn);
41、更新模塊,用于更新所述pod信息的host,并將所述pod信息的狀態(tài)更新為待創(chuàng)建,所述host與所述worker節(jié)點(diǎn)對(duì)應(yīng)。
42、第四方面,本技術(shù)提供一種安全容器的創(chuàng)建裝置,應(yīng)用于kubernetes云原生平臺(tái)的worker節(jié)點(diǎn),包括:
43、獲取模塊,用于通過kubelet從所述kubernetes云原生平臺(tái)的管理節(jié)點(diǎn)中獲取host與所述worker節(jié)點(diǎn)對(duì)應(yīng)的、且狀態(tài)為待創(chuàng)建的pod信息;
44、調(diào)用模塊,用于根據(jù)所述pod信息,調(diào)用device?plugin提供的grpc服務(wù)為安全容器分配設(shè)備資源;
45、創(chuàng)建模塊,用于根據(jù)所述設(shè)備資源,創(chuàng)建所述安全容器。
46、在一種可能的實(shí)現(xiàn)方式中,所述創(chuàng)建模塊,具體用于:
47、調(diào)用安全容器運(yùn)行時(shí)組件,生成runpodsandbox請(qǐng)求,所述runpodsandbox請(qǐng)求用于指示創(chuàng)建所述安全容器時(shí)所需的設(shè)備資源以及用于對(duì)guest?kernel和image進(jìn)行配置的配置信息;
48、根據(jù)所述runpodsandbox請(qǐng)求,調(diào)用所述安全容器運(yùn)行時(shí)組件,創(chuàng)建安全容器。
49、在一種可能的實(shí)現(xiàn)方式中,所述創(chuàng)建模塊,具體用于:
50、根據(jù)所述runpodsandbox請(qǐng)求拉取所述安全容器的容器鏡像;
51、根據(jù)所述容器鏡像以及所述設(shè)備資源,對(duì)運(yùn)行所述安全容器的虛擬機(jī)進(jìn)行配置;
52、根據(jù)所述runpodsandbox請(qǐng)求的配置信息,對(duì)guest?kernel和image進(jìn)行配置;
53、啟動(dòng)配置后的虛擬機(jī);
54、通過所述安全容器運(yùn)行時(shí)組件,通知所述虛擬機(jī)中的agent對(duì)所述安全容器進(jìn)行資源配置,所述資源配置包括以下至少一項(xiàng):加載內(nèi)核模塊、加載設(shè)備驅(qū)動(dòng)、配置網(wǎng)絡(luò)、掛載文件系統(tǒng)、配置安全策略;
55、通過所述安全容器運(yùn)行組件,返回用于指示創(chuàng)建成功的創(chuàng)建結(jié)果。
56、在一種可能的實(shí)現(xiàn)方式中,在所述通過kubelet從所述kubernetes云原生平臺(tái)的管理節(jié)點(diǎn)中獲取host與所述worker節(jié)點(diǎn)對(duì)應(yīng)的、且狀態(tài)為待創(chuàng)建的pod信息之前,所述安全容器的創(chuàng)建裝置,還包括注冊(cè)模塊,用于通過device?plugin服務(wù)將所述worker節(jié)點(diǎn)可用的設(shè)備資源的類型和數(shù)量注冊(cè)到所述kubernetes云原生平臺(tái)。
57、在一種可能的實(shí)現(xiàn)方式中,所述注冊(cè)模塊,具體用于:
58、讀取服務(wù)配置文件,獲取待處理的設(shè)備標(biāo)識(shí);
59、對(duì)所述worker節(jié)點(diǎn)的設(shè)備進(jìn)行掃描,確定所述待處理的設(shè)備標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)設(shè)備的設(shè)備資源的類型和數(shù)量;
60、將所述worker節(jié)點(diǎn)的各目標(biāo)設(shè)備的驅(qū)動(dòng)更新為vfio/vfio-pci;
61、通過所述device?plugin服務(wù)確定所述worker節(jié)點(diǎn)可用的設(shè)備資源的類型和數(shù)量;
62、通過所述device?plugin服務(wù)啟動(dòng)grpc服務(wù);
63、將所述device?plugin服務(wù)注冊(cè)到kubelet服務(wù);
64、通過所述kubelet服務(wù)調(diào)用所述grpc服務(wù)獲取所述可用的設(shè)備資源的類型和數(shù)量;
65、將所述可用的設(shè)備資源的類型和數(shù)量注冊(cè)到所述kubernetes云原生平臺(tái)。
66、在一種可能的實(shí)現(xiàn)方式中,所述調(diào)用模塊,用于調(diào)用所述安全容器運(yùn)行時(shí)組件,運(yùn)行所述安全容器;
67、安全容器的創(chuàng)建裝置還包括,更新模塊,用于根據(jù)所述創(chuàng)建結(jié)果,更新所述安全容器的狀態(tài)。
68、第五方面,本技術(shù)提供一種管理節(jié)點(diǎn),包括:處理器、存儲(chǔ)器及存儲(chǔ)在所述存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序指令,所述處理器執(zhí)行所述計(jì)算機(jī)程序指令時(shí)用于實(shí)現(xiàn)第一方面以及各可能設(shè)計(jì)提供的方法。
69、第六方面,本技術(shù)提供一種worker節(jié)點(diǎn),包括:處理器、存儲(chǔ)器及存儲(chǔ)在所述存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序指令,所述處理器執(zhí)行所述計(jì)算機(jī)程序指令時(shí)用于實(shí)現(xiàn)第二方面以及各可能設(shè)計(jì)提供的方法。
70、第七方面,本技術(shù)提供一種kubernetes云原生平臺(tái),包括:管理節(jié)點(diǎn)和worker節(jié)點(diǎn),所述管理節(jié)點(diǎn)用于實(shí)現(xiàn)第一方面以及各可能設(shè)計(jì)提供的方法,所述worker節(jié)點(diǎn)用于實(shí)現(xiàn)第二方面以及各可能設(shè)計(jì)提供的方法。
71、第八方面,本技術(shù)可提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)執(zhí)行指令,所述計(jì)算機(jī)執(zhí)行指令被處理器執(zhí)行時(shí)用于實(shí)現(xiàn)第一方面、第二方面以及各可能設(shè)計(jì)提供的方法。
72、本技術(shù)提供的安全容器的創(chuàng)建方法及裝置,在該方法中,管理節(jié)點(diǎn)獲取pod定義,通過api?server獲取pod創(chuàng)建請(qǐng)求,根據(jù)pod創(chuàng)建請(qǐng)求,通過api?server創(chuàng)建pod信息,通過scheduler,根據(jù)調(diào)度策略、pod信息對(duì)應(yīng)的資源及資源數(shù)量,在kubernetes云原生平臺(tái)中分配用于運(yùn)行安全容器的worker節(jié)點(diǎn),更新pod信息的host,并將pod信息的狀態(tài)更新為待創(chuàng)建。worker節(jié)點(diǎn)通過kubelet從kubernetes云原生平臺(tái)的管理節(jié)點(diǎn)中獲取host與worker節(jié)點(diǎn)對(duì)應(yīng)的、且狀態(tài)為待創(chuàng)建的pod信息,根據(jù)pod信息,調(diào)用device?plugin提供的grpc服務(wù)為安全容器分配設(shè)備資源,根據(jù)設(shè)備資源,創(chuàng)建安全容器。在本技術(shù)方案中,通過pod定義確定創(chuàng)建安全容器所需的資源及資源數(shù)量,從而根據(jù)該資源及資源數(shù)量確定用于創(chuàng)建安全容器的worker節(jié)點(diǎn),并調(diào)用device?plugin提供的grpc服務(wù)為安全容器分配設(shè)備資源,即能滿足云原生場(chǎng)景下的安全需要,又使得安全容器可以獲得高性能存儲(chǔ)能力,滿足高性能分布式應(yīng)用的用戶場(chǎng)景。