1. 程式人生 > >使用Docker Toolbox 建立Swarm叢集的問題-概念混淆導致

使用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 等命令時,均報錯!我開始懷疑,

Swarm叢集是否已經真的建立好了?哪裡出錯了?現將建立過程及遇到的現象、問題整理如下:

主要過程:

    叢集由1K/V虛擬機器、3master叢集管理虛擬機器、1node叢集非管理虛擬機器組成。使用docker-machine create 命令快速建立虛機,主要建立過程如下:

1、建立1K/V外部鍵值儲存虛機

2、建立3master 叢集管理虛機

3、建立1node 叢集工作虛機

4、測試Swarm叢集相關的命令

5、遇到的問題彙總

相關命令:

# 1.建立1K/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.建立3master 叢集管理虛機

# 建立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.建立1node 叢集工作節點虛機

# 注意:這裡沒有 --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

# 通過訪問 ConsulWeb頁面來檢視Swarm節點的註冊情況

# 顯示檢視方法:

echo "訪問 ConsulWeb頁面網址: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 ~

 ======================