使用Docker Swarm快速搭建與部署你的服務叢集

爆米花機槍手發表於2019-01-21

docker-swarm

初始化叢集

準備了對應的機器(兩個虛擬機器),基本資訊如下

IP 主機名 備註
192.168.1.8 ubuntu-1
192.168.1.5 ubuntu-1

注意:最好保持每個節點的docker版本號為最新且是相同的

在主節點(manager)上執行

root@ubuntu:/home/wangxc# docker swarm init --advertise-addr  192.168.1.8

結果

Swarm initialized: current node (oqela4wtpa9m7e8a6zi9k9rbl) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-03md8tqw24sd0tbxkyqxmiay5nixniax9c301f49qjorhsj069-44eeph3lldj3lopzk7tiiv1ve 192.168.1.8:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

然後在其他子節點執行

docker swarm join --token SWMTKN-1-03md8tqw24sd0tbxkyqxmiay5nixniax9c301f49qjorhsj069-44eeph3lldj3lopzk7tiiv1ve 192.168.1.8:2377

注意埠號是否開放,可以把防火牆全部關掉,正常的結果如下

This node joined a swarm as a worker.

說明兩個節點已經建立關係,而且manager為192.168.1.8,我們在主節點輸入命令

docker node ls

就能看到所有的節點資訊

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
x2n8p4qly9xkhpul49b96bx60 *   ubuntu-1            Ready               Active              Leader              18.06.1-ce
b0p8o0vee21pf9nijcvoy0g72     ubuntu-2            Ready               Active                                  18.06.1-ce

帶星號的額就是主節點了,很方便看。

部署

我事先準備了一個映象,一個簡單的python flask 服務,在指定映象的時候,最好把repo的地址寫上,因為每個節點不一定有該映象,需要到指定的repo去pull,如果不指定repo的話,有時可能會失敗

docker service create --replicas 5 --name hellos vector4wang/python-flask

很好理解docker service create 等價於 docker run,replicas就是部署幾個服務,等待部署成功,如下

uo3u4w6zxglgxjo1i7njxaqru
overall progress: 5 out of 5 tasks 
1/5: running   [==================================================>] 
2/5: running   [==================================================>] 
3/5: running   [==================================================>] 
4/5: running   [==================================================>] 
5/5: running   [==================================================>] 
verify: Service converged 

忘記做埠對映,我們做一下調整

docker service update --publish-add published=5000,target=5000 hellos

理解下。

通過執行docker service ps hellos 來檢視每個節點的服務數和執行情況,如下
WX20190120-232126@2x.png
我們可以看到剛剛的update就是把之前服務殺掉,然後重親啟動,兩個節點均有部署而且執行著該服務,我們可以隨便使用docker stop [container id]來殺死一個服務,但是swarm會自動啟動一個。

測試

我們通過檢視日誌來測試請求是否會落在這五個節點上,我們請求主節點對應ip服務5次

docker service logs -f hellos

結果很巧,正好落在五個節點上如下

hellos.3.jvtq4su8blia@ubuntu-1    | 10.255.0.2 - - [20/Jan/2019 15:27:15] "GET / HTTP/1.1" 200 -
hellos.5.atflo3ownjb7@ubuntu-2    | 10.255.0.2 - - [20/Jan/2019 15:27:16] "GET / HTTP/1.1" 200 -
hellos.4.vyn5bpypjvm7@ubuntu-2    | 10.255.0.2 - - [20/Jan/2019 15:27:18] "GET / HTTP/1.1" 200 -
hellos.1.m67symamsj02@ubuntu-2    | 10.255.0.2 - - [20/Jan/2019 15:27:19] "GET / HTTP/1.1" 200 -
hellos.2.srhlzn6trgri@ubuntu-1    | 10.255.0.2 - - [20/Jan/2019 15:27:19] "GET / HTTP/1.1" 200 -

停止服務

我們在主機點使用下面命令和停止對應服務

docker service rm hellos
或
docker service scale hellos=0

通過swarm我們可以再多個節點很容易的去部署和簡單管理服務。

暫時的完結

最近也是公司準備用容器化來部署服務,所以我就把Docker以前沒有玩到的地方玩了下,到此,Docker的介紹、使用、編排、叢集化部署等就介紹完了,如果後期應用於工作上,可能會有更深入的見解與博文。希望大家持續關注哈~

學習Docker之Docker初體驗—SpringBoot整合Docker的部署、釋出與應用
學習Docker之Docker、容器和映象的簡介和常用命令
學習Docker之10張圖帶你深入理解Docker容器和映象
學習Docker之Dockerfile的命令
學習Docker之使用docker-compose編配一整套服務
學習Docker之使用Docker構建服務之部署和備份jekyll網站
學習Docker之使用Docker Swarm快速搭建與部署你的服務叢集

其他
使用Docker“一鍵”啟動jd(職位資訊)的搜尋(es)與統計(Kibana)

相關文章