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 ~]# 

 

posted @ 2020-05-15 17:34  梦徒  阅读(572)  评论(0)    收藏  举报