本公開涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別涉及一種容器創(chuàng)建方法和裝置。
背景技術(shù):
容器技術(shù)是一種操作系統(tǒng)層虛擬化技術(shù),可以將應(yīng)用軟件系統(tǒng)打包成一個軟件容器,內(nèi)含應(yīng)用本身的代碼及其所需要的操作系統(tǒng)核心和庫,通過命名空間技術(shù)和硬件資源隔離技術(shù)創(chuàng)造出應(yīng)用獨(dú)立的沙箱運(yùn)行環(huán)境。目前,隨著人工智能和圖像處理業(yè)務(wù)的發(fā)展和需求擴(kuò)大,容器技術(shù)也逐步應(yīng)用于企業(yè)高性能計(jì)算領(lǐng)域方面的工作。例如,在高性能計(jì)算領(lǐng)域,容器中運(yùn)行的應(yīng)用有時(shí)需要使用某個物理設(shè)備,那么為了使得能夠使用該物理設(shè)備,創(chuàng)建的容器中需要包括該物理設(shè)備的信息,比如,可以是設(shè)備的驅(qū)動,否則容器就無法使用該設(shè)備。
現(xiàn)有技術(shù)的其中一種方式,可以將設(shè)備的驅(qū)動直接安裝在容器中,每個容器中都要安裝該驅(qū)動,但是這種方式在驅(qū)動版本升級時(shí),所有的容器和鏡像都要更新,而且還需要獲取更新時(shí)所需要的設(shè)備信息,操作非常繁瑣,而且還會對容器中的業(yè)務(wù)運(yùn)行造成影響。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本公開提供一種容器創(chuàng)建方法和裝置,以使得容器對設(shè)備的使用實(shí)現(xiàn)更加靈活和方便,并減小設(shè)備更新對容器業(yè)務(wù)的影響。
具體地,本公開是通過如下技術(shù)方案實(shí)現(xiàn)的:
第一方面,提供一種容器創(chuàng)建方法,所述方法應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,所述方法包括:
接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;
根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
將所述設(shè)備信息和驅(qū)動返回給所述容器引擎,以使得所述容器引擎創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
第二方面,提供一種容器創(chuàng)建方法,所述方法應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,所述方法包括:
向容器插件發(fā)送插件觸發(fā)請求,所述插件觸發(fā)請求用于觸發(fā)所述容器插件獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
接收所述容器插件返回的所述設(shè)備信息和驅(qū)動;
使用所述設(shè)備信息和驅(qū)動,創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
第三方面,提供一種容器創(chuàng)建裝置,所述裝置應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,所述裝置包括:
觸發(fā)接收模塊,用于接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;
信息獲取模塊,用于根據(jù)所述觸發(fā)請求,獲取目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
信息反饋模塊,用于將所述設(shè)備信息和驅(qū)動返回給所述容器引擎,以使得所述容器引擎創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
第四方面,提供一種容器創(chuàng)建裝置,所述裝置應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,所述裝置包括:
請求發(fā)送模塊,用于向容器插件發(fā)送插件觸發(fā)請求,所述插件觸發(fā)請求用于觸發(fā)所述容器插件獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
信息接收模塊,用于接收所述容器插件返回的所述設(shè)備信息和驅(qū)動;
容器創(chuàng)建模塊,用于使用所述設(shè)備信息和驅(qū)動,創(chuàng)建攜帶目標(biāo)設(shè)備的容器。
第五方面,提供一種計(jì)算機(jī)可讀存儲介質(zhì),所述介質(zhì)上存儲有計(jì)算機(jī)指令,該指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)以下步驟:
接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;
根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
將所述設(shè)備信息和驅(qū)動返回給所述容器引擎,以使得所述容器引擎創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
第六方面,提供一種處理設(shè)備,所述處理設(shè)備中安裝有目標(biāo)設(shè)備,所述處理設(shè)備包括存儲器、處理器,以及存儲在存儲器上并可在處理器上運(yùn)行的計(jì)算機(jī)指令,所述計(jì)算機(jī)指令包括:用于實(shí)現(xiàn)容器插件的插件指令、以及用于實(shí)現(xiàn)容器引擎的引擎指令;
所述處理器通過執(zhí)行所述插件指令,用于實(shí)現(xiàn)如下步驟:接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;將所述設(shè)備信息和驅(qū)動返回給所述容器引擎;
所述處理器通過執(zhí)行所述引擎指令,用于實(shí)現(xiàn)如下步驟:向容器插件發(fā)送插件觸發(fā)請求,所述插件觸發(fā)請求用于觸發(fā)所述容器插件獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;接收所述容器插件返回的設(shè)備信息和驅(qū)動;使用所述設(shè)備信息和驅(qū)動,創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
本公開的容器創(chuàng)建方法和裝置,當(dāng)容器引擎創(chuàng)建容器時(shí),可以自動觸發(fā)本公開的容器插件代為收集目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動,這樣使得對于容器創(chuàng)建時(shí)所需信息的獲取更為快速和方便,并且,插件化的方式對容器中的業(yè)務(wù)不會產(chǎn)生影響。
附圖說明
圖1是本公開實(shí)施例提供的一個容器的應(yīng)用場景;
圖2是本公開實(shí)施例提供的一個容器創(chuàng)建流程圖;
圖3是本公開實(shí)施例提供的一個容器插件的結(jié)構(gòu)示意圖;
圖4是本公開實(shí)施例提供的容器插件第一階段的工作流程圖;
圖5是本公開實(shí)施例提供的容器插件第二階段的工作流程圖;
圖6是本公開實(shí)施例提供的容器插件第三階段的工作流程圖;
圖7是本公開實(shí)施例提供的驅(qū)動設(shè)備查詢器的結(jié)構(gòu)示意圖;
圖8是本公開實(shí)施例提供的一種容器創(chuàng)建裝置的結(jié)構(gòu)示意圖;
圖9是本公開實(shí)施例提供的一種容器創(chuàng)建裝置的結(jié)構(gòu)示意圖;
圖10是本公開實(shí)施例提供的一種容器創(chuàng)建裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
利用容器(container)技術(shù)可以為應(yīng)用程序創(chuàng)造出一個獨(dú)立的沙箱運(yùn)行環(huán)境,并不是像虛擬機(jī)那樣提供一套完整的操作系統(tǒng),例如,傳統(tǒng)虛擬機(jī)方式運(yùn)行十個不同的應(yīng)用就要起十個虛擬機(jī),而容器技術(shù)只需要啟動十個隔離的應(yīng)用即可,這十個應(yīng)用分別位于不同的容器中。容器的啟動和運(yùn)行效率較高,而且對系統(tǒng)資源的利用率很高,容器除了運(yùn)行其中的應(yīng)用程序外,基本不消耗額外的系統(tǒng)資源,一臺主機(jī)上可以同時(shí)運(yùn)行數(shù)量很多的容器。正因?yàn)樯鲜鰞?yōu)點(diǎn),容器技術(shù)逐步應(yīng)用于各個方面的工作。
圖1示例了一個容器的應(yīng)用場景,如圖1所示,處理設(shè)備11例如可以是一個電腦、服務(wù)器等物理機(jī)器,或者也可以是一個運(yùn)行在物理機(jī)器上的虛擬機(jī),如下的描述中以物理機(jī)器為例。在處理設(shè)備11中可以安裝有至少一個硬件設(shè)備,在一個例子中,這些硬件設(shè)備可以是infiniband設(shè)備,infiniband是一種適用于高性能計(jì)算領(lǐng)域的計(jì)算機(jī)網(wǎng)絡(luò)通信標(biāo)準(zhǔn),具有高吞吐、低延遲的傳輸特性,infiniband設(shè)備可以包括infiniband交換機(jī)和網(wǎng)絡(luò)互聯(lián)設(shè)備等。使用infiniband設(shè)備需要攜帶該設(shè)備的驅(qū)動,如圖1所示,處理設(shè)備11中包括物理機(jī)infiniband設(shè)備12(即安裝在物理機(jī)器形式的處理設(shè)備上的infiniband,以區(qū)分后續(xù)描述中出現(xiàn)的容器infiniband)和物理機(jī)infiniband驅(qū)動13(同理,以區(qū)分后續(xù)出現(xiàn)的容器驅(qū)動)。本例子中,可以將上述的infiniband設(shè)備稱為目標(biāo)設(shè)備,此外,如下描述中以infiniband設(shè)備為例,但在其他的應(yīng)用場景中也可以是其他硬件設(shè)備。
請繼續(xù)參見圖1,假設(shè)在該處理設(shè)備上創(chuàng)建并運(yùn)行一個容器14,該容器14中的應(yīng)用程序需要使用infiniband設(shè)備,以提高網(wǎng)絡(luò)吞吐量和網(wǎng)絡(luò)通信效率,那么容器14可以是一個“攜帶infiniband設(shè)備的容器(圖1示意為infiniband容器)”,即需要將infiniband設(shè)備掛載在容器14中,容器14還需要包括該infiniband設(shè)備的驅(qū)動,這樣才能夠正常使用infiniband設(shè)備。如圖1所示,容器14中包括容器infiniband設(shè)備和驅(qū)動,以通過這些共享實(shí)際的物理設(shè)備。
本公開的容器創(chuàng)建方法,即用于描述如何創(chuàng)建上述的容器14,并且使得該容器14中攜帶處理設(shè)備11中的infiniband設(shè)備及其驅(qū)動。如圖1所示,可以由容器引擎15負(fù)責(zé)創(chuàng)建容器,在一個例子中,例如,該容器引擎15可以是docker,docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的linux機(jī)器上,以期實(shí)現(xiàn)構(gòu)建一次,到處運(yùn)行,即“buildonce,runanywhere”,docker可以使得應(yīng)用程序部署在軟件容器下的工作自動化進(jìn)行。當(dāng)然,在其他的應(yīng)用例子中,也可以使用其他的容器引擎,不限制于docker,本公開的后續(xù)例子中以docker為例進(jìn)行描述。
以docker為例,docker可以提供一種擴(kuò)展機(jī)制即docker插件,例如,docker可以支持volume插件。插件是一個獨(dú)立的進(jìn)程,docker插件可以與docker運(yùn)行在同一臺主機(jī)上,由docker進(jìn)程進(jìn)行插件觸發(fā)。本公開提供了一種插件,如圖1所示的容器插件16,由該容器插件16負(fù)責(zé)為容器的創(chuàng)建收集所需的infiniband設(shè)備信息和驅(qū)動,并返回給容器引擎15,以供容器引擎15創(chuàng)建容器。
圖2示例了本公開的容器創(chuàng)建流程,可以包括:
在步驟201中,容器引擎接收容器創(chuàng)建請求,所述容器創(chuàng)建請求用于請求創(chuàng)建攜帶目標(biāo)設(shè)備的容器。
例如,如圖1所示,用戶調(diào)度程序可以向docker發(fā)送容器創(chuàng)建請求,調(diào)度docker進(jìn)程創(chuàng)建一個攜帶infiniband設(shè)備的容器。
在步驟202中,容器引擎向容器插件發(fā)送插件觸發(fā)請求。
例如,docker進(jìn)程接收到容器創(chuàng)建請求后,開始進(jìn)入創(chuàng)建容器的流程。本步驟中,可以通過docker進(jìn)程的volumedriver觸發(fā)本公開中的容器插件開始工作,相當(dāng)于向容器插件發(fā)送插件觸發(fā)請求。
在步驟203中,容器插件根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動。
例如,圖1中的容器插件16在偵聽到docker進(jìn)程創(chuàng)建volume事件的觸發(fā)后,可以判斷觸發(fā)參數(shù)是否正確,比如可以是,觸發(fā)請求中攜帶的參數(shù)格式是否正確。若不符合要求則可以向docker返回創(chuàng)建volume事件失敗,否則,可以繼續(xù)獲取infiniband設(shè)備的設(shè)備信息和驅(qū)動,本例子中可以是獲取圖1中的物理機(jī)infiniband設(shè)備的設(shè)備信息以及物理機(jī)infiniband驅(qū)動。
在步驟204中,容器插件將設(shè)備信息和驅(qū)動返回給容器引擎。
本步驟中,圖1中的容器插件16可以將獲取到的infiniband設(shè)備的設(shè)備信息和驅(qū)動返回給docker。
在步驟205中,容器引擎使用所述設(shè)備信息和驅(qū)動,創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。例如,docker可以根據(jù)設(shè)備信息和驅(qū)動,進(jìn)行infiniband設(shè)備的設(shè)備掛載和目錄掛載。
本例子的容器創(chuàng)建方法是一種將設(shè)備信息和驅(qū)動的獲取設(shè)計(jì)為插件化的方法,插件化是一種靈活輕量的工作模式,具有插拔特性,通常插拔過程對主流程不構(gòu)成影響。本例子中,當(dāng)容器引擎創(chuàng)建容器時(shí),可以自動觸發(fā)本公開的容器插件代為收集目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動,這樣使得對于容器創(chuàng)建時(shí)所需信息的獲取更為快速和方便,并且,插件化的方式對容器中的業(yè)務(wù)不會產(chǎn)生影響。
此外,假設(shè)docker創(chuàng)建多個容器時(shí),現(xiàn)有技術(shù)中可以將驅(qū)動直接安裝在各個容器中,當(dāng)驅(qū)動版本更新時(shí)導(dǎo)致每個容器和鏡像都要隨之更新,而本例子的方法中,是由容器插件將驅(qū)動返回給創(chuàng)建容器的docker引擎,相當(dāng)于多個容器共享一份驅(qū)動即可,docker在創(chuàng)建新容器時(shí)自動獲取插件返回的新版本驅(qū)動使用即可,非常方便。而且,容器插件可以將設(shè)備最新的驅(qū)動和設(shè)備信息返回至docker,可以使得docker兼容適配各個設(shè)備版本,由容器插件負(fù)責(zé)收集目標(biāo)設(shè)備的驅(qū)動和設(shè)備信息,大大簡化了攜帶設(shè)備的容器的創(chuàng)建流程,使得容器對設(shè)備的使用實(shí)現(xiàn)更加靈活和方便。
在一個例子中,將進(jìn)一步詳細(xì)描述圖1中的容器插件的結(jié)構(gòu)和工作過程。
如圖3所示,例如,本公開的容器插件可以包括三個模塊,分別為:插件擴(kuò)展觸發(fā)模塊31、驅(qū)動和設(shè)備選擇模塊32、以及驅(qū)動和設(shè)備收集模塊33。例如,插件擴(kuò)展觸發(fā)模塊31可以是dockervolume插件擴(kuò)展觸發(fā)模塊。容器插件的工作過程可以由上述的三個模塊配合執(zhí)行,包括如下的三個階段:
第一階段:插件擴(kuò)展觸發(fā)模塊的流程。
如圖4的示例,在步驟401中,插件擴(kuò)展觸發(fā)模塊接收到插件觸發(fā)。
本步驟中,插件擴(kuò)展觸發(fā)模塊可以偵聽是否要創(chuàng)建volume事件。當(dāng)docker接收到容器創(chuàng)建請求時(shí),可以觸發(fā)插件擴(kuò)展觸發(fā)模塊創(chuàng)建volume事件。本例子中,插件擴(kuò)展觸發(fā)模塊在接收到docker發(fā)送的創(chuàng)建volume事件的插件觸發(fā)請求后,可以繼續(xù)執(zhí)行402,否則,可以繼續(xù)偵聽。
在步驟402中,插件擴(kuò)展觸發(fā)模塊判斷觸發(fā)參數(shù)是否正確。
若觸發(fā)參數(shù)正確,則可以在步驟403中觸發(fā)驅(qū)動和設(shè)備選擇模塊執(zhí)行下一階段的流程;否則,可以在步驟404中向docker返回創(chuàng)建volume事件失敗。
由圖4的流程可以看到,本例子的容器插件中的插件擴(kuò)展觸發(fā)模塊,可以主要負(fù)責(zé)判斷是否接收到docker的插件觸發(fā),是否要創(chuàng)建volume事件,即負(fù)責(zé)確定本容器插件是否要開始獲取設(shè)備信息和驅(qū)動的流程。
第二階段:驅(qū)動和設(shè)備選擇模塊的流程。
如圖5的示例,在步驟501中,驅(qū)動和設(shè)備選擇模塊接收觸發(fā)請求。
本步驟中,驅(qū)動和設(shè)備選擇模塊接收到插件擴(kuò)展觸發(fā)模塊的觸發(fā)。
在步驟502中,驅(qū)動和設(shè)備選擇模塊判斷用戶是否傳入了指定的驅(qū)動版本。
例如,用戶可以在調(diào)度docker創(chuàng)建容器時(shí),在容器創(chuàng)建請求中就指定驅(qū)動版本,那么docker也會在向插件擴(kuò)展觸發(fā)模塊發(fā)送插件觸發(fā)請求時(shí),攜帶上所述指定的驅(qū)動版本,同樣,插件擴(kuò)展觸發(fā)模塊在觸發(fā)驅(qū)動和設(shè)備選擇模塊時(shí),可以將用戶指定的驅(qū)動版本傳給驅(qū)動和設(shè)備選擇模塊。
本步驟中,若判斷結(jié)果為否,即用戶沒有傳入驅(qū)動版本,則可以直接執(zhí)行步驟505,觸發(fā)驅(qū)動和設(shè)備收集模塊33進(jìn)行驅(qū)動收集,當(dāng)然,該驅(qū)動和設(shè)備收集模塊33也會收集設(shè)備信息。如果判斷結(jié)果為是,即用戶傳入了指定的驅(qū)動版本,則可以執(zhí)行步驟503。
在步驟503中,驅(qū)動和設(shè)備選擇模塊調(diào)用驅(qū)動和設(shè)備收集模塊查詢驅(qū)動。
在步驟504中,判斷指定版本的驅(qū)動是否存在。
本步驟中,可以是向驅(qū)動和設(shè)備收集模塊查詢是否存在所述指定的驅(qū)動版本,如不存在,可以執(zhí)行步驟506,否則,可以執(zhí)行步驟505。
在步驟505中,驅(qū)動和設(shè)備選擇模塊觸發(fā)驅(qū)動和設(shè)備收集模塊,以進(jìn)入下一階段的流程,進(jìn)行設(shè)備信息和驅(qū)動的收集。
在步驟506中,驅(qū)動和設(shè)備選擇模塊返回創(chuàng)建失敗,即驅(qū)動和設(shè)備選擇模塊向插件擴(kuò)展觸發(fā)模塊返回失敗,繼而插件擴(kuò)展觸發(fā)模塊向docker返回失敗。
由圖5的流程可以看到,本例子的容器插件中的驅(qū)動和設(shè)備選擇模塊,可以主要負(fù)責(zé)判斷是否要繼續(xù)觸發(fā)設(shè)備信息和驅(qū)動的收集獲取,如果指定版本的驅(qū)動并不存在,則不用繼續(xù)收集,直接向docker返回失敗即可,如果指定驅(qū)動存在或者未指定驅(qū)動,則可以觸發(fā)設(shè)備信息和驅(qū)動的收集。
第三階段:驅(qū)動和設(shè)備收集模塊的流程。
如圖6的示例,在步驟601中,驅(qū)動和設(shè)備收集模塊接收觸發(fā)請求。
本步驟中,驅(qū)動和設(shè)備收集模塊接收到驅(qū)動和設(shè)備選擇模塊的觸發(fā)。
在步驟602中,驅(qū)動和設(shè)備收集模塊判斷是否帶有指定的驅(qū)動版本。
如果判斷結(jié)果為否,即不帶驅(qū)動版本,用戶未指定,則可以執(zhí)行步驟604;否則,若判斷結(jié)果為是,則可以執(zhí)行步驟603。
在步驟603中,驅(qū)動和設(shè)備收集模塊判斷指定版本的驅(qū)動在緩存中是否存在。若存在,則執(zhí)行步驟604;否則,可以執(zhí)行步驟605。
在步驟604中,驅(qū)動和設(shè)備收集模塊由緩存中獲取最新的所述設(shè)備信息和驅(qū)動。本步驟中,獲取設(shè)備信息和驅(qū)動后,驅(qū)動和設(shè)備收集模塊可以將設(shè)備信息和驅(qū)動返回給驅(qū)動和設(shè)備選擇模塊,驅(qū)動和設(shè)備選擇模塊將設(shè)備信息和驅(qū)動返回給插件擴(kuò)展觸發(fā)模塊,最終由插件擴(kuò)展觸發(fā)模塊返回給docker進(jìn)行攜帶infiniband設(shè)備的容器的創(chuàng)建。
在步驟605中,驅(qū)動和設(shè)備收集模塊判斷是否首次收集該版本驅(qū)動。
若非首次收集,則說明該驅(qū)動不存在,可以直接執(zhí)行步驟608;若是首次收集,則可以執(zhí)行步驟606。
在步驟606中,驅(qū)動和設(shè)備收集模塊調(diào)用驅(qū)動設(shè)備查詢器收集設(shè)備信息和驅(qū)動。該驅(qū)動設(shè)備查詢器的結(jié)構(gòu)和工作原理,后續(xù)例子描述。
在步驟607中,驅(qū)動和設(shè)備收集模塊在接收到驅(qū)動設(shè)備查詢器返回的設(shè)備信息和驅(qū)動后,更新緩存中的驅(qū)動和設(shè)備信息。
本步驟中更新緩存后,驅(qū)動和設(shè)備收集模塊可以返回步驟603,再次判斷指定版本驅(qū)動是否在緩存中,若還是不存在,則依據(jù)上述流程描述,將返回失敗,當(dāng)然還可以是依次經(jīng)由上述的驅(qū)動和設(shè)備選擇模塊、插件擴(kuò)展觸發(fā)模塊,最終返回失敗給docker;若再次判斷時(shí)已經(jīng)存在,則依據(jù)上述流程描述,則將設(shè)備信息和驅(qū)動返回給docker即可。
在步驟608中,驅(qū)動和設(shè)備收集模塊返回創(chuàng)建失敗。
由圖6的流程可以看到,本例子的容器插件中的驅(qū)動和設(shè)備收集模塊,可以主要負(fù)責(zé)具體的設(shè)備信息和驅(qū)動的收集獲取,而且可以是優(yōu)先由緩存中獲取,緩存中沒有時(shí)可以調(diào)用驅(qū)動設(shè)備查詢器獲取。
在一個例子中,上述提到的驅(qū)動設(shè)備查詢器,可以作為驅(qū)動和設(shè)備收集模塊的一部分,主要負(fù)責(zé)獲取容器插件所在的處理設(shè)備上的目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動。圖7示例了該驅(qū)動設(shè)備查詢器的結(jié)構(gòu),如圖7所示,可以包括:版本維護(hù)器71、驅(qū)動信息管理器72、設(shè)備信息管理器73和物理設(shè)備調(diào)用器74。
例如,版本維護(hù)器71中可以維護(hù)有不同版本的infiniband設(shè)備的設(shè)備信息和驅(qū)動。并且,該版本維護(hù)器71中還可以維護(hù)不同版本的infiniband設(shè)備對應(yīng)的驅(qū)動信息映射鍵和設(shè)備信息映射鍵,通過映射鍵可以查詢驅(qū)動信息管理器72、設(shè)備信息管理器73,在驅(qū)動信息管理器72中存儲有驅(qū)動的描述和獲取方式,設(shè)備信息管理器73存儲有設(shè)備信息的描述和獲取方式。
當(dāng)驅(qū)動設(shè)備查詢器接收到調(diào)用請求后,可以先查詢請求獲取的驅(qū)動和設(shè)備信息是否存儲在版本維護(hù)器71中。如果存在,則可以直接返回給驅(qū)動和設(shè)備收集模塊;如果不存在,可以通過該版本的映射鍵,查詢驅(qū)動信息管理器72和設(shè)備信息管理器73,得到設(shè)備信息和驅(qū)動的獲取方式。接著,可以通過物理設(shè)備調(diào)用器74(例如,infiniband物理設(shè)備調(diào)用器)根據(jù)所述的獲取方式,獲得具體的設(shè)備信息和驅(qū)動。并且,還可以將獲取到的設(shè)備信息和驅(qū)動存儲至所述版本維護(hù)器71中,下次就可以直接由版本維護(hù)器71中獲取。
本例子中,驅(qū)動和設(shè)備收集模塊中可以自動運(yùn)行一個定時(shí)器,定時(shí)調(diào)用驅(qū)動設(shè)備查詢器來進(jìn)行驅(qū)動的定時(shí)檢查和更新,以保證物理驅(qū)動更新后能夠同步至容器插件中。這樣用戶創(chuàng)建容器時(shí)可以無需關(guān)心驅(qū)動版本和設(shè)備,最合適的驅(qū)動文件會靈活地注入容器內(nèi)部、相應(yīng)的設(shè)備會自動掛載至容器內(nèi)。同時(shí),通過驅(qū)動設(shè)備查詢器查詢當(dāng)前處理設(shè)備使用的目標(biāo)設(shè)備的版本,可以做到兼容和適配各種版本的infiniband設(shè)備。
為了實(shí)現(xiàn)本公開的容器創(chuàng)建方法,本公開還提供了一種容器創(chuàng)建裝置,該裝置可以應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,該裝置可以應(yīng)用于容器插件。如圖8所示,該裝置可以包括:觸發(fā)接收單元81、信息獲取單元82和信息反饋單元83。其中,需要說明的是,上述的三個單元可以是容器創(chuàng)建裝置在邏輯功能上的劃分,實(shí)際的裝置結(jié)構(gòu)設(shè)計(jì)中包括這三個單元對應(yīng)的邏輯功能即可,不一定嚴(yán)格按照這三個單元的劃分來設(shè)計(jì)。例如,圖3的容器插件中,插件擴(kuò)展觸發(fā)模塊可以相當(dāng)于上述的觸發(fā)接收單元81,可以實(shí)現(xiàn)觸發(fā)接收單元81對應(yīng)的邏輯功能;而信息獲取單元82的邏輯功能可以由圖3的驅(qū)動和設(shè)備選擇模塊、驅(qū)動和設(shè)備收集模塊功能實(shí)現(xiàn)。
觸發(fā)接收單元81,用于接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;
信息獲取單元82,用于根據(jù)觸發(fā)請求,獲取目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
信息反饋單元83,用于將所述設(shè)備信息和驅(qū)動返回給所述容器引擎,以使得所述容器引擎創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
在一個例子中,如圖9所示,所述信息獲取單元82,包括:
版本判斷子單元821,用于判斷插件觸發(fā)請求中是否包括指定的驅(qū)動版本;
信息收集子單元822,用于當(dāng)判斷結(jié)果為否,或者判斷結(jié)果為是且確定所述驅(qū)動版本的驅(qū)動存在時(shí),收集所述設(shè)備信息和驅(qū)動。
在一個例子中,信息收集子單元822,具體用于:當(dāng)判斷結(jié)果為否時(shí),則由緩存中獲取最新的所述設(shè)備信息和驅(qū)動;當(dāng)判斷結(jié)果為是,且確定所述驅(qū)動版本的驅(qū)動在所述緩存中存在時(shí),則獲取所述緩存中的設(shè)備信息和驅(qū)動;當(dāng)判斷結(jié)果為是,且確定所述驅(qū)動版本的驅(qū)動在緩存中不存在并且是首次收集時(shí),則調(diào)用驅(qū)動設(shè)備查詢器收集所述設(shè)備信息和驅(qū)動,并將收集到的設(shè)備信息和驅(qū)動放入所述緩存。
在一個例子中,信息收集子單元822,在用于調(diào)用驅(qū)動設(shè)備查詢器收集所述設(shè)備信息和驅(qū)動,并將收集到的設(shè)備信息和驅(qū)動放入所述緩存時(shí),包括:查詢所述驅(qū)動設(shè)備查詢器的版本維護(hù)器中是否存儲所述設(shè)備信息和驅(qū)動;若不存在,則由維護(hù)的信息管理器中獲取所述設(shè)備信息和驅(qū)動的獲取方式,并由物理設(shè)備調(diào)用器根據(jù)所述獲取方式獲得所述設(shè)備信息和驅(qū)動;將所述設(shè)備信息和驅(qū)動存儲至所述版本維護(hù)器。
為了實(shí)現(xiàn)本公開的容器創(chuàng)建方法,本公開還提供了一種容器創(chuàng)建裝置,該裝置可以應(yīng)用于攜帶目標(biāo)設(shè)備的容器的創(chuàng)建,該裝置可以應(yīng)用于容器引擎。如圖10所示,該裝置可以包括:請求發(fā)送模塊1001、信息接收模塊1002和容器創(chuàng)建模塊1003。
請求發(fā)送模塊1001,用于向容器插件發(fā)送插件觸發(fā)請求,所述插件觸發(fā)請求用于觸發(fā)所述容器插件獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;
信息接收模塊1002,用于接收所述容器插件返回的所述設(shè)備信息和驅(qū)動;
容器創(chuàng)建模塊1003,用于使用設(shè)備信息和驅(qū)動,創(chuàng)建攜帶目標(biāo)設(shè)備的容器。
上述實(shí)施例闡明的裝置或模塊,具體可以由計(jì)算機(jī)芯片或?qū)嶓w實(shí)現(xiàn),或者由具有某種功能的產(chǎn)品來實(shí)現(xiàn)。一種典型的實(shí)現(xiàn)設(shè)備為計(jì)算機(jī),計(jì)算機(jī)的具體形式可以是個人計(jì)算機(jī)、膝上型計(jì)算機(jī)、蜂窩電話、相機(jī)電話、智能電話、個人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件收發(fā)設(shè)備、游戲控制臺、平板計(jì)算機(jī)、可穿戴設(shè)備或者這些設(shè)備中的任意幾種設(shè)備的組合。
為了描述的方便,描述以上裝置時(shí)以功能分為各種模塊分別描述。當(dāng)然,在實(shí)施本公開時(shí)可以把各模塊的功能在同一個或多個軟件和/或硬件中實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本公開的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本公開可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本公開可采用在一個或多個其中包含有計(jì)算機(jī)指令的計(jì)算機(jī)可讀存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。例如,所述介質(zhì)上存儲的計(jì)算機(jī)指令被處理器執(zhí)行時(shí)可以實(shí)現(xiàn)以下步驟:接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;將所述設(shè)備信息和驅(qū)動返回給所述容器引擎,以使得所述容器引擎創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
在一個典型的配置中,本公開中的處理設(shè)備還可以包括一個或多個處理器(cpu)、存儲器,以及存儲在存儲器上并可在處理器上運(yùn)行的計(jì)算機(jī)指令,所述計(jì)算機(jī)指令包括:用于實(shí)現(xiàn)容器插件的插件指令、以及用于實(shí)現(xiàn)容器引擎的引擎指令。
所述處理器通過執(zhí)行所述插件指令,用于實(shí)現(xiàn)如下步驟:接收用于創(chuàng)建容器的容器引擎發(fā)送的插件觸發(fā)請求;根據(jù)所述觸發(fā)請求,獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;將所述設(shè)備信息和驅(qū)動返回給所述容器引擎;
所述處理器通過執(zhí)行所述引擎指令,用于實(shí)現(xiàn)如下步驟:向容器插件發(fā)送插件觸發(fā)請求,所述插件觸發(fā)請求用于觸發(fā)所述容器插件獲取所述目標(biāo)設(shè)備的設(shè)備信息和驅(qū)動;接收所述容器插件返回的設(shè)備信息和驅(qū)動;使用所述設(shè)備信息和驅(qū)動,創(chuàng)建攜帶所述目標(biāo)設(shè)備的容器。
以上所述僅為本公開的較佳實(shí)施例而已,并不用以限制本公開,凡在本公開的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本公開保護(hù)的范圍之內(nèi)。