一、环境介绍

1.1 主机介绍

主机名称 地址 版本 数量
mgr1 192.168.100.130/24 Ubuntu20.0.4 1台
wrk1 192.168.100.110/24 Centos7-X86_64-Eeverything2009 1台
wrk2 192.168.100.131/24 Centos7-X86_64-Eeverything2009 1台

1.2 Swarm集群介绍

搭建的Swarm集群总共1个管理节点,2个工作节点。其中以Ubuntu主机为mgr1,两台Centos主机分别为wrk1和wrk2。

二、准备工作

2.1 网络可达

1、三台Linux主机可以上网,同时也可以互通地址;

2.2 开放端口

三台Linux主机需要开放以下端口: 1.2377/tcp 用于客户端与Swarm进行安全通信 2.7946/tcp和7946/udp 用于节点之间的通信 3.4789/udp 用于基于VXLAN的覆盖网络

Centos7主机开放端口,可参考Centos7如何开放指定端口 Ubuntu20.04主机开放端口,可参考Ubuntu20.04如何开放指定端口

2.3 Dock引擎

三台Linux主机安装好Docker引擎,可参考基于Ubuntu版本和Centos版本Docker 引擎(Engine)升级

三、搭建步骤

3.1 创建带有管理节点的Swarm

1、登录到mgr1执行docker swarm init --advertise-addr 192.168.100.130:2377 --listen-addr 192.168.100.130:2377命令初始化一个新的Swarm。

root@zq-virtual-machine:~# docker swarm init --advertise-addr 192.168.100.130:2377 --listen-addr 192.168.100.130:2377
Swarm initialized: current node (oz4yqja5d46z4x4sft4h9qilm) is now a manager.

针对上面指令分解说明: * docker swarm init:通知Docker初始化一个新的Swarm,并将自身作为第一个管理节点,同时这个节点开启Swarm模式 * --advertise-addr:指定其他节点用来连接到当前管理节点的IP和端口。这是为了防止节点有多个IP不能确认 * --listen-addr:指定用于承载Swarm流量的IP和端口,这也是为了防止节点有多个IP不能确认

说明:Swarm模式下的操作默认运行2377端口!!!

2、继续执行docker info命令查看 swarm 的当前状态。观察到Swarm状态为active。

root@zq-virtual-machine:~# docker info 
......
 Swarm: active
  NodeID: oz4yqja5d46z4x4sft4h9qilm
  Is Manager: true
  ClusterID: t80w9wpih8nz23ppbkzwux1p7
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
......

3、继续执行docker node ls命令列出Swarm中的节点。MANAGER一栏中显示【Leader】代表管理节点。

root@zq-virtual-machine:~# docker node ls
ID                            HOSTNAME             STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
oz4yqja5d46z4x4sft4h9qilm *   zq-virtual-machine   Ready     Active         Leader           20.10.18

说明:节点ID后面的【*】代表此时登录的节点!!!

3.2 将工作节点wrk1添加到Swarm

1、登录到mgr1执行docker swarm join-token worker命令来获取添加工作节点到Swarm的命令和Token。如果是添加管理节点到Swarm,则将worker换成manager,即docker swarm join-token manager命令。

root@zq-virtual-machine:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377

2、登录到wrk1执行docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377命令将工作节点wrk1添加到Swarm。

[root@localhost student]# docker swarm join --token  SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377
This node joined a swarm as a worker.

说明:--advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377这是可选配置!!!

3.3 将工作节点wrk2添加到Swarm

1、登录到mgr1执行docker swarm join-token worker命令来获取添加工作节点到Swarm的命令和Token。

root@zq-virtual-machine:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377

2、登录到wrk2执行docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.131:2377 --listen-addr 192.168.100.131:2377命令将工作节点wrk1添加到Swarm。

[root@localhost aaa]# docker swarm join --token  SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.131:2377 --listen-addr 192.168.100.131:2377
This node joined a swarm as a worker.

说明:--advertise-addr 192.168.100.131:2377 --listen-addr 192.168.100.131:2377这是可选配置!!!

3.4 验证

1、登录到mgr1执行docker node ls命令列出Swarm中的节点。观察到wrk1和wrk2已成功添加到Swarm。

root@zq-virtual-machine:~# docker node ls
ID                            HOSTNAME                STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
g4i1tmqc0rvnzeh51l2dks4jw     localhost.localdomain   Ready     Active                          20.10.18
q9n8xqjyxx1z3gbn3dncobzpg     localhost.localdomain   Ready     Active                          20.10.18
oz4yqja5d46z4x4sft4h9qilm *   zq-virtual-machine      Ready     Active         Leader           20.10.18