使用Docker Toolbox 建立Swarm叢集的問題-概念混淆導致
使用Docker Toolbox 時,不帶--swarm --swarm-master選項建立Docker虛擬機器,並在主控節點的虛擬機器上執行初始化叢集命令,在管理節點上執行加入叢集命令,在工作節點執行加入叢集命令,這樣就搭建好了一個Swarm叢集,用於測試環境非常方便,可以在叢集中執行docker network /docker node /docker service /docker stack等叢集相關的管理命令。
我們還可以將整個手工操作建立叢集的過程中所用到的命令組合起來,編成指令碼,以後需要時,直接複製貼上就可以建立好一個可用的Swarm叢集,使用起來非常方便。我在做以上實驗時,一路使用下來都非常順利。
存在疑問:
在檢視docker-machine create幫助資訊時,有swarm 打頭的好多選項,比如--swarm --swarm-master --swarm-host --swarm-addr --swarm-discovery等選項,它們到底是什麼作用?能否使用它們快速建立Swarm叢集呢?
今天在嘗試使用 docker-machine create 自帶--swarm引數的方式來建立 Swarm叢集時,卻遇到了很大的麻煩,叢集主機建立完畢後,執行docker swarm / docker info /docker node / docker service 等命令時,均報錯!我開始懷疑,
主要過程:
叢集由1個K/V虛擬機器、3個master叢集管理虛擬機器、1個node叢集非管理虛擬機器組成。使用docker-machine create 命令快速建立虛機,主要建立過程如下:
1、建立1個K/V外部鍵值儲存虛機
2、建立3個master 叢集管理虛機
3、建立1個node 叢集工作虛機
4、測試Swarm叢集相關的命令
5、遇到的問題彙總
相關命令:
# 1.建立1個K/V外部鍵值儲存虛機
# 為了以後快速下載Docker映象,解決國內網路訪問國外伺服器慢的問題,
# 在建立虛擬機器時,一定要加上映象加速器地址。
# kv虛擬機器的名稱為kvstore
docker-machine create \
--driver virtualbox \
--engine-registry-mirror=https://registry.docker-cn.com \
kvstore
# 切換到kvstore 虛擬機器上
# 執行consul容器,提供叢集的KV儲存和查詢服務
eval $(docker-machine env kvstore)
docker run --name consul \
--restart=always \
-p 8400:8400 \
-p 8500:8500 \
-p 53:53/udp \
-d progrium/consul \
-server -bootstrap-expect 1 \
-ui-dir /ui
# 顯示Consul 圖形化管理介面的的訪問方法:
echo 訪問 consul 伺服器的網址:http://$(docker-machine ip kvstore):8500/ui
# 2.建立3個master 叢集管理虛機
# 建立Swarm 叢集的主控節點 master1
# 使用KV儲存,提供服務發現功能
# 注意末尾的反斜槓後面不能有空格!!!
docker-machine create \
--driver virtualbox \
--engine-registry-mirror=https://registry.docker-cn.com \
--swarm \
--swarm-master \
--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
master1
# 建立Swarm 叢集的管理節點 master2
docker-machine create \
--driver virtualbox \
--engine-registry-mirror=https://registry.docker-cn.com \
--swarm \
--swarm-master \
--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
master2
# 建立Swarm 叢集的管理節點 master3
docker-machine create \
--driver virtualbox \
--engine-registry-mirror=https://registry.docker-cn.com \
--swarm \
--swarm-master \
--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
master3
# 3.建立1個node 叢集工作節點虛機
# 注意:這裡沒有 --swarm-master 引數
docker-machine create \
--driver virtualbox \
--engine-registry-mirror=https://registry.docker-cn.com \
--swarm \
--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
node1
# 切換到 Docker Swarm 叢集的管理節點 master1上
eval $(docker-machine env --swarm master1)
# 顯示幾臺虛擬機器的執行狀態
docker-machine ls
# 通過訪問 Consul的Web頁面來檢視Swarm節點的註冊情況
# 顯示檢視方法:
echo "訪問 Consul的Web頁面網址:http://$(docker-machine ip kvstore):8500/ui"
# 4.測試Swarm叢集相關的命令
# 切換到 Docker Swarm 叢集的管理節點 master1上
# 擬執行以下命令,驗證叢集是否正常執行:
# docker swarm join-token manager #檢視加入叢集管理節點的令牌
# docker swarm join-token worker #檢視加入叢集工作節點的令牌
# docker node ls #檢視叢集的節點狀態
# docker service ls #檢視叢集內的服務
# docker info #檢視 docker 資訊命令
# 5.遇到的問題彙總
# 5.1查詢管理節點加入叢集的令牌時報錯
# 提示Error response from daemon: 404 page not found
eval $(docker-machine env --swarm master1)
docker swarm join-token manager
# 5.2檢視工作節點加入叢集的令牌時報錯
# 提示Error response from daemon: 404 page not found
docker swarm join-token worker
# 5.3檢視叢集的節點狀態時報錯
# 提示Error response from daemon: 404 page not found
docker node ls
# 5.4檢視叢集內的服務時報錯
# 提示Error response from daemon: 404 page not found
docker service ls
# 5.5檢視 docker info 資訊命令時,
# Swarm狀態似乎又是對的
docker info
# 這樣的Swarm叢集是正常的嗎?
# 命令執行結束
#以下是截圖
# 以下是螢幕輸出的資訊:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376
v17.05.0-ce
kvstore - virtualbox Running tcp://192.168.99.127:2376
v17.05.0-ce
master1 * (swarm) virtualbox Running tcp://192.168.99.128:2376 master3
(master) v17.05.0-ce
master2 - virtualbox Running tcp://192.168.99.129:2376 master3
(master) v17.05.0-ce
master3 - virtualbox Running tcp://192.168.99.130:2376 master3
(master) v17.05.0-ce
node1 - virtualbox Running tcp://192.168.99.131:2376 master3
v17.05.0-ce
catty@15FD201 MINGW64 ~
$ eval $(docker-machine env --swarm master1)
catty@15FD201 MINGW64 ~
$ docker swarm join-token manager
Error response from daemon: 404 page not found
catty@15FD201 MINGW64 ~
$ docker swarm join-token worker
Error response from daemon: 404 page not found
catty@15FD201 MINGW64 ~
$ docker node ls
Error response from daemon: 404 page not found
catty@15FD201 MINGW64 ~
$ docker service ls
Error response from daemon: 404 page not found
catty@15FD201 MINGW64 ~
$ docker info
Containers: 17
Running: 13
Paused: 0
Stopped: 4
Images: 8
Server Version: swarm/1.2.6
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whiteli
st
Nodes: 4
master1: 192.168.99.128:2376
ID: CLKY:ZJRF:3ORA:MFQZ:SJTD:7BHH:PQN4:UJ7J:PRVN:YUH5:PD4L:X2GM
Status: Healthy
Containers: 6 (2 Running, 0 Paused, 4 Stopped)
Reserved CPUs: 0 / 1
Reserved Memory: 0 B / 1.021 GiB
Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0
-ce (TCL 7.2); HEAD : 5ed2840 - Fri May 5 21:04:09 UTC 2017, provider=virtualbo
x, storagedriver=aufs
UpdatedAt: 2017-06-21T11:39:38Z
ServerVersion: 17.05.0-ce
master2: 192.168.99.129:2376
ID: 6SLY:RRPY:B55U:VQMJ:O5YP:VIQU:E4ZO:DXWY:5CIV:EYIA:H6XF:D66Z
Status: Healthy
Containers: 4 (4 Running, 0 Paused, 0 Stopped)
Reserved CPUs: 0 / 1
Reserved Memory: 0 B / 1.021 GiB
Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0
-ce (TCL 7.2); HEAD : 5ed2840 - Fri May 5 21:04:09 UTC 2017, provider=virtualbo
x, storagedriver=aufs
UpdatedAt: 2017-06-21T11:39:49Z
ServerVersion: 17.05.0-ce
master3: 192.168.99.130:2376
ID: I3WH:LMSD:BPN2:MI2E:CDJK:6UGY:YAN7:7YTC:C5S6:VM5V:E7WP:FWHY
Status: Healthy
Containers: 4 (4 Running, 0 Paused, 0 Stopped)
Reserved CPUs: 0 / 1
Reserved Memory: 0 B / 1.021 GiB
Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0
-ce (TCL 7.2); HEAD : 5ed2840 - Fri May 5 21:04:09 UTC 2017, provider=virtualbo
x, storagedriver=aufs
UpdatedAt: 2017-06-21T11:39:48Z
ServerVersion: 17.05.0-ce
node1: 192.168.99.131:2376
ID: NSUB:QR3B:KHNW:LYYT:7JHR:KZN7:U6N2:JTGW:CQK3:DATD:UNRQ:D4ID
Status: Healthy
Containers: 3 (3 Running, 0 Paused, 0 Stopped)
Reserved CPUs: 0 / 1
Reserved Memory: 0 B / 1.021 GiB
Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0
-ce (TCL 7.2); HEAD : 5ed2840 - Fri May 5 21:04:09 UTC 2017, provider=virtualbo
x, storagedriver=aufs
UpdatedAt: 2017-06-21T11:39:45Z
ServerVersion: 17.05.0-ce
Plugins:
Volume:
Network:
Swarm:
NodeID:
Is Manager: false
Node Address:
Kernel Version: 4.4.66-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 4
Total Memory: 4.084GiB
Name: 1906edbdfc34
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Live Restore Enabled: false
WARNING: No kernel memory limit support
catty@15FD201 MINGW64 ~
======================