最近Docker公司開源了Docker集群管理和容器編排工具SwarmKit,其主要功能包括節(jié)點發(fā)現(xiàn)、基于raft算法的一致性和任務調度等。基本概念服務器上運行SwarmKit工具的swarmd命令后,即可將其加入到服務器集群中,該服務器就成為集群中的一個節(jié)點。SwarmKit將節(jié)點分為兩類:工作節(jié)點負責通過執(zhí)行器運行任務。SwarmKit的默認執(zhí)行器為Docker容器執(zhí)行器(Docker Container Executor);
管理節(jié)點負責接收和響應用戶的請求,將集群狀態(tài)調節(jié)成最終狀態(tài)。
用戶可以動態(tài)調整節(jié)點的角色。任務被組合成為服務,服務定義了任務類型和任務運行和更新的方式(如任務運行數(shù)量、啟動間隔等)。特性服務編排SwarmKit在服務編排方面的特性主要有:服務狀態(tài)一致性:SwarmKit會不斷對比服務期望狀態(tài)和實際狀態(tài),發(fā)現(xiàn)二者不符時(如服務擴容、節(jié)點失效),SwarmKit會自動將服務中的任務調度到其他節(jié)點。
服務類型:目前SwarmKit支持兩種服務類型
復制型服務(Replicated Services),針對這類服務SwarmKit會在節(jié)點上啟動期望數(shù)量的副本;
全局服務(Global Services),這類服務SwarmKit會在所有可用幾點上啟動一個任務;
配置項升級:用戶可以在任何時候修改服務的一個或多個配置。當配置被修改后,SwarmKit會協(xié)調升級服務中的所有任務,默認的升級策略是批量同時升級。目前支持的升級策略選項有:
并行度:定義并行更新的任務數(shù)量;
延遲:設置一組更新完成之后的最小等待時間。當配置升級時,SwarmKit會重啟任務,并且等待任務狀態(tài)為運行中,再等待配置的延遲后,繼續(xù)執(zhí)行后續(xù)的更新批次;
重啟策略:用戶可以定制重啟的條件、延遲和最大嘗試次數(shù)。SwarmKit會檢測任務狀態(tài),并按照這些配置進行重啟,同時SwarmKit會決定是否在不同節(jié)點啟動任務,避免失效節(jié)點對服務產生影響。
調度SwarmKit在調度功能上功能有:資源感知:SwarmKit能夠感知節(jié)點上的資源,并以此分配和執(zhí)行任務。
資源約束:用戶可以通過約束表達式,將任務約束到符合表達式的節(jié)點上。對節(jié)點的約束條件包括節(jié)點ID、名稱和標簽等。
調度策略:目前SwarmKit實現(xiàn)的調度策略是在滿足約束條件的前提下,盡可能的分配到負載最低的節(jié)點。
集群管理SwarmKit對于集群及其節(jié)點的管理支持:狀態(tài)存儲:SwarmKit在內存中維護集群的狀態(tài),并能夠在集群狀態(tài)發(fā)生異常時迅速作出調整;
拓撲狀態(tài)管理:SwarmKit支持通過API或者命令行動態(tài)修改節(jié)點角色;
節(jié)點管理:SwarmKit API支持用戶修改節(jié)點狀態(tài)。例如可以將節(jié)點狀態(tài)設置為中止(Paused),以避免在該節(jié)點上創(chuàng)建新的任務;或者設置為枯竭(Drained)狀態(tài),除了禁止創(chuàng)建新任務外,當前節(jié)點上的其他任務也會被調度到其他節(jié)點上。
總結相比于之前的Swarm,這次發(fā)布的SwarmKit使用更加方便,無需再依賴外部協(xié)調軟件進行服務發(fā)現(xiàn)。同時對容器運行進行了抽象,API更加間接。SwarmKit特性和其他服務編排框架如mesos,kubernetes等比較類似,目前SwarmKit還在活躍開發(fā)中,能否攻城略地,讓我們拭目以待吧。