用于容器部署的主機調(diào)度方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實施例提供一種用于容器部署的主機調(diào)度方法及系統(tǒng),該方法包括:獲取待部署容器的配置信息和對應(yīng)的主機集群;獲取所述主機集群中在線的主機列表;根據(jù)所述配置信息和所述主機列表中的主機的資源信息,生成可部署的主機列表。通過本發(fā)明實施例的方法及系統(tǒng),能夠?qū)⑷萜骱侠淼牟渴鹪谶m合的主機上,實現(xiàn)主機資源的充分和平衡利用。
【專利說明】
用于容器部署的主機調(diào)度方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明實施例涉及容器部署技術(shù)領(lǐng)域,尤其涉及一種用于容器部署的主機調(diào)度方 法及系統(tǒng)。
【背景技術(shù)】
[0002] Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到 一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上,也可以實現(xiàn)虛擬化。容器是完 全使用沙箱機制,相互之間不會有任何接口,幾乎沒有性能開銷,可以很容易地在機器和數(shù) 據(jù)中心中運行。最重要的是,他們不依賴于任何語言、框架、包括系統(tǒng)。
[0003] 隨著Docker技術(shù)在云計算中的推廣,越來越多的應(yīng)用服務(wù)開始部署在容器中。由 于應(yīng)用服務(wù)所在的主機配置有所區(qū)別,內(nèi)存、CPU、硬盤及網(wǎng)絡(luò)環(huán)境都有一定的區(qū)別,因而, 如何根據(jù)一定的部署策略,將容器部署到合適的主機中,以滿足不同的容器的部署需求,是 目前業(yè)界迫切需要解決的問題。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明實施例提供一種用于容器部署的主機調(diào)度方法及系統(tǒng),用以解決目前不能 根據(jù)部署需求將容器合理部署到對應(yīng)主機的問題,實現(xiàn)主機資源的充分和平衡利用。
[0005] 本發(fā)明實施例提供一種用于容器部署的主機調(diào)度方法,包括:
[0006] 獲取待部署容器的配置信息和對應(yīng)的主機集群;
[0007] 獲取所述主機集群中在線的主機列表;
[0008] 根據(jù)所述配置信息和所述主機列表中的主機的資源信息,生成可部署的主機列 表。
[0009] 本發(fā)明實施例提供一種用于容器部署的主機調(diào)度系統(tǒng),包括:信息獲取模塊和列 表生成模塊,
[0010] 所述信息獲取模塊配置為獲取待部署的容器的配置信息和對應(yīng)的主機集群,并獲 取所述主機集群中的在線的主機列表;
[0011] 所述列表生成模塊配置為根據(jù)所述配置信息和所述在線的主機列表中的主機的 資源信息,生成可部署的主機列表。
[0012] 本發(fā)明實施例提供的用于容器部署的主機調(diào)度方法及系統(tǒng),將具有相同或相似配 置的一組主機設(shè)定為主機集群,通過將需要部署容器的配置信息與對應(yīng)的主機集群中的相 應(yīng)主機信息進行匹配,獲得與需要部署容器的配置信息相適應(yīng)的可以部署容器的主機列 表,以將容器部署在獲得的主機列表包含的主機上,從而保證了一個集群下主機資源的平 均分配和合理利用。
【附圖說明】
[0013] 為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例中所需要使用的 附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域 普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0014] 圖1為本發(fā)明用于容器部署的主機調(diào)度方法實施例流程圖;
[0015] 圖2為圖1所示方法中生成可部署的主機列表的方法實施例流程圖;
[0016] 圖3為圖1所示方法中生成可部署的主機列表的方法實施例流程圖;
[0017] 圖4為本發(fā)明用于容器部署的主機調(diào)度系統(tǒng)實施例結(jié)構(gòu)示意圖。
【具體實施方式】
[0018] 為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例 中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是 本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員 在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0019] 容器包括端口映射(即exports屬性)、目錄映射(即volume屬性)和最大內(nèi)存 (即mem屬性)的特性。端口映射是指,在創(chuàng)建容器時,可以指定容器的特定的端口和主機的 某個端口做映射。比如,設(shè)定容器的22端口與主機的2222端口做映射,映射后即可以通過 訪問主機的2222端口,間接地訪問容器的22端口。如果不指定主機的端口,則容器在啟動 時,是由docker隨機分配一個端口與容器的端口做映射。由于一個端口只能給一個服務(wù)開 放,假設(shè)一個容器已經(jīng)設(shè)定了 22端口和主機的2222端口做映射,并且容器已經(jīng)啟動,那么, 另一個容器如果也設(shè)定了 22端口和此主機的2222端口做映射時,這個容器就會因為2222 端口已被占用而無法啟動。目錄映射是指,允許容器的目錄與主機的目錄做映射,同時可以 指定該映射的目錄是否是可寫。比如,設(shè)定容器的/srv目錄與主機的/letv/srv目錄做映 射,并且設(shè)定為可寫,那么,當(dāng)在容器內(nèi)部向/srv目錄寫文件或者查看文件時,等同于在主 機的/letv/srv目錄做相同的操作。而如果另一個其他業(yè)務(wù)的容器同樣設(shè)定了/srv目錄與 此主機的/letv/srv目錄做映射,并且也設(shè)定了可寫權(quán)限,那么,這兩種不同業(yè)務(wù)的容器同 時操作相同的目錄,很可能會導(dǎo)致數(shù)據(jù)的不一致,造成數(shù)據(jù)的紊亂,這是不允許的。最大內(nèi) 存是指,可以給容器設(shè)定最大內(nèi)存,容器的最大內(nèi)存是指容器內(nèi)進程使用的最大內(nèi)存,一旦 容器內(nèi)進程使用的最大內(nèi)存超過設(shè)定的最大內(nèi)存,容器會根據(jù)優(yōu)先級殺死特定的進程。因 此,在部署容器時,需要考慮主機上的內(nèi)存是否足夠用于部署容器。由此可見,容器的這些 特性會決定或影響容器是否能夠部署在特定的主機上。
[0020] 基于容器的相關(guān)特性,本發(fā)明實施例提供了一種用于容器部署的主機調(diào)度方法, 用于根據(jù)內(nèi)存來進行容器部署,以均衡主機的內(nèi)存負載。同時,根據(jù)預(yù)存的容器配置信息和 預(yù)設(shè)的主機集群資源信息進行主機調(diào)度,也便于服務(wù)的監(jiān)控和日志分析。圖1示意性地顯 示了本發(fā)明實施例的用于容器部署的主機調(diào)度方法的流程。如圖1所示,該方法包括:
[0021] 步驟S11 :預(yù)設(shè)待部署容器的配置信息和主機集群并存儲。
[0022] 根據(jù)待部署容器的配置信息,將具有相同或相似配置的一組主機設(shè)定為一個集 群,容器的部署按照集群中的主機資源情況進行部署,以均衡主機資源。同時,在部署以前, 將待部署的容器、容器配置信息、對應(yīng)的主機集群以及主機集群中的主機的資源信息預(yù)先 存儲到數(shù)據(jù)庫中。其中,相同或相似配置的一組主機包括cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)及所在機房 相同或相似。集群中每個主機都對應(yīng)有相應(yīng)的主機資源信息,包括剩余容器內(nèi)存、已經(jīng)被占 用的端口列表和已經(jīng)被占用的并且是可寫的目錄列表。剩余容器內(nèi)存用于記錄它最多可以 給容器分配的內(nèi)存容量。
[0023] 步驟S12 :獲取待部署容器的配置信息和對應(yīng)的主機集群中的在線的主機列表。
[0024] 從數(shù)據(jù)庫中讀取當(dāng)前待部署容器及其對應(yīng)的配置信息和主機集群。其中,配置信 息以json格式保存在數(shù)據(jù)庫中,包括待部署的容器的目錄映射、端口映射、容器內(nèi)存和需 要部署的數(shù)量等。其中,設(shè)定的容器內(nèi)存為mem的值,需要部署的容器數(shù)量為Containernum 的值,容器的目錄映射信息以如下的json格式表示:
[0025]
[ { -host": "/letv/srv'' ., ''rcT:true, ''container": "/srv" ! ]
[0026] 需要說明的是,一個容器可以設(shè)置多個目錄映射,container代表容器的目錄, host代表主機的目錄,ro代表是否是只讀權(quán)限,host如果設(shè)置為None,則表示host的映射 目錄由docker進行分配(docker分配的目錄是按照目錄前綴+容器的uuid進行設(shè)置,因 為容器的uuid是全局唯一的,所以不需要擔(dān)心目錄重復(fù)的問題)。
[0027] 端口映射信息以如下的json格式表示:
[0028]
[ { "container5,:22, "host":2222 ! ]
[0029] 需要說明的是,一個容器可以設(shè)置多個端口映射,container字段代表的是容器的 端口,host字段代表的是主機的端口,host字段如果設(shè)置為None,則代表由docker產(chǎn)生一 個隨機端口與容器的端口進行映射(docker分配的端口會根據(jù)現(xiàn)有端口的情況進行分配, 能保證端口不會被占用)。
[0030] 待部署容器對應(yīng)的主機集群中包括多個主機,該集群下的主機及其資源信息也同 時保存在數(shù)據(jù)庫中。當(dāng)獲取到待部署容器對應(yīng)的主機集群(如可以是集群名稱或ID形式 對應(yīng)存儲在待部署容器的數(shù)據(jù)庫記錄中)后,從數(shù)據(jù)庫中獲取該主機集群中在線(即主機 能夠正常提供服務(wù),包括該主機上運行的docker服務(wù)正常、網(wǎng)絡(luò)正常等)的主機列表,比如 從數(shù)據(jù)庫中獲取到在線的主機列表為[hostl, host2, host3]。
[0031] 步驟S13 :根據(jù)端口映射的配置信息,生成每個主機需要開放的端口列表。
[0032] 根據(jù)讀取的端口映射的配置信息,獲取待部署的容器設(shè)定的與主機進行映射的特 定端口,得到每個主機需要開放的端口,添加到每個主機需要開放的端口列表中,將該端口 列表設(shè)置為need_host_exports變量名。例如,如果讀取到以下的exports (即端口)映射 配置信息:
[0033]
[ { llcontainer,':22, llhost,':2222 h "container":33, "hosr:3333 h {: ltcontainer,':44. "host":None ]
[0034] 讀取以上配置信息中的host字段進行判斷,當(dāng)host字段取值不為None時,獲得 每個主機需要開放的與容器進行映射的特定端口號,添加到變量名為need_host_exports 的每個主機需要開放的端口列表,從而得到需要開放的端口列表為need_host_exports = [2222,3333]〇
[0035] 步驟S14:根據(jù)目錄映射的配置信息,生成每個主機需要映射的可寫目錄列表。
[0036] 根據(jù)讀取的目錄映射的配置信息,獲取需要部署的容器設(shè)定的與主機進行映射 的可寫目錄,得到每個主機需要映射的可寫目錄,添加到每個主機需要映射的可寫目錄列 表中,將該可寫目錄列表設(shè)置為need_host_volumes變量名。例如,如果讀取到以下的 volumes (即目錄)映射配置信息:
[0037]
[ { "host":"/lei'v/data", "ro":false, "containefVV'data" I, { "h.osf'.:'7letv/data", "rcT:true, "coiitaine:r":"/srv" f - { "hosf^None, tkro,5:true, "container":'7test" ]
[0038] 讀取以上配置信息中的host字段進行判斷,當(dāng)host字段取值不為None時,讀取 ro字段進行判斷,當(dāng)ro同時取值為false時,獲得每個主機需要映射的與容器對應(yīng)的可寫 目錄,添加到變量名為need_host_volumes的每個主機需要映射的可寫目錄列表,從而得 到需要映射的可寫目錄列表為need_host_volumes = [ "/letv/data"]〇
[0039] 步驟S15 :對在線的主機列表進行排序。
[0040] 將獲得的在線的可用主機列表如[hostl, host2, host3],按照每個主機的資源信 息進行排序,優(yōu)選地,按剩余容器內(nèi)存從大到小進行排序,得到新的排序后的在線主機列表 如[host3,host2, hostl]。這樣在遍歷在線主機列表進行待部署容器能夠部署的主機的選 擇時,能夠保證優(yōu)先使用剩余容器內(nèi)存最大的主機進行部署,即依次讀取在線主機列表中 主機進行資源匹配時,優(yōu)先讀取剩余容器內(nèi)存最大的hostl。
[0041] 步驟S16 :根據(jù)配置信息和在線的主機列表中主機的資源信息,生成可部署的主 機列表。
[0042] 根據(jù)需要部署的容器數(shù)量,當(dāng)?shù)玫降目刹渴鸬闹鳈C的數(shù)量小于需要部署的容器 數(shù)量時,依次從排序后的在線主機列表中獲取一個主機,根據(jù)從配置信息得到的容器內(nèi)存 mem、每個主機需要開放的端口列表need_host_exports和每個主機需要映射的可寫目錄 列表need_host_volumes,與在線主機列表中獲取的一個主機的剩余容器內(nèi)存、已經(jīng)被占用 的端口列表和已經(jīng)被占用的可寫目錄列表進行匹配,根據(jù)匹配的判斷結(jié)果,如果當(dāng)前獲取 的一個主機的資源滿足條件:剩余容器內(nèi)存大于容器內(nèi)存、已經(jīng)被占用的端口列表與每個 主機需要開放的端口列表中的端口全部不同,且已經(jīng)被占用的可寫目錄列表與每個主機需 要映射的可寫目錄列表不存在相互包含的目錄,則將滿足條件的當(dāng)前的主機添加到可以部 署容器的主機列表,否則,將不滿足部署條件的當(dāng)前的主機從在線主機列表中刪除。循環(huán)以 上操作,直到可部署主機列表中的主機數(shù)量達到需要部署的容器數(shù)量,以得到可部署的主 機列表。
[0043] 圖2示意性地顯示了一種實施方式的生成可部署的主機列表的方法流程,如圖2 所示,該發(fā)明實施例的方法包括:
[0044] 步驟S160 :初始化變量信息,遍歷在線的主機列表。
[0045] 設(shè)置一個compute變量并初始化為空列表,用于記錄將要計算出的可以部署容器 的主機。設(shè)置一個deploy_container_num變量并初始化為0,用于記錄可以部署容器的主 機數(shù)目(即滿足部署條件的主機數(shù)目),該變量的值即是可部署的主機列表compute的長 度。在變量初始化完成后,循環(huán)遍歷排序后的在線主機列表,以對集群中可用的主機按內(nèi)存 大小進行分別評估,判斷是否適合當(dāng)前的容器進行部署。
[0046] 步驟S161 :判斷可以部署容器的主機列表的數(shù)目是否等于容器數(shù)量。
[0047] 在每一輪循環(huán)開始時,首先獲取可以部署容器的主機列表的數(shù)目即變量cbpl〇y_ container_num的值,與需要部署的容器的數(shù)量(即獲取的Containernum的值)進行比較, 判斷deploy_container_num是否等于Containernum,如果相等,則表示可以部署容器的主 機列表中主機的數(shù)目已經(jīng)達到了需要部署的容器的數(shù)目,說明針對需要部署的容器在集群 中選擇合適的主機的處理已經(jīng)完成,則跳出循環(huán),結(jié)束操作,輸出可以部署容器的主機列表 compute。如果不相等,則繼續(xù)進行步驟S162的處理。
[0048] 步驟S162 :判斷在線主機列表的數(shù)目是否為0。
[0049] 獲取在線主機列表的長度,判斷是否為0,如果為0,由于通過步驟S161已得到可 以部署容器的主機列表數(shù)目deploy_container_num與需要部署的容器數(shù)量Containernum 不相等,則說明當(dāng)前這個主機集群下的主機沒有足夠的資源進行Containernum個數(shù)量的 容器部署,則進行報錯(如輸出異常或錯誤提示信息)并跳出循環(huán)。如果不為0,則進行步 驟 S163。
[0050] 步驟S163 :獲取在線主機列表中的第一個主機的相應(yīng)信息。
[0051] 依照列表讀取的順序,從在線主機列表中獲取當(dāng)前在列表最首端位置的主機(即 列表中的第一個主機)如hostl,并從數(shù)據(jù)庫中讀取該主機對應(yīng)的剩余容器內(nèi)存、已經(jīng)被占 用的端口列表和已經(jīng)被占用的可寫目錄列表,進行步驟S164的處理。由于在線主機列表是 按剩余容器內(nèi)存由大到小排序后的列表,獲取的首端位置的第一個主機就是剩余容器內(nèi)存 最大的主機,可以保證將容器優(yōu)先部署在剩余容器內(nèi)存最大的主機上,以更好的利用現(xiàn)有 的資源,達到資源的最大化利用。
[0052] 步驟S164 :判斷主機的剩余容器內(nèi)存是否小于容器內(nèi)存。
[0053] 將該主機的剩余容器內(nèi)存與需要部署的容器的內(nèi)存(即mem的值)進行比較,判 斷剩余容器內(nèi)存是否小于容器內(nèi)存,如果小于,則說明這個主機已經(jīng)沒有足夠的內(nèi)存資源 按當(dāng)前容器的需求進行部署,則將該主機如hostl從在線主機列表中刪除,并跳轉(zhuǎn)至步驟 S161進行下一輪循環(huán)的判斷。如果不小于則繼續(xù)進行步驟S165的處理。由此,可以實現(xiàn)不 允許每個主機上容器的總內(nèi)存超過主機的最大內(nèi)存,以造成主機的負載超負荷,同時也可 避免容器因內(nèi)存不足而殺死特定進程的問題。
[0054] 步驟S165 :判斷主機已經(jīng)被占用的端口列表中是否至少存在一個端口與主機需 要開放的端口相同。
[0055] 將主機已經(jīng)被占用的端口列表中的端口依次與主機需要開放的端口列表need_ host_exports中的端口進行比較,判斷已經(jīng)被占用的端口列表中是否至少有一個端口是與 主機需要開放的端口相同的,如果存在有相同的端口,則說明該主機的特定端口已經(jīng)被占 用,該容器如果部署到當(dāng)前主機上,將會因為端口沖突而無法正常啟動,則將該主機從在線 主機列表中刪除,并跳轉(zhuǎn)至步驟S161進行下一輪的判斷,以保證用于部署的主機,支持進 行容器與主機端口映射的設(shè)定。如果不存在相同的端口,則進行步驟S166。
[0056] 步驟S166 :判斷主機已經(jīng)被占用的可寫目錄列表中是否至少存在一對目錄與主 機需要映射的可寫目錄互相包含。
[0057] 將主機已經(jīng)被占用的可寫目錄列表中的目錄依次與主機需要映射的可寫目錄列 表need_host_volumes中的目錄進行比較,判斷已經(jīng)被占用的可寫目錄列表中是否至少有 一個目錄是與主機需要開放的目錄是互相包含的,如果存在有互相包含的目錄,則說明該 主機的特定目錄已經(jīng)被占用且可以寫入數(shù)據(jù),該容器如果部署到當(dāng)前主機上,將會因為可 能同時對該特定目錄進行寫操作,而造成數(shù)據(jù)紊亂,因此需將該主機從在線主機列表中刪 除,并跳轉(zhuǎn)至步驟S161進行下一輪的判斷,以保證用于部署的主機,支持進行容器與主機 可寫目錄映射的設(shè)定。如果不存在互相包含的目錄,則進行步驟S166。
[0058] 其中,任何一對目錄是互相包含的關(guān)系是指,目錄a在目錄b中,或者目錄b在目 錄a中。如"/letv/data"與"/letv",由于目錄"/letv/data"在目錄"/letv"中,因此兩 者是互相包含的關(guān)系,進行寫數(shù)據(jù)操作時,會因此該目錄下的數(shù)據(jù)紊亂。
[0059] 步驟S167 :將主機的剩余容器內(nèi)存減去容器內(nèi)存,并將主機添加到可以部署容器 的主機列表中。
[0060] 如果內(nèi)存、端口和目錄都滿足容器的部署需求,則說明當(dāng)前的主機可以部署容器, 此時,首先將當(dāng)前主機的剩余容器內(nèi)存減去容器內(nèi)存mem,將當(dāng)前主機添加至可以部署容器 的列表compute中,并對deploy_container_num重新賦值(可以是在每一輪循環(huán)開始時直 接獲取compute的長度,也可以是每次在此步驟中將其自增一,通過常用的技術(shù)手段即可 實現(xiàn),因此不贅述),然后跳轉(zhuǎn)至步驟S161進行下一輪的循環(huán)。
[0061] 通過圖2的實施例方法,即可以對需要部署的容器的集群中的所有主機進行遍歷 和判斷,以得到可以部署容器的主機列表。得到的可以部署容器的主機列表中的主機,能夠 支持容器與主機的特定端口或可寫目錄映射,且能夠避免容器因內(nèi)存不足而殺死進程。由 此就可以完成根據(jù)容器需求和主機配置進行容器部署,以最大化利用主機的基礎(chǔ)資源和防 止端口及目錄沖突。同時,將集群中的主機按內(nèi)存進行排序,根據(jù)其內(nèi)存進行容器部署的策 略,也能夠保證優(yōu)先將容器部署在剩余容器內(nèi)存最大的主機上,以實現(xiàn)主機集群中內(nèi)存資 源的平均分配。
[0062] 圖3示意性地顯示了另一種實施方式的生成可部署的主機列表的方法流程,如圖 3所示,該發(fā)明實施例的方法與圖2所示的實施例方法的處理過程基本相同,不同在于在步 驟S167之后,圖3所示的發(fā)明實施例還包括:
[0063] 步驟S168 :判斷是否滿足主機需要映射的可寫目錄列表的長度不為0或者主機需 要開放的端口列表的長度不為〇。
[0064] 添加一個滿足部署條件的主機后,獲取主機需要映射的可寫目錄列表need_h〇St_ volumes的長度,并獲取主機需要開放的端口列表need_host_exports的長度,判斷兩者是 否有一個不為0,如果need_host_exports的長度不為0或者need_host_volumes的長度不 為〇,則說明容器設(shè)定了固定的主機端口或者可寫目錄,那么下一次相同應(yīng)用的容器就不能 再次部署在這個主機上,因為該主機的相應(yīng)端口或可寫目錄已經(jīng)被占用。因此,如果任何一 個長度不為0,則將已添加到可部署主機列表的當(dāng)前滿足部署條件的主機從在線主機列表 刪除,并繼續(xù)進行步驟S161的下一輪循環(huán)。如果兩者的長度都為0,則說明當(dāng)前的主機還有 潛在的可能能夠繼續(xù)部署容器,則將當(dāng)前滿足部署條件的主機從在線主機列表的當(dāng)前位置 (每一輪都是取首部即第一個位置的主機進行判斷的)移除,放到在線主機列表的尾部,并 繼續(xù)進行步驟S161的下一輪循環(huán)。由此,可以保證盡量將容器的分配平均化,從而避免集 群中某些主機資源閑置,而某些主機卻負載過高的不良。
[0065] 圖4示意性地顯示了本發(fā)明一種實施方式的容器調(diào)度系統(tǒng)的實施例結(jié)構(gòu)。如圖4 所示,本發(fā)明實施例的容器調(diào)度系統(tǒng)包括信息預(yù)設(shè)模塊20、信息獲取模塊40和列表生成模 塊60。信息預(yù)設(shè)模塊20配置為根據(jù)待部署的容器信息,設(shè)定主機集群,并存儲待部署的容 器的配置信息和對應(yīng)的主機集群的信息。其中,容器的配置信息包括目錄映射信息、端口映 射信息、容器內(nèi)存和需要部署的容器數(shù)量。主機集群是根據(jù)待部署容器的配置需求,將具有 相同或相似配置的一組主機設(shè)定為一個主機集群,以在該集群中部署該容器。主機集群中 包括多個相同或相似配置的主機,通過信息預(yù)設(shè)模塊20將待部署的容器、對應(yīng)的配置信息 和對應(yīng)的主機集群存儲在數(shù)據(jù)庫中。主機集群包括的主機及其每個主機的資源信息,也對 應(yīng)存儲在數(shù)據(jù)庫中。各主機的資源信息包括主機的剩余容器內(nèi)存、已占用的端口列表和已 占用的可寫目錄列表。信息獲取模塊40配置為獲取待部署的容器的配置信息和主機集群 中在線的主機列表。在進行容器部署時,通過信息獲取模塊40從數(shù)據(jù)庫中獲取待部署容器 對應(yīng)的配置信息和主機集群信息,并讀取該集群下的在線主機列表。列表生成模塊60配 置為根據(jù)容器的配置信息和在線主機列表中主機的資源信息,生成可以部署容器的主機列 表。列表生成模塊60根據(jù)待部署的容器數(shù)量循環(huán)遍歷在線主機列表中的主機信息,判斷容 器內(nèi)存與主機中剩余容器內(nèi)存、目錄映射信息與主機中已經(jīng)被占用的可寫目錄列表、及端 口映射信息與主機中已經(jīng)被占用的端口列表的匹配情況,以生成滿足容器配置需求的可以 部署的主機列表。
[0066] 如圖4所示,信息獲取模塊40包括排序單元401、端口列表生成單元402、可寫目 錄列表生成單元403。排序單元401配置為將在線主機列表按照主機的資源信息排序。優(yōu)選 地,排序單元401將在線主機列表按照剩余容器內(nèi)存由大到小的順序排序。端口列表生成 單元402配置為根據(jù)獲取的容器的端口映射的配置信息,生成主機需要開放的端口列表。 可寫目錄列表生成單元402配置為根據(jù)獲取的容器的目錄映射的配置信息,生成主機需要 映射的可寫目錄列表。通過將在線主機列表按剩余容器內(nèi)存排序,可以實現(xiàn)將容器優(yōu)先部 署在剩余容器內(nèi)存最大的主機上,以保證集群中內(nèi)存資源的平均分配。而通過獲取每個主 機需要開放的端口列表和需要映射的可寫目錄列表,與主機已占用的端口和可寫目錄進行 比較,剔除已經(jīng)被占用相應(yīng)端口或可寫目錄的主機,能夠滿足容器部署中對設(shè)定特定端口 映射和可寫目錄映射的需求,避免因端口和可寫目錄的映射沖突而無法啟動容器的問題。
[0067] 如圖4所示,優(yōu)選地,列表生成模塊60可以包括主機處理單元601。主機處理單元 601配置為根據(jù)生成的主機需要開放的端口列表與主機需要映射的可寫目錄列表的長度, 將主機從在線主機列表中移除或移動至在線主機列表的末尾。將已經(jīng)部署過的且能夠支持 設(shè)定容器與主機端口和目錄映射的主機,移動到在線主機列表的末尾,能夠均衡集群中主 機資源的利用,避免有些主機資源過于閑置,而有些主機資源又負載過重的問題。
[0068] 本發(fā)明實施例系統(tǒng)各模塊及單元的詳細實現(xiàn),可參照前文方法的敘述,在此不再 贅述。同時,需要說明的是,本發(fā)明實施例中可以通過硬件處理器來實現(xiàn)相關(guān)功能模塊。
[0069] 本發(fā)明實施例的系統(tǒng)及方法,通過將內(nèi)存不足或發(fā)生端口沖突或發(fā)生可寫目錄沖 突的主機從在線主機列表移除,保證了將容器部署在合適的主機上,以滿足容器部署中對 設(shè)定特定映射端口和可寫目錄的需求,也避免了容器因內(nèi)存不足而殺死進程的問題。同時, 通過將集群中的主機按剩余容器內(nèi)存進行排序,實現(xiàn)了基于內(nèi)存來進行部署容器的策略, 保證了主機集群中內(nèi)存資源的平均分配。而將分配后的沒有端口或目錄沖突的潛在可再部 署主機移動至列表的末尾,在一定程度上防止了一個集群下主機資源的過分閑置或負載過 高的情況,保證了集群中主機資源的充分和平衡利用。
[0070] 以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可 以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單 元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其 中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性 的勞動的情況下,即可以理解并實施。
[0071] 通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實施方式可 借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上 述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該 計算機軟件產(chǎn)品可以存儲在計算機可讀存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指 令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個實施 例或者實施例的某些部分所述的方法。
[0072] 最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡 管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然 可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精 神和范圍。
【主權(quán)項】
1. 一種用于容器部署的主機調(diào)度方法,其特征在于,包括: 獲取待部署容器的配置信息和對應(yīng)的主機集群; 獲取所述主機集群中在線的主機列表; 根據(jù)所述配置信息和所述主機列表中的主機的資源信息,生成可部署的主機列表。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 根據(jù)所述主機的資源信息對所述在線的主機列表排序。3. 根據(jù)權(quán)利要求2所述的方法,其中,所述配置信息包括目錄映射信息、端口映射信 息、容器內(nèi)存和需要部署的容器數(shù)量; 所述主機的資源信息包括主機的剩余容器內(nèi)存、已占用的端口列表和已占用的可寫目 錄列表。4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)所述主機的占用信息對所述在 線的主機列表排序包括: 將所述在線的主機列表按照主機的剩余容器內(nèi)存由大到小進行排序。5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)所述配置信息和所述主機列表 中的主機的資源信息,生成可部署的主機列表包括: 根據(jù)所述目錄映射信息生成主機需要映射的可寫目錄列表; 根據(jù)所述端口映射信息生成主機需要開放的端口列表; 依次獲取所述在線的主機列表中的主機的資源信息,進行匹配處理,將滿足條件的主 機添加到所述可部署的主機列表,直到所述可部署的主機列表中的主機數(shù)量達到與所述需 要部署的容器數(shù)量相等。6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述依次獲取所述在線的主機列表中的 主機的資源信息,進行匹配處理,將滿足條件的主機添加到所述可部署的主機列表包括: 判斷主機的資源信息是否滿足:剩余容器內(nèi)存大于所述容器內(nèi)存、已占用的可寫目錄 列表與所述主機需要映射的可寫目錄列表中不存在相互包含的目錄、已占用的端口列表與 所述主機需要開放的端口列表中不存在相同的端口, 同時滿足以上條件,則將滿足條件的主機添加至所述可部署的主機列表,并修改所述 滿足條件的主機的剩余容器內(nèi)存,否則,從所述在線的主機列表中刪除不滿足條件的主機。7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,在將滿足條件的主機添加至所述可部署 的主機列表之后還包括: 判斷所述主機需要開放的端口列表與所述主機需要映射的可寫目錄列表是否至少其 中之一的列表長度不為零,如果至少其中之一的列表長度不為零,則將所述滿足條件的主 機從所述在線的主機列表中刪除,否則將所述滿足條件的主機移動至所述在線的主機列表 的末尾。8. -種用于容器部署的主機調(diào)度系統(tǒng),其特征在于,包括信息獲取模塊和列表生成模 塊, 所述信息獲取模塊配置為獲取待部署的容器的配置信息和對應(yīng)的主機集群,并獲取所 述主機集群中的在線的主機列表; 所述列表生成模塊配置為根據(jù)所述配置信息和所述在線的主機列表中的主機的資源 信息,生成可部署的主機列表。9. 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述配置信息包括目錄映射信息、端口映 射信息、容器內(nèi)存和容器數(shù)量,所述資源信息包括剩余容器內(nèi)存、已占用的端口列表和已占 用的可寫目錄列表; 所述信息獲取模塊包括排序單元,配置為根據(jù)所述資源信息對所述在線的主機列表排 序。10. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述信息獲取模塊還包括端口列表生成 單元和可寫目錄列表生成單元, 所述端口列表生成單元配置為根據(jù)所述端口映射信息生成主機需要開放的端口列 表; 所述可寫目錄列表生成單元配置為根據(jù)所述目錄映射信息生成主機需要映射的可寫 目錄列表; 所述列表生成模塊包括主機處理單元,所述主機處理單元配置為根據(jù)所述主機需要開 放的端口列表與所述主機需要映射的可寫目錄列表的長度,將可部署的主機從所述在線的 主機列表中刪除或移動至所述在線的主機列表的末尾。
【文檔編號】G06F9/44GK105893010SQ201510790410
【公開日】2016年8月24日
【申請日】2015年11月17日
【發(fā)明人】張 杰
【申請人】樂視云計算有限公司