1、什么是docker swarm集群
简单来讲,平常使用的docker是单机的,使用docker swarm 可以把多个单机组成一个局域网,变为一个整体的
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群。
2、节点
管理节点用于 Swarm 集群的管理, docker swarm 相关命令大多只能在管理节点执行,工作节点只能执行加入集群和退出集群命令。
一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader , leader 通过 raft 协议实现。
工作节点是任务执行节点,管理节点将服务下发至工作节点执行。
管理节点默认也作为工作节点。可以通过配置让服务只运行在管理节点。
3、创建swarm集群
名称 | IP | 角色 |
---|---|---|
v2 | 192.168.78.102 | 管理节点 |
v3 | 192.168.78.103 | 工作节点 |
v4 | 192.168.78.104 | 工作节点 |
v5 | 192.168.78.105 | 工作节点 |
(1)先分别对v2、v3、v4、v5主机重命名
之所以这样做,是因为如果不重命名,之后查看集群状态、扩容缩容很难去分辨哪个是哪个
# 在v2上执行
hostnamectl set-hostname v2
systemctl restart docker
# 在v3上执行
hostnamectl set-hostname v3
systemctl restart docker
# 在v4上执行
hostnamectl set-hostname v4
systemctl restart docker
# 在v5上执行
hostnamectl set-hostname v5
systemctl restart docker
(2)在v2创建Swarm集群
(3)在v3、v4、v5主机上分别执行 “加入集群”命令
在v1节点上执行了docker swarm init后,相当于创建了一个docker集群,并且v1自动成为该集群的管理节点。
其他docker主机想要加入该集群,按照V1上提示的command,在自己的主机上执行即可,也就是:
docker swarm join \
--token SWMTKN-1-2gnmohmoo21y33x0bv6w339hy145u795cy3ow3x6c6ot64yggz-91vnidr8tljhor7u2nfvejxzc \
192.168.78.102:2377
(4)在管理节点查看集群状态
# 在管理节点v2上执行
docker node ls
(5)说明
到这里,docker集群就搭建完了,四个主机上的docker可以视作一个整体了。
之所以搭建docker swarm集群,目的是为了把不同的docker主机从单兵作战转变为整体作战。
之后的很多集群操作,比如使用docker快速搭建MySQL-PXC集群等都会用到今天搭建的docker swarm。
4、docker swarm 常用命令
(1) 查看集群状态(在管理节点执行)
# 在管理节点执行命令
docker node ls
(2) 移除节点(在管理节点执行)
# 移除集群中的某个节点(管理节点上执行)
docker node rm 节点ID -f
(3) 退出集群(管理节点和工作节点均可执行)
docker swarm leave -f
5、docker swarm 集群下的主机,内部是如何通信的
上面我们创建了管理节点v2,工作节点v3、v4、v5,共计四个docker主机共同组成的docker swarm集群。
那么他们集群内部是如何通信的呢?
其实如果在每个主机上执行docker network ls
查看网络,细心地话,就会发现,docker swarm集群下的每一个docker主机都有一个id相同的网络。它们不是我们手动创建的,而是在执行 docker swarm init 或 docker swarm join时创建的。
这也是docker swarm集群内部通信的奥秘。