一、规划
①swarm01作为manager节点,swarm02和swarm03作为worker节点。
|
1
2
3
4
5
|
127.0.0.1 localhost
192.168.139.175 swarm01
192.168.139.176 swarm02
192.168.139.177 swarm03
|
②配置SSH免密登陆
二、安装docker和ansible
①安装配置ansible
|
1
2
3
4
5
6
7
8
9
10
11
|
[node]
192.168.139.176
192.168.139.177
|
注:这里选择关闭防火墙,实际环境中可自行开放端口。
②安装docker
a.在manager节点安装docker
|
1
2
3
4
5
6
7
8
9
|
Docker version 17.06.0-ce, build 02c1d87
|
b.使用ansible在worker节点安装docker
|
1
2
3
4
5
6
7
8
9
10
|
192.168.139.173 | SUCCESS | rc=0 >>
Docker version 17.06.0-ce, build 02c1d87
192.168.139.174 | SUCCESS | rc=0 >>
Docker version 17.06.0-ce, build 02c1d87
|
三、配置docker swarm集群
①创建docker swarm集群
|
1
2
3
4
5
|
Swarm initialized: current node (a1tno675d14sm6bqlc512vf10) is now a manager.
To add a worker to this swarm, run the following
command
:
docker swarm
join
--token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377
To add a manager to this swarm, run
'docker swarm join-token manager'
and follow the instructions.
|
②查看节点
|
1
2
3
|
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
a1tno675d14sm6bqlc512vf10 * swarm01 Ready Active Leader
|
③查看加入集群manager管理节点的命令
|
1
2
3
|
To add a manager to this swarm, run the following
command
:
docker swarm
join
--token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-7tdlpdnkyfl1bnq34ftik9wxw 192.168.139.175:2377
|
④查看加入集群worker节点的命令
|
1
2
3
|
To add a worker to this swarm, run the following
command
:
docker swarm
join
--token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377
|
⑤将前面规划的两个worker节点加入集群
|
1
2
|
This node joined a swarm as a worker.
|
⑥查看worker节点是否已加入集群
|
1
2
3
4
5
|
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
7zkbqgrjlsn8c09l3fagtfwre swarm02 Ready Active
a1tno675d14sm6bqlc512vf10 * swarm01 Ready Active Leader
apy9zys2ch4dlwbmgdqwc0pn3 swarm03 Ready Active
|
⑦查看docker swarm的管理网络
|
1
2
3
4
5
6
7
|
NETWORK ID NAME DRIVER SCOPE
05efca714d2f bridge bridge
local
c9cd9c37edd7 docker_gwbridge bridge
local
10ac9e48d81b host host
local
n60tdenc5jy7 ingress overlay swarm
a9284277dc18 none null
local
|
这里,一个docker swarm集群就搭建好了
四、搭建docker swarm的UI---Portainer
Portainer地址:https://portainer.io/。
①使用该命令部署Portainer
|
1
2
3
4
5
6
7
8
9
10
11
12
|
--name portainer \
--publish 9000:9000 \
--constraint
'node.role == manager'
\
--
mount
type
=bind,src=
//var/run/docker
.sock,dst=
/var/run/docker
.sock \
portainer
/portainer
\
-H unix:
///var/run/docker
.sock
portainer
/portainer
latest 07cde96d4789 2 weeks ago 10.4MB
ID NAME MODE REPLICAS IMAGE PORTS
p5bo3n0fmqgz portainer replicated 1
/1
portainer
/portainer
:latest *:9000->9000
/tcp
|
这就部署好了
②浏览器输入http://localhost:9000进入该UI界面,如下所示,第一次进入Portainer,配置8位数的admin密码
![portainer01.PNG wKioL1mEM6Cxc0aPAAAwIzfGw_M202.png]()
密码修改完成后点击“validate”验证
![portainer02.PNG wKioL1mENCvAKI-BAAAxitxXbLw304.png]()
如下图所示,输入admin用户名和密码进入Portainer
![portainer03.PNG wKioL1mENUPQiWZFAAAi6DgCxBc318.png]()
首页如下
![portainer04.PNG wKiom1mENiGQR3wTAABYpkVe-dU381.png]()
查看swarm节点模块
![portainer05.PNG wKioL1mEN8bCiUCMAABVv3Ya1jY924.png]()
这里可以在images模块pull镜像,在这里我pull了nginx![portainer06.PNG wKioL1mEOKSTd4FDAABNC3m1Qt4756.png]()
在Services模块下创建nginx服务,Services > Add service,这里创建三个副本,并将80端口映射出去,最后点击“Create Service”创建服务
![portainer07.PNG wKioL1mEOZbhMNmhAABqnRU0yHI223.png]()
刷新服务列表,查看是否创建成功
![portainer08.PNG wKioL1mEOwiSu_csAAA6-W7QVSQ884.png]()
③使用命令进行确认
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
nginx latest b8efb18f159b 7 days ago 107MB
192.168.139.177 | SUCCESS | rc=0 >>
nginx latest b8efb18f159b 8 days ago 107MB
192.168.139.176 | SUCCESS | rc=0 >>
nginx latest b8efb18f159b 8 days ago 107MB
ID NAME MODE REPLICAS IMAGE PORTS
emrs3rj73bwh Nginx replicated 3
/3
nginx:latest *:80->80
/tcp
p5bo3n0fmqgz portainer replicated 1
/1
portainer
/portainer
:latest *:9000->9000
/tcp
ID NAME IMAGE NODE
0smpndfx0bwc Nginx.1 nginx:latest swarm03
werrrzlyfbf1 Nginx.2 nginx:latest swarm01
l7puro0787cj Nginx.3 nginx:latest swarm02
DESIRED STATE CURRENT STATE ERROR PORTS
Running Running 15 minutes ago
Running Running 15 minutes ago
Running Running 15 minutes ago
|
![portainer09.PNG wKioL1mEQ92CLwgaAAAZoiKr_Ns993.png]()
五、搭建docker swarm的UI---Shipyard
Shipyard的UI也是比较简单的,但是比较反复,它需要在每个节点都pull相应镜像才能加入Shipyard的UI。
①先pull相应镜像到本地,这里我使用的是网易蜂巢的镜像,很快而且镜像也是比较新的
②给这些镜像新建一个tag标签
③使用如下命令搭建Shipyard的UI
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Deploying Shipyard
-> Starting Database
-> Starting Discovery
-> Starting Cert Volume
-> Starting Proxy
-> Starting Swarm Manager
-> Starting Swarm Agent
-> Starting Controller
Waiting
for
Shipyard on 192.168.139.175:8080
..
Shipyard available at http:
//192
.168.139.175:8080
Username: admin Password: shipyard
|
④根据提示输入http://localhost:8080,输入用户名admin,密码shipyard进入shipyard
![Shipyard01.PNG wKioL1mERqPAOVcmAAAvlJtRgYM012.png]()
⑤进入shipyard首页容器界面
![Shipyard02.PNG wKioL1mER7nC5aYSAACgkKkUKjo303.png]()
⑥进入nodes模块查看,这里现在只有manager节点
![Shipyard03.PNG wKiom1mESAexeohTAAA04Jty5cU301.png]()
⑦在worker节点上pull并tag镜像,即是重复如上的第①和第②步,之后,在该worker节点上输入如下命令将其加入shipyard
|
1
2
3
4
5
6
7
|
Adding Node
-> Starting Cert Volume
-> Starting Proxy
-> Starting Swarm Manager
-> Starting Swarm Agent
Node added to Swarm: 192.168.139.176
|
![Shipyard04.PNG wKiom1mESRHR_kmQAABMAOizegk002.png]()
其他节点同理。
对比两种UI,其实都是比较简单的,个人认为Portainer较好,在manager节点pull一个镜像即可搭建UI。
问题:
manager:
worker:
|
1
2
|
Error response from daemon: Timeout was reached before node was joined. The attempt to
join
the swarm will
continue
in
the background. Use the
"docker info"
command
to see the current swarm status of your node.
|
出现worker节点无法加入集群的问题,这里需要设置监听地址全零。
本文转自 结束的伤感 51CTO博客,原文链接:
http://blog.51cto.com/wangzhijian/1953677