使用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 Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建Swarm集群的问题-概念混淆导致使用Docker Toolbox 创建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

 

[email protected] MINGW64 ~

$ eval $(docker-machine env --swarm master1)

 

[email protected] MINGW64 ~

$ docker swarm join-token manager

Error response from daemon: 404 page not found

 

[email protected] MINGW64 ~

$ docker swarm join-token worker

Error response from daemon: 404 page not found

 

[email protected] MINGW64 ~

$ docker node ls

Error response from daemon: 404 page not found

 

[email protected] MINGW64 ~

$ docker service ls

Error response from daemon: 404 page not found

 

[email protected] 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

 

[email protected] MINGW64 ~

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