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