從主機的層面來看,Docker Swarm 管理的是 Docker Host 集羣。因此先來討論一個重要的概念 - 集羣化(Clustering)。html
服務器集羣由一組網絡上相互鏈接的服務器組成,它們一塊兒協同工做。一個集羣和一堆服務器最顯著的區別在於:node
集羣可以像 單個 系統那樣工做,同時提供高可用、負載均衡和並行處理。數據庫
若是咱們部署應用和服務時選擇的是多個獨立的服務器而非集羣,資源的總體利用率則很難達到最優,由於咱們沒法提早知道如何分佈這些應用才能達到資源利用的最大化。並且,應用使用資源的趨勢是波動的,早上某些服務可能須要大量的內存,而下午使用量就降下來了。提早指定應用應該運行在哪一個服務器上會喪失業務的彈性,當某個服務器宕機了,咱們不得不手工將受影響的應用遷移到其餘服務器上。服務器
實現集羣化後咱們的思惟方式就必須改變了:再也不考慮一個一個的服務器,而是將集羣看作是一個總體。網絡
部署應用時,咱們只考慮須要多少內存和 CPU,而不是考慮會使用那臺服務器的內存和 CPU。咱們不該該關心應用會被部署在哪裏,咱們關心的是運行這個應用須要哪些資源,而後將它部署到集羣,集羣管理程序(好比 Docker Swarm)會搞定這些細節。負載均衡
集羣總體容量的調整是經過往集羣中添加和刪除主機節點實現的。但無論作怎樣的操做,集羣始終仍是一個總體。學習
本章,咱們會建立 Docker Swarm 集羣、部署應用、伸縮擴展應用,以及對應用執行滾動升級。ui
Docker v1.12 是一個很是重要的版本,Docker 從新實現了集羣的編排方式。在此以前,提供集羣功能的 Docker Swarm 是一個單獨的軟件,並且依賴外部數據庫(好比 Consul、etcd 或 Zookeeper)。spa
從 v1.12 開始,Docker Swarm 的功能已經徹底與 Docker Engine 集成,要管理集羣,只須要啓動 Swarm Mode。安裝好 Docker,Swarm 就已經在那裏了,服務發現也在那裏了(不須要安裝 Consul 等外部數據庫)。orm
相比 Kubernetes,用 Docker Swarm 建立集羣很是簡單,不須要額外安裝任何軟件,也不須要作任何額外的配置。很適合做爲學習容器編排引擎的起點。
在建立集羣以前,先明確幾個概念。
swarm
swarm 運行 Docker Engine 的多個主機組成的集羣。
從 v1.12 開始,集羣管理和編排功能已經集成進 Docker Engine。當 Docker Engine 初始化了一個 swarm 或者加入到一個存在的 swarm 時,它就啓動了 swarm mode。
沒啓動 swarm mode 時,Docker 執行的是容器命令;運行 swarm mode 後,Docker 增長了編排 service 的能力。
Docker 容許在同一個 Docker 主機上既運行 swarm service,又運行單獨的容器。
node
swarm 中的每一個 Docker Engine 都是一個 node,有兩種類型的 node:manager 和 worker。
爲了向 swarm 中部署應用,咱們須要在 manager node 上執行部署命令,manager node 會將部署任務拆解並分配給一個或多個 worker node 完成部署。
manager node 負責執行編排和集羣管理工做,保持並維護 swarm 處於指望的狀態。swarm 中若是有多個 manager node,它們會自動協商並選舉出一個 leader 執行編排任務。
woker node 接受並執行由 manager node 派發的任務。默認配置下 manager node 同時也是一個 worker node,不過能夠將其配置成 manager-only node,讓其專職負責編排和集羣管理工做。
work node 會按期向 manager node 報告本身的狀態和它正在執行的任務的狀態,這樣 manager 就能夠維護整個集羣的狀態。
service
service 定義了 worker node 上要執行的任務。swarm 的主要編排任務就是保證 service 處於指望的狀態下。
舉一個 service 的例子:在 swarm 中啓動一個 http 服務,使用的鏡像是 httpd:latest,副本數爲 3。
manager node 負責建立這個 service,通過分析知道須要啓動 3 個 httpd 容器,根據當前各 worker node 的狀態將運行容器的任務分配下去,好比 worker1 上運行兩個容器,worker2 上運行一個容器。
運行了一段時間,worker2 忽然宕機了,manager 監控到這個故障,因而當即在 worker3 上啓動了一個新的 httpd 容器。
這樣就保證了 service 處於指望的三個副本狀態。
下一節咱們開始實踐 Docker Swarm。
書籍:
1.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
2.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html