用 Docker 1.12 Swarm 模式創建 Swarm 集群

llfc10 8年前發布 | 22K 次閱讀 Docker

Swarm 讓你事半功倍

2016 年 DockerCon (天啊……我多么希望我當時在場)上展示的最重大的變革之一就是 1.12 版本引擎的 Swarm 模式。它意味著什么呢? 它意味著:如果你在運行 Docker 1.12時 ,你就可以原生創建一個 Swarm 集群 。

用這樣一條簡單的命令:

$ dockerswarminit

就足夠創建一個 Swarm 了(雖然是一個只有簡易管理節點的 Swarm,但已經是 Swarm 集群的最簡集合)。

$ dockernodels
ID                          HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGERSTATUS
7sytb3zk0yswdfky6mbh7nzk2 *  moby      Accepted    Ready  Active        Leader
 

來看看多節點吧!

只有一個節點的 Swarm,用途是有限的,所以讓我們來創建一個有兩個管理節點(manager nodes)和兩個工作節點(worker nodes)的 Swarm。 首先,我們來創建 4 個 Docker 主機。Docker Machine 是完成此任務的理想工具,所以我們就用它。

$ docker-machinecreate --drivervirtualboxmanager1
$ docker-machinecreate --drivervirtualboxmanager2
$ docker-machinecreate --drivervirtualboxworker1
$ docker-machinecreate --drivervirtualboxworker2
 

如果你手頭上沒有別的用 Machine 創建的主機,那么在顯示集群節點時,你的顯示信息就需要與下文給出的范例比較接近。

$ docker-machinels
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
 

初始化 Swarm

上文介紹了一種用 1.12 版引擎來創建 Swarm 的最簡單的命令(提示:“docker swarm init”),但我們在這里還將調用幾種附加選項,讓集群主機可以互相通信,并在無需許可的情況下加入集群。

$ MANAGER1_IP=$(docker-machineipmanager1)
$ docker-machinesshmanager1dockerswarminit --auto-acceptmanager --auto-acceptworker --listen-addr $MANAGER1_IP:2377
 

注意:–listen-addr 是 Swarm 內不同節點互相訪問的地址

添加第二管理節點

Docker Swarm 命令中還需要添加一些選項:

* join:表明一個新的節點將被添加進 Swarm

* –manager:表明節點的性質(manager vs worker)

* –listen-addr:讓一個新添加的節點可以訪問 Swarm 內的其他節點

* 最后的參數就是第一管理節點的地址(即這一命令將被送到的那個節點)

$ MANAGER2_IP=$(docker-machineipmanager2)
docker-machinesshmanager2dockerswarmjoin --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377
 

注意:由于 –auto-accept manager 選項會在 Swarm 初始化的過程中被提供,所以第二管理節點會被自動接受。如果沒有這一選項,那么第二管理節點需要被第一管理節點手動接受。

添加工作節點

往集群內添加工作節點的方式,跟添加管理節點幾乎相同:

$ WORKER1_IP=$(docker-machineipworker1)
$ docker-machinesshworker1dockerswarmjoin --listen-addr $WORKER1_IP:2377 $MANAGER1_IP:2377
$ WORKER2_IP=$(docker-machineipworker2)
$ docker-machinesshworker2dockerswarmjoin --listen-addr $WORKER2_IP:2377 $MANAGER1_IP:2377
 

注意:由于 –auto-accept worker 選項會在 Swarm 初始化的過程中被提供,所以工作節點會被自動接受。如果沒有這一選項,那么工作節點需要被管理節點手動接受。

我們的 Swarm 看起來像什么呢?

讓我們來看看。

$ docker-machinesshmanager1dockernodels
ID                          HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGERSTATUS
109a5ufy8e3ey17unqa16wbj7    manager2  Accepted    Ready  Active        Reachable
4chbn8uphm1tidr93s64zknbq *  manager1  Accepted    Ready  Active        Leader
8nw7g1q0ehwq1jrvid1axtg5n    worker2  Accepted    Ready  Active
8rrdjg4uf9jcj0ma2uy8rkw5v    worker1  Accepted    Ready  Active
 

現在每個節點都歸屬于 Swarm,并都處在了待機狀態。管理節點 1 是領導者,一切都各居其位,井井有條。

是什么使它如此特別呢?

這個 Swarm 是得到安全傳輸層協議(TLS)保證的,能在設備外自動認證升級。

同樣,它也不再需要 Consul、Zookeeper 之類的鍵值存儲,所有東西都在掌控之中。

現在就來用它吧

如果不在上面運行點什么,Swarm 要來何用呢……?當然,我們將要在我們的 Swarm 上部署一些服務,但這一點,還是留給下一篇文章細講吧。

復制和粘貼

下面是一小段用來創建 Docker 主機并部署 Swarm 的 Shell 腳本。當然了,管理/工作節點的數字都是可以隨意改動的。

注意:創建兩個管理節點和兩個工作節點,僅僅是用來作示范。在工業生產中,我們可能需要在集群里搭建 3 個管理節點和 5 個工作節點(感謝 Stefan 指出了這一點)。

Define the number of managers/workers

MANAGER=3 WORKER=5  

Create the Docker hosts

for i in $(seq 1 $MANAGER); do docker-machinecreate --drivervirtualboxmanager$i; done for i in $(seq 1 $WORKER); do docker-machinecreate --drivervirtualboxworker$i; done  

Init the swarm

docker-machinesshmanager1dockerswarminit --auto-acceptmanager --auto-acceptworker --listen-addr $(docker-machineipmanager1):2377  

Add additional manager(s)

for i in $(seq 2 $MANAGER); do docker-machinesshmanager$i dockerswarmjoin --manager --listen-addr $(docker-machineipmanager$i):2377 $(docker-machineipmanager1):2377; done  

Add workers

for i in $(seq 1 $WORKER); do docker-machinesshworker$i dockerswarmjoin --listen-addr $(docker-machineipworker$i):2377 $(docker-machineipmanager1):2377; done   </pre>

 

閱讀原文

 

 本文由用戶 llfc10 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!