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