Docker Swarms 跨主機集羣搭建

解決的問題

  1. 想要在多臺物理實體機或虛擬機,而不是一臺機器上構建集羣。
  2. 因爲使用windows10 + VirtualBox,並在VirtualBox中安裝linux系列系統,並卡在文檔"docker-machine create --driver virtualbox myvm1"

搭建環境

搭建時間:2019.8.16 設備系統:windows10 虛擬軟件:VirtualBox 虛擬系統:Ubuntu 18.04 LTSlinux

參考博客

感謝如下博客在問題解決中提供的幫助 JerryWangSAP --- 錯誤消息 This computer doesn't have VT-X/AMD-v enabled 向上的路 --- docker跨主機通訊方式四 docker-machinedocker

背景

爲何我會想到要在多臺物理實體主機或虛擬機來搭建集羣呢?緣由有兩個:單臺設備性能極限、災備。第一條緣由很好理解,單臺設備的性能極限。災備的出發點並非容器內單個服務宕機的狀況,而是物理範疇的災備。國內可靠性達到99.99%的雲服務供應商不時宕機的新聞時常會會有報導,但咱們是否有在同一時間段內,兩個或兩個以上雲服務上同時宕機的新聞,咱們有曾聽過嗎?ubuntu

理論分析一下,以99.99%做爲標準,這個數字乍一看確實有種萬無一失的感受,但折算成絕對值的時間,倒是:52.56分鐘/年。若是咱們將服務同時部署在兩個不一樣的雲服務商上呢?服務理論宕機時間爲:0.31秒/年。固然這只是個理論分析,只是在相同預算下,購買分佈在2個或多個雲服務商的主機來搭建集羣,對服務的可靠性提高是不是一個更好的方案呢?vim

思路

Docker文檔在Swarms部分經過"docker-machine create --driver virtualbox myvm1"命令宿主系統內建立虛擬節點,但該命令在本就已是由虛擬機建立的ubuntu系統內是沒法執行成功的,參見JerryWang的Blog。解決這個問題的方法有不少,雙系統、使用Mac等均可行,但受限於某些客觀緣由,而且想要嘗試跨主機構建集羣,所以採用瞭如下解決方案:在VirtualBox虛擬出3套ubuntu系統:A、B、C。其中將A等價爲教程中的宿主操做系統,B、C等價爲教程中宿主操做系統中的兩個節點。經過連通A、B、C來達到與教程在該處相同的效果,同時也是實現了跨主機集羣的搭建。windows

具體步驟

  1. 在主機A中預先裝好docker(參見官網教程), B、C虛擬機只須要安裝ssh服務器便可。(B、C能夠爲雲服務商的虛擬主機)
  2. 使用如下指令獲取B、C虛擬機的IP地址。

    ifconfig // 若信息過長使用 ifconfig >> output 輸出大文件裏使用vim打開查看bash

  3. B、C主機配置ssh容許直接使用root賬號登陸:在/etc/ssh/sshd_config文件內,添加

    PermitRootLogin yes服務器

  4. 在A中執行如下命令生成密鑰文件(此步驟開始的全部操做都只需在A中完成)

    ssh-keygen微信

  5. 將公鑰複製到B、C

    ssh-copy-id IP
    //執行兩次,分別將IP替換爲B、C的IPssh

  1. 使用一下指令驗證是否配置成功

    ssh IP //成功後使用logout推出登陸ide

  2. 使用如下指令在A中給B、C安裝docker。(同時也將創建起A與B、C的連接)

    // docker文檔到此處前並無要求安裝docker-machine,參見官方文檔安裝 // 此命令須要執行兩次,分別使用B、C的IP,NodeName官方文檔分別命名爲了:myvm1 、myvm2,此處我命名爲docker一、docker2 docker-machine create -d generic --generic-ip-address=IP NodeName

  1. 使用如下指令檢查鏈接是否創建完成

    docker-machine ls

解釋說明

  1. 以上步驟實現的效果就能夠將獨立的多臺物理主機或位於不一樣平臺的虛擬機實現鏈接,同時也等效官方文檔如下兩條指令,能夠縫銜後續接教程內容
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2
複製代碼
  1. 關於IP,如果同我同樣的場景(擁有固定IP的主機和雲服務器除外),不推薦去花費時間在局域網內配置靜態IP,由於還須要在/etv/netplan(ubuntu17.04之後啓用的)的配置文件裏配置子網掩碼、網關以及DNS服務器等,很容易出錯。花費時間與學到東西的性價比不高,IP是會發生變化,但從實際操做來講,這個時間差足夠完成練習。
  2. 爲何須要在B、C中修改ssh配置文件?因爲ssh默認不可以使用root賬號登陸,常規流程咱們都是使用本身建立的賬號,如:ubuntu登陸,再使用sudo su切換到root賬號,但在該場景下須要主機容許直接使用root帳號登錄。

後記

完成docker swarms教程效果截圖以下

完成docker全部get-star教程的效果以下

最後推薦一篇k8s與Docker Swarms對比的文章Ankit Kumar -- Kubernetes vs. Docker Swarm: A Complete Comparison Guide

要獲取更多Haytham原創文章,請關注公衆號"許聚龍":

個人微信公衆號
相關文章
相關標籤/搜索