Docker Swarm
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,
而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
Dcoker Swarm 集群部署:
机器环境(三台机器 CentOS Linux release 7.6.1810 (Core))
IP地址 主机名 角色 192.168.10.10 s-manager swarm manager 192.168.10.20 s-node1 swarm node 192.168.10.30 s-node2 swarm node
准备工作:
1) 修改主机名
# 192.168.10.10执行 [root@localhost ~]# hostnamectl set-hostname s-manager # 192.168.10.20执行 [root@localhost ~]# hostnamectl set-hostname s-node1 # 192.168.10.30执行 [root@localhost ~]# hostnamectl set-hostname s-node2
2)配置hosts文件
[root@s-manager ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ###################################################### 192.168.10.10 s-manager 192.168.10.20 s-node1 192.168.10.30 s-node2 # 使用scp复制到node主机 [root@s-manager ~]# scp -r /etc/hosts root@192.168.10.20:/etc/host [root@s-manager ~]# scp -r /etc/hosts root@192.168.10.30:/etc/hosts
3) 关闭三台机器上的防火墙
# systemctl disable firewalld.service
# systemctl stop firewalld.service
4)在三台主机安装docker服务
# 安装docker服务 # yum update -y # yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # yum install docker-ce -y # 启动docker服务 # systemctl enable docker # systemctl start docker # 查看docker版本 # docker version
2、创建Swarm并添加节点
1) 创建Swarm集群
[root@s-manager ~]# docker swarm init --advertise-addr 192.168.10.10 Swarm initialized: current node (3c3okcegaqfv02kx6cuis1ltp) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3au9yp23xlnd6u6ou5q3hyyw5nkj26trlzxo2mexp4bqf3h65y-3tc0feaat3ah2nvdmq7itvqfe 192.168.10.10:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. [root@s-manager ~]#
上面命令执行后,该机器会自动加入到swarm集群,并会创建一个集群token,作为集群唯一标识,后续将其他节点加入集群都会用到这个token值。其中,--advertise-addr 参数表示其它swarm 中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。
# 如果再次执行上面的命令,会报下面的错误
[root@s-manager ~]# docker swarm init --advertise-addr 192.168.10.10 Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one. [root@s-manager ~]#
# 解决方法, 这里的leave就是在集群中删除节点,-f参数强制删除,执行完在重新执行OK。
[root@s-manager ~]# docker swarm leave -f
Node left the swarm.
[root@s-manager ~]#
执行下面的命令, 找到Swarm的关键字,就可以看到相关信息了
[root@s-manager ~]# docker info |grep Swarm
Swarm: active
查看集群中的机器(注意上面node ID旁边那个*号表示现在连接到这个节点上)
[root@s-manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 3c3okcegaqfv02kx6cuis1ltp * s-manager Ready Active Leader 19.03.8 [root@s-manager ~]#
3) 添加节点主机到Swarm集群
上面我们在创建Swarm集群的时候就已经给出了添加节点的方法,如果想要将其他更多的节点添加到这个swarm集群中,添加方法如下一致。
# 192.168.10.20 主机上执行 [root@s-node1 ~]# docker swarm join --token SWMTKN-1-3au9yp23xlnd6u6ou5q3hyyw5nkj26trlzxo2mexp4bqf3h65y-3tc0feaat3ah2nvdmq7itvqfe 192.168.10.10:2377 This node joined a swarm as a worker. [root@s-node1 ~]# # 192.168.10.30 主机上执行 [root@s-node2 ~]# docker swarm join --token SWMTKN-1-3au9yp23xlnd6u6ou5q3hyyw5nkj26trlzxo2mexp4bqf3h65y-3tc0feaat3ah2nvdmq7itvqfe 192.168.10.10:2377 This node joined a swarm as a worker. [root@s-node2 ~]#
在s-manager主机上我们可以看一下集群中的机器及状态。
[root@s-manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 3c3okcegaqfv02kx6cuis1ltp * s-manager Ready Active Leader 19.03.8 bma6v4f8hx5xvefpizelk4pv0 s-node1 Ready Active 19.03.8 6fbb52zf9wt6ap6u6znrgp5zl s-node2 Ready Active 19.03.8 [root@s-manager ~]#
温馨提示:
更改节点的availablity(可用性)状态
swarm 集群中node的availability状态可以为 active或者drain,其中:
active 状态下,node可以接受来自manager节点的任务分派;
drain 状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
将s-node2节点下线,如果要删除 s-node2节点,执行"docker node rm --force s-node2"命令
[root@s-manager ~]# docker node update --availability drain s-node2 s-node2 [root@s-manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 3c3okcegaqfv02kx6cuis1ltp * s-manager Ready Active Leader 19.03.8 bma6v4f8hx5xvefpizelk4pv0 s-node1 Ready Active 19.03.8 6fbb52zf9wt6ap6u6znrgp5zl s-node2 Ready Drain 19.03.8 [root@s-manager ~]#
如上,当 s-node2 的状态改为drain后,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。
将s-node2节点修改为active状态(即将下线的节点再次上线)
[root@s-manager ~]# docker node update --availability active s-node2 s-node2 [root@s-manager ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 3c3okcegaqfv02kx6cuis1ltp * s-manager Ready Active Leader 19.03.8 bma6v4f8hx5xvefpizelk4pv0 s-node1 Ready Active 19.03.8 6fbb52zf9wt6ap6u6znrgp5zl s-node2 Ready Active 19.03.8 [root@s-manager ~]#

浙公网安备 33010602011771号