您好,登錄后才能下訂單哦!
怎樣使用Shipyard部署Docker Swarm集群和跨主機Overlay網絡,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
官網上給出了幾種Docker Swarm集群的部署方法,分別是基于Docker ToolBox 以及 Amazon AWS 。
Shipyard 是一個非常牛逼的docker集群管理系統,而且有著非常友好的Web界面。更為變態的是Shipyard有一個比較牛逼的一鍵自動部署腳本,不過里面的服務發現與注冊使用的是 etcd 而不是 consul 的,但是 consul 是 docker 官網推薦的,本文主要介紹使用shipyard以及 consul 來手工部署 Swarm 集群。
實驗環境為三臺服務器,各個服務器的角色、配置如下表所示:
IP | 操作系統 | 角色 |
---|---|---|
192.168.0.47 | Ubuntu 14.04 內核3.16.0 | consul 節點 |
192.168.0.56 | Ubuntu 14.04 內核3.16.0 | swarm manager節點 |
192.168.0.57 | Ubuntu 14.04 內核3.16.0 | swarm agent 節點 |
官方提供了各個平臺的docker安裝手冊, 讀者可以參考 。為了偷懶方便,在這里我們使用了Docker公司提供的一鍵安裝腳本來進行docker的安裝
curl -sSL https://get.docker.io/ubuntu/ | sudo sh
安裝完畢,我們還需要修改 docker 的默認啟動參數, 修改下面的文件:
vi /etc/default/docker
添加這么一行:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
然后重新啟動Docker服務
service start docker
在192.168.0.47也就是consul節點上,運行如下命令來部署服務發現模塊
docker run -d \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 8600:53 \ -p 8600:53/udp \ --restart=always \ --name=consul progrium/consul -server -bootstrap -ui-dir=/ui -advertise 192.168.0.47 -client 0.0.0.0
解釋下各個參數:
-d 容器在后臺運行, detached mode
--restart=always 重啟模式, always 表示永遠
-p 8400:8400 映射 consul的 rpc 端口8400
-p 8500:8500 映射到公共 IP 這樣方便我們使用 UI 界面
-p 53:53/udp 綁定udp 端口53(默認 DNS端口)在 docker0 bridge 地址上
-advertise 192.168.0.47 consul服務對外公布的 IP, 這里特意設置為0.47, 否則 service 會顯示為內部的容器的 IP 地址, 這樣就訪問不到了
-client 0.0.0.0 consul 監聽的地址
先在192.168.0.56即swarm manager節點上安裝 rethinkdb 數據庫
docker run -d --restart=always --name shipyard-rethinkdb rethinkdb
然后繼續安裝 swarm manager,需要注意的是將192.168.0.47替換為實際上的 consul 節點的 ip地址
docker run -d -p 3375:3375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 consul://192.168.0.47:8500
接著在manager節點上安裝 swarm agent,這里需要注意的是192.168.0.47是consul節點的IP地址,192.168.0.56是manager的IP地址,將兩者替換為你實際環境中的節點地址
docker run -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.0.56:2375 consul://192.168.0.47:8500
最后部署 shipyard 管理模塊
docker run -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 9090:8080 shipyard/shipyard:latest server -d tcp://swarm:3375
部署完畢后可以在瀏覽器訪問http://192.168.0.56:9090 , 就能看到 shipyard 的登錄頁面, 默認賬戶是 admin,密碼shipyard。
節點agent的部署比較簡單,只需要參考manager節點上的步驟3
docker run -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.0.57:2375 consul://192.168.0.47:8500
類似的,192.168.0.47是consul節點的IP地址,192.168.0.57是agent節點的IP地址,將兩者替換為你實際環境中的節點地址
為了能夠在Docker Swarm集群上使用跨主機Overlay網絡,還需要做一些配置修改。在manager節點和agent節點上,
vi /etc/default/docker
將這一行
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
修改為
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.0.47:8500 --cluster-advertise=eth0:2375"
這里192.168.0.47為consul節點的IP地址,eth0為manager/agent節點上192.168.0.56/57所在的網卡名。然后重新啟動Docker服務
service start docker
下面創建一個overlay網絡
docker -H 192.168.0.56:3375 network create -d overlay test-net
注意:使用docker客戶端對docker swarm 集群進行操作時需要指定集群的地址,我們實驗中創建的集群對外暴露的IP和端口是192.168.0.56:3375,而使用端口2375則是對單個docker主機進行操作。
查看swarm集群中所有的網絡
$ docker -H 192.168.0.56:3375 network ls NETWORK ID NAME DRIVER 1abc3888c68f node1/bridge bridge 7c21108c289f node1/docker_gwbridge bridge fd7873463f44 node1/host host 61808ed752b3 node1/none null 3239dd516cb5 node2/bridge bridge 049b996b6ec0 node2/docker_gwbridge bridge 045824d9569c node2/host host 2a0ec5e15ce8 node2/none null 33df13f850c5 test-net overlay
可以看到test-net網絡同時在56和57上創建,下面我們在此網絡上創建容器
$ docker -H 192.168.0.56:3375 run -itd --net test-net --name test4 ubuntu:14.04 db7113bae6d06922a133cef92f01701c0f35156b374ae14e31e13ac54500e979 $ docker -H 192.168.0.56:3375 run -itd --net test-net --name test5 ubuntu:14.04 dbea32bd623ce225af426470f1f30f5f76d5f5148a63893e2f9f84b4628cb171
看到兩個容器分別分布在兩個節點上
docker -H 192.168.0.56:3375 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dbea32bd623c ubuntu:14.04 "/bin/bash" 2 minutes ago Up About a minute node1/test5 db7113bae6d0 ubuntu:14.04 "/bin/bash" 2 minutes ago Up 2 minutes node2/test4 da671da259ce swarm:latest "/swarm join --addr 1" 2 hours ago Up 2 hours 2375/tcp node2/shipyard-swarm-agent 4d9725a9f0de shipyard/shipyard:latest "/bin/controller serv" 2 hours ago Up 2 hours 192.168.0.56:9090->8080/tcp node1/shipyard-controller d994169e39c7 rethinkdb "rethinkdb --bind all" 2 hours ago Up 2 hours 8080/tcp, 28015/tcp, 29015/tcp node1/shipyard-rethinkdb,node1/shipyard-controller/rethinkdb 5f5b793a358d swarm:latest "/swarm join --addr 1" 2 hours ago Up 2 hours 2375/tcp node1/shipyard-swarm-agent 7f20411fc504 swarm:latest "/swarm manage --host" 2 hours ago Up 2 hours 2375/tcp, 192.168.0.56:3375->3375/tcp node1/shipyard-swarm-manager,node1/shipyard-controller/swarm
下面我們測試跨主機網絡的連通性,我們通過attach到test4容器上ping test5來驗證分散在不同節點上的容器的網絡連通性
$ docker -H 192.168.0.56:3375 attach test4 root@db7113bae6d0:/# root@db7113bae6d0:/# ping -c 4 test5 PING test5 (10.0.0.8) 56(84) bytes of data. 64 bytes from test5.test-net (10.0.0.8): icmp_seq=1 ttl=64 time=0.283 ms 64 bytes from test5.test-net (10.0.0.8): icmp_seq=2 ttl=64 time=0.285 ms 64 bytes from test5.test-net (10.0.0.8): icmp_seq=3 ttl=64 time=0.295 ms 64 bytes from test5.test-net (10.0.0.8): icmp_seq=4 ttl=64 time=0.221 ms --- test5 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.221/0.271/0.295/0.029 ms
看完上述內容,你們掌握怎樣使用Shipyard部署Docker Swarm集群和跨主機Overlay網絡的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。