Docker管理工具-Swarm

1、Swarm介紹

  Swarm是Docker公司在2014年12月初發布的一套較爲簡單的工具,用來管理Docker集羣,它將一羣Docker宿主機變成一個單一的,虛擬的主機。Swarm使用標準的Docker API接口做爲其前端訪問入口,換言之,各類形式的Docker Client(docker client in Go, docker_py, docker等)都可以直接與Swarm通訊。Swarm幾乎所有用Go語言來完成開發,Swarm0.2版本增長了一個新的策略來調度集羣中的容器,使得在可用的節點上傳播它們,以及支持更多的Docker命令以及集羣驅動。Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm本身不運行容器,它只是接受docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味着,即便Swarm因爲某些緣由掛掉了,集羣中的節點也會照常運行,當Swarm從新恢復運行以後,它會收集重建集羣信息。javascript

  Docker的Swarm(集羣)模式,集成不少工具和特性,好比:跨主機上快速部署服務,服務的快速擴展,集羣的管理整合到docker引擎,這意味着能夠不能夠不使用第三方管理工具。分散設計,聲明式的服務模型,可擴展,狀態協調處理,多主機網絡,分佈式的服務發現,負載均衡,滾動更新,安全(通訊的加密)等等。前端

2、Swarm架構

  Swarm做爲一個管理Docker集羣的工具,首先須要將其部署起來,能夠單獨將Swarm部署於一個節點。另外,天然須要一個Docker集羣,集羣上每個節點均安裝有Docker。具體的Swarm架構圖能夠參照下圖:java

   

  Swarm架構中最主要的處理部分天然是Swarm節點,Swarm管理的對象天然是Docker Cluster,Docker Cluster由多個Docker Node組成,而負責給Swarm發送請求的是Docker Client。node

3、Swarm關鍵概念  

  1)Swarm 集羣的管理和編排是使用嵌入到docker引擎的SwarmKit,能夠在docker初始化時啓動swarm模式或者加入已存在的swarm python

  2)Node 一個節點(node)是已加入到swarm的Docker引擎的實例 當部署應用到集羣,你將會提交服務定義到管理節點,接着Manager 管理節點調度任務到worker節點,manager節點還執行維護集羣的狀態的編排和羣集管理功能,worker節點接收並執行來自 manager節點的任務。一般,manager節點也能夠是worker節點,worker節點會報告當前狀態給manager節點算法

  3)服務(Service) 服務是要在worker節點上要執行任務的定義,它在工做者節點上執行,當你建立服務的時,你須要指定容器鏡像 docker

  4)任務(Task) 任務是在docekr容器中執行的命令,Manager節點根據指定數量的任務副本分配任務給worker節點數據庫

docker swarm:集羣管理,子命令有init, join, leave, update。(docker swarm --help查看幫助)
docker service:服務建立,子命令有create, inspect, update, remove, tasks。(docker service--help查看幫助)
docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看幫助)
 
node是加入到swarm集羣中的一個docker引擎實體,能夠在一臺物理機上運行多個node,node分爲:
manager nodes,也就是管理節點
worker nodes,也就是工做節點
 
1)manager node管理節點:執行集羣的管理功能,維護集羣的狀態,選舉一個leader節點去執行調度任務。
2)worker node工做節點:接收和執行任務。參與容器集羣負載調度,僅用於承載task。
3)service服務:一個服務是工做節點上執行任務的定義。建立一個服務,指定了容器所使用的鏡像和容器運行的命令。
   service是運行在worker nodes上的task的描述,service的描述包括使用哪一個docker 鏡像,以及在使用該鏡像的容器中執行什麼命令。
4)task任務:一個任務包含了一個容器及其運行的命令。task是service的執行實體,task啓動docker容器並在容器中執行任務。 

 

