掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Docker Swarm 是 Docker 官方三劍客項(xiàng)目之一,提供 Docker 容器集群服務(wù),是 Docker 官方對容器云生態(tài)進(jìn)行支持的核心方案。使用它,用戶可以將多個 Docker 主機(jī)封裝為單個大型的虛擬 Docker 主機(jī),快速打造一套容器云平臺。

用這樣一條簡單的命令:
$ docker swarm init
就足夠創(chuàng)建一個 Swarm 了(雖然是一個只有簡易管理節(jié)點(diǎn)的 Swarm,但已經(jīng)是 Swarm 集群的最簡集合)。
$ docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
7sytb3zk0yswdfky6mbh7nzk2 * moby Accepted Ready Active Leader
來看看多節(jié)點(diǎn)吧!只有一個節(jié)點(diǎn)的 Swarm,用途是有限的,所以讓我們來創(chuàng)建一個有兩個管理節(jié)點(diǎn)(manager nodes)和兩個工作節(jié)點(diǎn)(worker nodes)的 Swarm。 首先,我們來創(chuàng)建 4 個 Docker 主機(jī)。Docker Machine 是完成此任務(wù)的理想工具,所以我們就用它。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 - virtualbox Running tcp://192.168.99.100:2376 v1.12.0-rc3
manager2 - virtualbox Running tcp://192.168.99.101:2376 v1.12.0-rc3
worker1 - virtualbox Running tcp://192.168.99.102:2376 v1.12.0-rc3
worker2 - virtualbox Running tcp://192.168.99.103:2376 v1.12.0-rc3
如果你手頭上沒有別的用 Machine 創(chuàng)建的主機(jī),那么在顯示集群節(jié)點(diǎn)時,你的顯示信息就需要與下文給出的范例比較接近。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 - virtualbox Running tcp://192.168.99.100:2376 v1.12.0-rc3
manager2 - virtualbox Running tcp://192.168.99.101:2376 v1.12.0-rc3
worker1 - virtualbox Running tcp://192.168.99.102:2376 v1.12.0-rc3
worker2 - virtualbox Running tcp://192.168.99.103:2376 v1.12.0-rc3
上文介紹了一種用 1.12 版引擎來創(chuàng)建 Swarm 的最簡單的命令(提示:“docker swarm init”),但我們在這里還將調(diào)用幾種附加選項(xiàng),讓集群主機(jī)可以互相通信,并在無需許可的情況下加入集群。
$ MANAGER1_IP=$(docker-machine ip manager1)
$ docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $MANAGER1_IP:2377
注意:–listen-addr 是 Swarm 內(nèi)不同節(jié)點(diǎn)互相訪問的地址
添加第二管理節(jié)點(diǎn)
Docker Swarm 命令中還需要添加一些選項(xiàng):
* join:表明一個新的節(jié)點(diǎn)將被添加進(jìn) Swarm
* –manager:表明節(jié)點(diǎn)的性質(zhì)(manager vs worker)
* –listen-addr:讓一個新添加的節(jié)點(diǎn)可以訪問 Swarm 內(nèi)的其他節(jié)點(diǎn)
* 最后的參數(shù)就是第一管理節(jié)點(diǎn)的地址(即這一命令將被送到的那個節(jié)點(diǎn))
***注意:*由于 –auto-accept manager 選項(xiàng)會在 Swarm 初始化的過程中被提供,所以第二管理節(jié)點(diǎn)會被自動接受。如果沒有這一選項(xiàng),那么第二管理節(jié)點(diǎn)需要被第一管理節(jié)點(diǎn)手動接受。
$ MANAGER2_IP=$(docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377
添加工作節(jié)點(diǎn)
往集群內(nèi)添加工作節(jié)點(diǎn)的方式,跟添加管理節(jié)點(diǎn)幾乎相同:
$ WORKER1_IP=$(docker-machine ip worker1)
$ docker-machine ssh worker1 docker swarm join --listen-addr $WORKER1_IP:2377 $MANAGER1_IP:2377
$ WORKER2_IP=$(docker-machine ip worker2)
$ docker-machine ssh worker2 docker swarm join --listen-addr $WORKER2_IP:2377 $MANAGER1_IP:2377
***注意:*由于 –auto-accept worker 選項(xiàng)會在 Swarm 初始化的過程中被提供,所以工作節(jié)點(diǎn)會被自動接受。如果沒有這一選項(xiàng),那么工作節(jié)點(diǎn)需要被管理節(jié)點(diǎn)手動接受。
我們的 Swarm 看起來像什么呢?讓我們來看看。
$ docker-machine ssh manager1 docker node ls
ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
109a5ufy8e3ey17unqa16wbj7 manager2 Accepted Ready Active Reachable
4chbn8uphm1tidr93s64zknbq * manager1 Accepted Ready Active Leader
8nw7g1q0ehwq1jrvid1axtg5n worker2 Accepted Ready Active
8rrdjg4uf9jcj0ma2uy8rkw5v worker1 Accepted Ready Active
現(xiàn)在每個節(jié)點(diǎn)都?xì)w屬于 Swarm,并都處在了待機(jī)狀態(tài)。管理節(jié)點(diǎn) 1 是領(lǐng)導(dǎo)者,一切都各居其位,井井有條,是什么使它如此特別呢? 這個 Swarm 是得到安全傳輸層協(xié)議(TLS)保證的,能在設(shè)備外自動認(rèn)證升級。
同樣,它也不再需要 Consul、Zookeeper 之類的鍵值存儲,所有東西都在掌控之中。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流