Docker 引擎的 Swarm 模式:添加工作者節點教程
讓我們繼續幾周前在 CentOS 7.2 中開始的工作。 在本指南中,我們學習了如何初始化以及啟動 Docker 1.12 中內置的原生的集群以及編排功能。但是我們只有 管理者 節點還沒有其它 工作者 節點。今天我們會展開講述這個。
我將向你展示如何將不對稱節點添加到 Sawrm 中,比如一個與 CentOS 相鄰的 Fedora 24,它們都將加入到集群中,還有相關很棒的負載均衡等等。當然這並不是輕而易舉的,我們會遇到一些障礙,所以它應該是非常有趣的。
先決條件
在將其它節點成功加入 Swarm 之前,我們需要做幾件事情。理想情況下,所有節點都應該運行相同版本的 Docker,為了支持原生的編排功能,它的版本至少應該為 1.12。像 CentOS 一樣,Fedora 內置的倉庫沒有最新的構建版本,所以你需要手動構建,或者使用 Docker 倉庫手動添加和安裝正確的版本,並修復一些依賴衝突。我已經向你展示了如何在 CentOS 中操作,經過是相同的。
此外,所有節點都需要能夠相互通信。這就需要有正確的路由和防火牆規則,這樣 管理者 和 工作者 節點才能互相通信。否則,你無法將節點加入 Swarm 中。最簡單的解決方法是臨時清除防火牆規則 (iptables -F
),但這可能會損害你的安全。請確保你完全了解你正在做什麼,並為你的節點和埠創建正確的規則。
Error response from daemon: Timeout was reached before node was joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.
守護進程的錯誤響應:節點加入之前已超時。嘗試加入 Swarm 的請求將在後台繼續進行。使用 「docker info」 命令查看節點的當前 Swarm 狀態。
你需要在主機上提供相同的 Docker 鏡像。在上一個教程中我們創建了一個 Apache 映像,你需要在你的 工作者 節點上執行相同操作,或者分發已創建的鏡像。如果你不這樣做,你會遇到錯誤。如果你在設置 Docker 上需要幫助,請閱讀我的介紹指南和網路教程。
7vwdxioopmmfp3amlm0ulimcu _ websky.11 my-apache2:latest
localhost.localdomain Shutdown Rejected 7 minutes ago
"No such image: my-apache2:lat&"
現在開始
現在我們有一台啟動了 CentOS 機器,並成功地創建了容器。你可以使用主機埠連接到該服務,這一切都看起來很好。目前,你的 Swarm 只有 管理者 。
加入 工作者
要添加新的節點,你需要使用 join
命令。但是你首先必須提供令牌、IP 地址和埠,以便 工作者 節點能正確地對 Swarm 管理器進行身份驗證。接著(在 Fedora 上)執行:
[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join
--token SWMTKN-1-0xvojvlza90nrbihu6gfu3qm34ari7lwnza ...
192.168.2.100:2377
如果你不修復防火牆和路由規則,你會得到超時錯誤。如果你已經加入了 Swarm,重複 join
命令會收到錯誤:
Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.
如果有疑問,你可以離開 Swarm,然後重試:
[root@localhost ~]# docker swarm leave
Node left the swarm.
docker swarm join --token
SWMTKN-1-0xvojvlza90nrbihu6gfu3qnza4 ... 192.168.2.100:2377
This node joined a swarm as a worker.
在 工作者 節點中,你可以使用 docker info
來檢查狀態:
Swarm: active
NodeID: 2i27v3ce9qs2aq33nofaon20k
Is Manager: false
Node Address: 192.168.2.103
Likewise, on the manager:
Swarm: active
NodeID: cneayene32jsb0t2inwfg5t5q
Is Manager: true
ClusterID: 8degfhtsi7xxucvi6dxvlx1n4
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 192.168.2.100
創建或縮放服務
現在,我們需要看下 Docker 是否以及如何在節點間分發容器。我的測試展示了一個在非常輕的負載下相當簡單的平衡演算法。試了一兩次之後,即使在我嘗試縮放並更新之後,Docker 也沒有將運行的服務重新分配給新的 worker。同樣,有一次,它在 工作者 節點上創建了一個新的服務。也許這是最好的選擇。
在新的 工作者 節點上完整創建新的服務。
過了一段時間,兩個容器之間的現有服務有一些重新分配,但這需要一些時間。新服務工作正常。這只是一個前期觀察,所以我現在不能說更多。現在是開始探索和調整的新起點。
負載均衡過了一會工作了。
總結
Docker 是一隻靈巧的小野獸,它仍在繼續長大,變得更複雜、更強大,當然也更優雅。它被一個大企業吃掉只是一個時間問題。當它帶來了原生的編排功能時,Swarm 模式運行得很好,但是它不只是幾個容器而已,而是充分利用了其演算法和可擴展性。
我的教程展示了如何將 Fedora 節點添加到由 CentOS 運行的群集中,並且兩者能並行工作。關於負載平衡還有一些問題,但這是我將在以後的文章中探討的。總而言之,我希望這是一個值得記住的一課。我們已經解決了在嘗試設置 Swarm 時可能遇到的一些先決條件和常見問題,同時我們啟動了一堆容器,我們甚至簡要介紹了如何縮放和分發服務。要記住,這只是一個開始。
乾杯。
作者簡介:
我是 Igor Ljubuncic。現在大約 38 歲,已婚但還沒有孩子。我現在在一個大膽創新的雲科技公司做首席工程師。直到大約 2015 年初時,我還在一個全世界最大的 IT 公司之一中做系統架構工程師,和一個工程計算團隊開發新的基於 Linux 的解決方案,優化內核以及攻克 Linux 的問題。在那之前,我是一個為高性能計算環境設計創新解決方案的團隊的技術領導。還有一些其他花哨的頭銜,包括系統專家、系統程序員等等。所有這些都曾是我的愛好,但從 2008 年開始成為了我的付費工作。還有什麼比這更令人滿意的呢?
從 2004 年到 2008 年間,我曾通過作為醫學影像行業的物理學家來糊口。我的工作專長集中在解決問題和演算法開發。為此,我廣泛地使用了 Matlab,主要用於信號和圖像處理。另外,我得到了幾個主要的工程方法學的認證,包括 MEDIC 六西格瑪綠帶、試驗設計以及統計工程學。
我也開始寫書,包括奇幻類和 Linux 上的技術性工作。彼此交融。
要查看我開源項目、出版物和專利的完整列表,請滾動到下面。
有關我的獎項,提名和 IT 相關認證的完整列表,請稍等一下。
via: http://www.dedoimedo.com/computers/docker-swarm-adding-worker-nodes.html
作者:Igor Ljubuncic 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive