准备
1.至少两台虚拟机(ip能够互相ping通)
2.docker版本至少1.12
3.打开必要端口
- 2377(集群管理通信)
- 7946(节点间通信)
- 4789(overlay网络端口)
创建集群
在其中一台机器上执行docker swarm init --advertise-addr <MANAGER-IP>
创建集群
$ docker swarm init --advertise-addr 192.168.190.136
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
192.168.99.100:2377
只有有了token就很容易加入集群,token至少每6个月要更换一次,执行命令 swarm join-token --rotate
来更换token。
Docker使用Raft一致性算法管理集群节点,关于Raft可参考:http://www.open-open.com/lib/view/open1436599774864.html
加入集群
在其它机器上运行加入集群的命令,该命令在创建集群时会显示
$ docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
This node joined a swarm as a worker.
如果你忘记了加入命令,可以在manager节点上执行以下命令获取:
$ docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
注意:并不是管理节点越多可伸缩性和规模就越大,有时候却恰恰相反,建议集群最多7个管理节点。当有3个管理节点时,最多容许失效1个管理节点;当有5个时,最多容许同时失效2个;当有n个时,最多容许失效(N-1)/2
个。建议基数个管理节点。
离开集群
在要离开的节点执行(如果是manager需要加--force
,否则返回错误警告):
$ docker swarm leave
Node left the swarm.
然后再在管理节点上执行命令docker node rm <NODE>
,将该节点从node-list中删除。
查看节点
1. 查看集群所有节点
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
46aqrk4e473hjbt745z53cr3t node-5 Ready Active Reachable
61pi3d91s0w3b90ijw3deeb2q node-4 Ready Active Reachable
a5b2m3oghd48m8eu391pefq5u node-3 Ready Active
e7p8btxeu3ioshyuj6lxiv6g0 node-2 Ready Active
ehkv3bcimagdese79dn78otj5 * node-1 Ready Active Leader
AVAILABILITY
可用状态:
-
Active
活动的节点,可以被调度器分配任务 -
Pause
不能分配新任务,已存在的任务继续运行 -
Drain
不能分配新任务,已存在的任务会被停止,并将这些任务调度到在可用节点上
MANAGER STATUS
管理者状态:
- 无值 表示该节点是worker
-
Leader
集群的第一个管理者,管理整个集群,编排决策 -
Reachable
属于管理节点,当Leader
节点不可用后,该节点有权利竞选Leader
-
Unreachable
管理节点不可用,无法与其它管理节点连接(节点退出集群)
2. 查看指定节点详情
//不加--pretty返回json格式
$ docker node inspect self --pretty
ID: ehkv3bcimagdese79dn78otj5
Hostname: node-1
Status:
State: Ready
Availability: Active
Manager Status:
Address: 172.17.0.2:2377
Raft Status: Reachable
Leader: Yes
Platform:
Operating System: linux
Architecture: x86_64
Resources:
CPUs: 2
Memory: 1.954 GiB
Plugins:
Network: overlay, host, bridge, overlay, null
Volume: local
Engine Version: 1.12.0-dev
更新节点
1. 更新节点状态
// drain, pause, active
$ docker node update --availability drain node-1
node-1
2. 添加和删除节点标签
节点标签:方便节点组织,约束服务,限制服务调度
//--label-add 参数支持<key>和<key>=<value>
$ docker node update --label-add foo --label-add bar=baz node-1
node-1
3. 提升和降级节点
必须保持基数管理节点
$ docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
$ docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
和以下命令功能相同,但更方便
docker node update --role manager node-3 node-2
docker node update --role worker node-3 node-2
网友评论