使用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集群是否已经真的创建好了?哪里出错了?现将创建过程及遇到的现象、问题整理如下:
主要过程:
集群由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 ~
======================