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