Docker Swarm 集群管理利器核心概念掃盲


Swarm 簡介

  

  Docker Swarm 是 Docker 官方推出的容器集群管理工具,基於 Go 語言實現。代碼開源在:https://github.com/docker/swarm 使用它可以將多個 Docker 主機封裝為單個大型的虛擬 Docker 主機,快速打造一套容器雲平台。

  Docker Swarm 是生產環境中運行 Docker 應用程序最簡單的方法。作為容器集群管理器,Swarm 最大的優勢之一就是 100% 支持標准的 Docker API。各種基於標准 API 的工具比如 Compose、docker-py、各種管理軟件,甚至 Docker 本身等都可以很容易的與 Swarm 進行集成。大大方便了用戶將原先基於單節點的系統移植到 Swarm 上,同時 Swarm 內置了對 Docker 網絡插件的支持,用戶可以很容易地部署跨主機的容器集群服務。

  Docker Swarm 和 Docker Compose 一樣,都是 Docker 官方容器編排工具,但不同的是,Docker Compose 是一個在單個服務器或主機上創建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創建容器集群服務,對於微服務的部署,顯然 Docker Swarm 會更加適合。

  

Swarm 核心概念

  

Swarm

  Docker Engine 1.12 引入了 Swarm 模式,一個 Swarm 由多個 Docker 主機組成,它們以 Swarm 集群模式運行。Swarm 集群由 Manager 節點(管理者角色,管理成員和委托任務)和 Worker 節點(工作者角色,運行 Swarm 服務)組成。這些 Docker 主機有些是 Manager 節點,有些是 Worker 節點,或者同時扮演這兩種角色。

  Swarm 創建服務時,需要指定要使用的鏡像、在運行的容器中執行的命令、定義其副本的數量、可用的網絡和數據卷、將服務公開給外部的端口等等。與獨立容器相比,群集服務的主要優勢之一是,你可以修改服務的配置,包括它所連接的網絡和數據卷等,而不需要手動重啟服務。還有就是,如果一個 Worker Node 不可用了,Docker 會調度不可用 Node 的 Task 任務到其他 Nodes 上。

  

Nodes

  

  Swarm 集群由 Manager 節點(管理者角色,管理成員和委托任務)和 Worker 節點(工作者角色,運行 Swarm 服務)組成。一個節點就是 Swarm 集群中的一個實例,也就是一個 Docker 主機。你可以運行一個或多個節點在單台物理機或雲服務器上,但是生產環境上,典型的部署方式是:Docker 節點交叉分布式部署在多台物理機或雲主機上。節點名稱默認為機器的 hostname。

  • Manager:負責整個集群的管理工作包括集群配置、服務管理、容器編排等所有跟集群有關的工作,它會選舉出一個 leader 來指揮編排任務;
  • Worker:工作節點接收和執行從管理節點分派的任務(Tasks)運行在相應的服務(Services)上。

  

Services and Tasks

  

  服務(Service)是一個抽象的概念,是對要在管理節點或工作節點上執行的任務的定義。它是集群系統的中心結構,是用戶與集群交互的主要根源。Swarm 創建服務時,可以為服務定義以下信息:

  • 服務名稱;
  • 使用哪個鏡像來創建容器;
  • 要運行多少個副本;
  • 服務的容器要連接到哪個網絡上;
  • 要映射哪些端口。

  任務(Task)包括一個 Docker 容器在容器中運行的命令。任務是一個集群的最小單元,任務與容器是一對一的關系。管理節點根據服務規模中設置的副本數量將任務分配給工作節點。一旦任務被分配到一個節點,便無法移動到另一個節點。它只能在分配的節點上運行或失敗。

  

Replicated and global services

  

  Swarm 不只是提供了優秀的高可用性,同時也提供了節點的彈性擴容和縮容的功能。可以通過以下兩種類型的 Services 部署實現:

  • Replicated Services:當服務需要動態擴縮容時,只需通過 scale 參數或者 --replicas n 參數指定運行相同任務的數量,即可復制出新的副本,將一系列復制任務分發至各節點當中,這種操作便稱之為副本服務(Replicate)。
  • Global Services:我們也可以通過 --mode global 參數將服務分發至全部節點之上,這種操作我們稱之為全局服務(Global)。在每個節點上運行一個相同的任務,不需要預先指定任務的數量,每增加一個節點到 Swarm 中,協調器就會創建一個任務,然后調度器把任務分配給新節點。

  下圖用黃色表示擁有三個副本服務 Replicated Service,用灰色表示擁有一個全局服務 Global Service。

  

Swarm 工作流程

  

Swarm Manager:

  1. API:接受命令並創建 service 對象(創建對象)
  2. orchestrator:為 service 對象創建的 task 進行編排工作(服務編排)
  3. allocater:為各個 task 分配 IP 地址(分配 IP)
  4. dispatcher:將 task 分發到 nodes(分發任務)
  5. scheduler:安排一個 worker 節點運行 task(運行任務)

  

Worker Node:

  1. worker:連接到調度器,檢查分配的 task(檢查任務)
  2. executor:執行分配給 worker 節點的 task(執行任務)

  

Overlay 網絡

  

  關於 Docker 的網絡我們在《Docker 網絡模式詳解及容器間網絡通信》中已經給大家詳細講解過。不過,Docker Swarm 集群模式下卻默認使用的是 Overlay 網絡(覆蓋網絡),這里簡單介紹一下什么是 Overlay 網絡。

  Overlay 網絡其實並不是一門新技術,它是指構建在另一個網絡上的計算機網絡,這是一種網絡虛擬化技術的形式,近年來雲計算虛擬化技術的演進促進了網絡虛擬化技術的應用。所以 Overlay 網絡就是建立在另一個計算機網絡之上的虛擬網絡,它是不能獨立出現的,Overlay 底層依賴的網絡就是 Underlay 網絡。

  Underlay 網絡是專門用來承載用戶 IP 流量的基礎架構層,它與 Overlay 網絡之間的關系有點類似物理機和虛擬機。Underlay 網絡和物理機都是真正存在的實體,它們分別對應着真實存在的網絡設備和計算設備,而 Overlay 網絡和虛擬機都是依托在下層實體的基礎之上,使用軟件虛擬出來的層級。

  在 Docker 版本 1.12 以后 Swarm 模式原生已支持覆蓋網絡(Overlay Network),只要是這個覆蓋網絡內的容器,不管在不在同一個宿主機上都能相互通信,即跨主機通信。不同覆蓋網絡內的容器之間是相互隔離的(相互 ping 不通)。

  Overlay 網絡是目前主流的容器跨節點數據傳輸和路由方案。當然,容器在跨主機進行通信的時候,除了可以使用 overlay 網絡模式進行通信之外,還可以使用 host 網絡模式,直接使用物理機的 IP 地址就可以進行通信。

  

參考資料

  

  

  最后我要說的是,如果只是從使用的角度出發,Docker Swarm 很快就可以上手。所謂知其然知其所以然,概念性的東西該懂還得懂,一些細節的部分比如網絡我們到時候再另開文章細說。

  下文我們就帶大家從零開始,搭建 Docker Swarm 集群環境,並通過 Swarm 實現服務的彈性部署。

本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議

大家可以通過 分類 查看更多關於 Docker 的文章。

  

🤗 您的點贊轉發是對我最大的支持。

📢 掃碼關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕松噢 ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM