docker swarm 是说明
简单粗暴一句话:Docker Swarm 是 Docker 的集群管理工具。
它将 Docker 主机池转变为单个虚拟 Docker 主机。
Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
可以配合 Jenkins 一块使用。
环境准备
- linux 主机 4台 (我用的是centos7 虚拟机)
- 4台机器必须按装docker 环境
- 参考官方文档
docker基础命令学习资料
如果没有docker基础知识的可以参考一下内容学习docker基础命令。
docker swarm 初体验
初始 docker swarm
#查看命令参数 一定要学会看 帮助命令
[root@localhost ~]# docker swarm init --help
# 初始化,下边生成了一个token令牌 其他机器可以使用这个令牌加入集群
# 注意加入的集群一定要能互相 ping通
[root@localhost ~]# docker swarm init --advertise-addr 192.168.56.101
Swarm initialized: current node (qh4e0q69jgboh7xc8t4vk79s6) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0xknntriyzpzrq4xy7pe8iv4e9nfp07rujvxdsx7y8uk520v2b-citxitsx6q4d8usgpoh30olc6 192.168.56.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
#如果我们没有保存这个token 也可以使用命令再次生成
生成swarm加入集群的token
#生成一个work节点加入的token
[root@localhost ~]# docker swarm join-token worker
#生成一个manger节点加入的token
[root@localhost ~]# docker swarm join-token manager
查看swarm下节点
[root@localhost ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
qh4e0q69jgboh7xc8t4vk79s6 * localhost.localdomain Ready Active Leader 19.03.12
加入swarm集群
[root@localhost ~]# docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.56.101:2377: connect: no route to host"
这里发现无法加入,这里是防火墙搞的,如果是自己完的话直接关闭防火墙就行
# systemctl stop firewalld.service
如果是线上部署的话可以打开指定的端口: 2377、7946 、4789
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
这是官方给出的端口 参考文档地址:
https://docs.docker.com/engine/swarm/swarm-tutorial/
#关闭防火墙以后 加入成功,其他两台机器一台 还是work模式加入
#另一台我们用manger模式加入
###服务器2
[root@localhost ~]# docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
This node joined a swarm as a worker.
###服务器3
[root@localhost ~]# docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-26019h0g7kf1slpdta4szlkvn 192.168.56.101:2377
This node joined a swarm as a worker.
###服务器4 --这里加入token 需要从第一台机器重新生成一个manger加入的token
用这个命令生成:docker swarm join-token manager ##
docker swarm join --token SWMTKN-1-0y6e92mikkgwjd1okg5wvvp41q0gmpm4fmylav4ksr1nvsqois-41q5l7a7ems2xvw0o86yljcd9 192.168.56.101:2377
This node joined a swarm as a manager.
#查看节点信息
[root@localhost ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
32mu1pfbfqj2b7jl1cpaxjucu localhost.localdomain Ready Active 19.03.12
bw2y1830zh8sovzmtjr4u23uh * localhost.localdomain Ready Active Reachable 19.03.12
hqej0hy156s4xcjjo77fvqhck localhost.localdomain Ready Active Leader 19.03.12
q7h5k3bdwene1frds1jrpb3uu localhost.localdomain Ready Active 19.03.12
集群高可用性测试
测试让一台manger节点停止
我们上边设置的docker 集群使用的2work 2manger 如果我们将一个manger停掉会怎么样?
## 04机器
[root@localhost ~]# systemctl stop docker
## 01机器
[root@localhost ~]# docker node ls
Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.
发现我们的docker集群直接挂到了,了解过集群一致性的应该都知道
我们的集群一般要3台以上存活才能保证可用。
其实docker swarm使用了Raft协议 看图
官方网站地址:
https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/