4、主要功能 

  • 集羣管理與Docker Engine集成:使用Docker Engine CLI來建立一個你能部署應用服務到Docker Engine的swarm。你不須要其餘編排軟件來建立或管理swarm。
  • 分散式設計:Docker Engine不是在部署時處理節點角色之間的差別,而是在運行時扮演本身角色。你可使用Docker Engine部署兩種類型的節點,管理器和worker。這意味着你能夠從單個磁盤映像構建整個swarm。
  • 聲明性服務模型: Docker Engine使用聲明性方法來定義應用程序堆棧中各類服務的所需狀態。例如,你能夠描述由消息隊列服務和數據庫後端的Web前端服務組成的應用程序。
  • 伸縮性:對於每一個服務,你能夠聲明要運行的任務數。當你向上或向下縮放時,swarm管理器經過添加或刪除任務來自動適應,以保持所需狀態。
  • 指望的狀態協調:swarm管理器節點持續監控羣集狀態,並調整你描述的指望狀態與實際狀態之間的任何差別。 例如,若是設置運行一個10個副本容器的服務,這時worker機器託管其中的兩個副本崩潰,管理器則將建立兩個新副本以替換已崩潰的副本。 swarm管理器將新副本分配給正在運行和可用的worker。
  • 多主機網絡:你能夠爲服務指定覆蓋網絡(overlay network)。 當swarm管理器初始化或更新應用程序時,它會自動爲容器在覆蓋網絡(overlay network)上分配地址。
  • 服務發現:Swarm管理器節點爲swarm中的每一個服務分配惟一的DNS名稱,並負載平衡運行中的容器。 你能夠經過嵌入在swarm中的DNS服務器查詢在swarm中運行中的每一個容器。
  • 負載平衡:你能夠將服務的端口暴露給外部的負載均衡器。 在內部,swarm容許你指定如何在節點之間分發服務容器。
  • 安全通訊:swarm中的每一個節點強制執行TLS相互驗證和加密,以保護其自身與全部其餘節點之間的通訊。 你能夠選擇使用自簽名根證書或來自自定義根CA的證書。
  • 滾動更新:在上線新功能期間,你能夠增量地應用服務更新到節點。 swarm管理器容許你控制將服務部署到不一樣節點集之間的延遲。 若是出現任何問題,你能夠將任務回滾到服務的先前版本。

5、Swarm工做方式

  1)Node後端

  

 

   2)Service(服務、任務、容器)centos

  

   

  3)任務和調度

  

  4)服務副本與全局服務

  

6、Swarm調度策略

  Swarm在scheduler節點(leader節點)運行容器的時候,會根據指定的策略來計算最適合運行容器的節點,目前支持的策略有:spread, binpack, random

  1)Random 顧名思義,就是隨機選擇一個Node來運行容器,通常用做調試用,spread和binpack策略會根據各個節點的可用的CPU, RAM以及正在運 行的容器的數量來計算應該運行容器的節點。

  2)Spread 在同等條件下,Spread策略會選擇運行容器最少的那臺節點來運行新的容器,binpack策略會選擇運行容器最集中的那臺機器來運行新的節點。 使用Spread策略會使得容器會均衡的分佈在集羣中的各個節點上運行,一旦一個節點掛掉了只會損失少部分的容器。

  3)Binpack Binpack策略最大化的避免容器碎片化,就是說binpack策略儘量的把還未使用的節點留給須要更大空間的容器運行,儘量的把容器運行在 一個節點上面。

7、Swarm Cluster模式的特性  

1)批量建立服務
創建容器以前先建立一個overlay的網絡,用來保證在不一樣主機上的容器網絡互通的網絡模式
 
2)強大的集羣的容錯性
當容器副本中的其中某一個或某幾個節點宕機後,cluster會根據本身的服務註冊發現機制,以及以前設定的值--replicas n,
在集羣中剩餘的空閒節點上,從新拉起容器副本。整個副本遷移的過程無需人工干預,遷移後本來的集羣的load balance依舊好使!
不難看出,docker service其實不只僅是批量啓動服務這麼簡單,而是在集羣中定義了一種狀態。Cluster會持續檢測服務的健康狀態
並維護集羣的高可用性。
 
3)服務節點的可擴展性
Swarm Cluster不光只是提供了優秀的高可用性,同時也提供了節點彈性擴展或縮減的功能。當容器組想動態擴展時,只需經過scale
參數便可複製出新的副本出來。
 
仔細觀察的話,能夠發現全部擴展出來的容器副本都run在原先的節點下面,若是有需求想在每臺節點上都run一個相同的副本,方法
其實很簡單,只須要在命令中將"--replicas n"更換成"--mode=global"便可!

複製服務(--replicas n)
將一系列複製任務分發至各節點當中,具體取決於您所須要的設置狀態,例如「--replicas 3」。

全局服務(--mode=global)
適用於集羣內所有可用節點上的服務任務,例如「--mode global」。若是你們在 Swarm 集羣中設有 7 臺 Docker 節點,則所有節點之上都將存在對應容器。
 
4. 調度機制
所謂的調度其主要功能是cluster的server端去選擇在哪一個服務器節點上建立並啓動一個容器實例的動做。它是由一個裝箱算法和過濾器
組合而成。每次經過過濾器(constraint)啓動容器的時候,swarm cluster 都會調用調度機制篩選出匹配約束條件的服務器,並在這上面運行容器。
相關文章
相關標籤/搜索