前言
Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一起发布的Docker管理工具还有Machine以及Compose,号称Docker三剑客。
Swarm项目是Docker公司发布三剑客(Swarm,Compose,Machine)中的一员,用来提供容器集群服务,目的是更好的帮助用户管理多个Docker Engine,方便用户使用,像使用Docker Engine一样使用容器集群服务。
正言
前期准备
3.台Cetnos 7.9主机,这里使用
192.168.100.141. mastet CentOS Linux 7
192.168.100.142. node 1 CentOS Linux 7
192.168.100.143. node 2 CentOS Linux 7
第一步
关闭防火墙
systemctl status firewalld.service 查看防火墙状态
systemctl stop firewalld.service 关闭防火墙(开机会默认启动)
systemctl disable firewalld.service 禁止防火墙开机自启
systemctl status firewalld.service 查看防火墙状态
第二步
关闭swap
swapoff -a 临时关闭swap
vim /etc/fstab 永久关闭swap 将swap这一行注释用
#/dev/mapper/centos-swap swap swap defaults 0 0
第三步
升级系统内核
这里参考Linux kernel 升级食用方法
第四步
安装Docker
这里参考Docker 食用方法
到此 前期准备完成
PS:以上四步,3台主机都要执行。
中期实施
第一步
初始化Docker Swarm集群
docker swarm init –advertise-addr 192.168.100.141:2377 –listen-addr 192.168.100.141:2377
第二步
查看集群状态
docker node ls
出现如下,则初始化成功
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lkkznjoxb0doh05e3iiag5m25 * master Ready Active Leader 24.0.6
第三步
添加主机到集群中
添加worker节点
执行docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join –token SWMTKN-1-34k5r4qrb2vng0x32l1umhnmnjbk94najj86qr1eslwdzaux3b-abb59gq9w6816ljdpwgrtpccc 192.168.100.141:2377
添加docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join –token SWMTKN-1-34k5r4qrb2vng0x32l1umhnmnjbk94najj86qr1eslwdzaux3b-3u0n9u8r4lzg2m27gnq3juuf9 192.168.100.141:2377
这里我们添加worker,在master 执行 docker swarm join-token worker 获取命令
在node1,node2 上分别执行docker swarm join –token SWMTKN-1-34k5r4qrb2vng0x32l1umhnmnjbk94najj86qr1eslwdzaux3b-abb59gq9w6816ljdpwgrtpccc 192.168.100.141:2377
然后在master主机执行docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
lkkznjoxb0doh05e3iiag5m25 * master Ready Active Leader 24.0.6
6vcjr61jcuylsw8fvqrg0liu4 node1 Ready Active 24.0.6
o73jq8qpsdz41jfivptnz0cie node2 Ready Active 24.0.6
在HOSTNAME中出现node1、node2,则添加成功了
这里需要注意的是docker node 之类的命令只能在manager中执行,在worker中执行会报错。
如何区分是否为manager 只需要查看状态MANAGER STATUS是否为 Leader
在manager中执行docker node inspect $HOSTNAME
在这里可以清楚的看到是否为manager还是worker
“Spec”: {
“Labels”: {},
“Role”: “worker/manager”, 如果是worker 则出现worker,如果是manager则出现manager
“Availability”: “active”