1. 程式人生 > >Docker Swarm 中最重要的概念- 每天5分鐘玩轉 Docker 容器技術(94)

Docker Swarm 中最重要的概念- 每天5分鐘玩轉 Docker 容器技術(94)

docker 教程 容器 swarm

從主機的層面來看,Docker Swarm 管理的是 Docker Host 集群。所以先來討論一個重要的概念 - 集群化(Clustering)。

服務器集群由一組網絡上相互連接的服務器組成,它們一起協同工作。一個集群和一堆服務器最顯著的區別在於:

集群能夠像 單個 系統那樣工作,同時提供高可用、負載均衡和並行處理。

如果我們部署應用和服務時選擇的是多個獨立的服務器而非集群,資源的整體利用率則很難達到最優,因為我們無法提前知道如何分布這些應用才能達到資源利用的最大化。而且,應用使用資源的趨勢是波動的,早上某些服務可能需要大量的內存,而下午使用量就降下來了。提前指定應用應該運行在哪個服務器上會喪失業務的彈性,當某個服務器宕機了,我們不得不手工將受影響的應用遷移到其他服務器上。

實現集群化後我們的思維方式就必須改變了:不再考慮一個一個的服務器,而是將集群看做是一個整體。

部署應用時,我們只考慮需要多少內存和 CPU,而不是考慮會使用那臺服務器的內存和 CPU。我們不應該關心應用會被部署在哪裏,我們關心的是運行這個應用需要哪些資源,然後將它部署到集群,集群管理程序(比如 Docker Swarm)會搞定這些細節。

集群整體容量的調整是通過往集群中添加和刪除主機節點實現的。但不管做怎樣的操作,集群始終還是一個整體。

本章,我們會創建 Docker Swarm 集群、部署應用、伸縮擴展應用,以及對應用執行滾動升級。

Docker Swarm Mode

Docker v1.12 是一個非常重要的版本,Docker 重新實現了集群的編排方式。在此之前,提供集群功能的 Docker Swarm 是一個單獨的軟件,而且依賴外部數據庫(比如 Consul、etcd 或 Zookeeper)。

從 v1.12 開始,Docker Swarm 的功能已經完全與 Docker Engine 集成,要管理集群,只需要啟動 Swarm Mode。安裝好 Docker,Swarm 就已經在那裏了,服務發現也在那裏了(不需要安裝 Consul 等外部數據庫)。

相比 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

技術分享

Docker Swarm 中最重要的概念- 每天5分鐘玩轉 Docker 容器技術(94)