Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
docker swarm集群工作原理:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
环境准备 |
环境准备
准备4台centos服务器,生产环境建议用阿里云服务器,学习环境可以在本机用vmware创建4个centos虚拟机。
每台centos服务器上都要安装docker。
centos版本:8.5
docker版本:20.10.11
以四台机器为例,2 个 manager 2个 worker。
但生产环境建议是 3个manager 以上,如果只有2台 manager,当主manager挂掉之后,另一台从manager是不会升级为主manager的 ,因为从manager升级为主manager的条件是存活的从manager节点个数必须大于1。
虚拟机 | 状态 | 备注 |
192.168.1.200 | manager | 用这台初始化创建集群成为manager |
192.168.1.201 | manager | 加入成manager |
192.168.1.202 | worker | |
192.168.1.203 | worker | |
首先,两台管理节点 192.168.1.200与192.168.1.201需要开放防火墙端口2377,允许与工作节点服务器通讯,如果是阿里云服务器,还要开通阿里云安全组的2377端口。
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload
docker swarm命令 |
docker swarm命令
创建集群:
docker swarm init --advertise-addr 虚拟机IP
查看增加 manager的授权命令:
docker swarm join-token manager
查看增加 worker 的授权命令:
docker swarm join-token worker
管理器节点脱离 docker swarm集群:
docker swarm leave --force
工作节点脱离Docker Swarm集群
docker swarm leave
搭建docker集群 |
搭建swarm集群,swarm集群包含两个管理节点,两个工作节点。
【第1步】初始化swarm集群,创建主管理节点
管理节点与工作节点可以使用内网地址与外网地址,将192.168.1.200这台服务器初始化为管理节点,切换到200这台服务器。使用内网地址初始化节点:
docker swarm init --advertise-addr 192.168.1.200
或者
docker swarm init --advertise-addr 192.168.1.200 --listen-addr 192.168.1.200:2377
输出文字的意思是此地址已经加入到了这个swarm,你可以使用 docker swarm join --token xxxxx 命令将其它节点加入到这个swarm中来成为工作节点,
如果想添加管理节点,使用 docker swarm join-token manager 命令来进行管理。
查看节点信息,这个命令只能在管理节点上使用。
docker node ls
manager为Leader表示管理节点,为空的表示工作节点。
注意:定要开放所有管理节点服务器的端口,然后重启防火墙,如果是阿里云服务器,还要开通阿里云安全组,不然加入worker 会报如下错误:
Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host"
将两台管理节点192.168.1.200与192.168.1.201的防火墙开放 2377 端口,允许工作节点与它通讯,开放端口后其它工作节点才可以加入进来 。
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload
【第2步】加入备用管理节点
理论上最好将三台机加入到管理节点。
但现在服务器不够,总共只有四台,所以只额外将 192.168.1.201 这台机加入到备用管理节点。
由于这台机也是管理节点,所以要开放防火墙2377端口。
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload
然后在初始化集群的管理节点 192.168.1.200 上查看加入到manager节点的命令:
docker swarm join-token manager
然后在192.168.1.201这台机上执行:
docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-6j8gnwhx52vjdvq7w0hq8uklv 192.168.1.200:2377
加入到swarm管理节点成功。
查看节点信息:
docker node ls
manager为Leader表示创建集群时创建的管理节点,Reachable(可达)表示加入进来的管理节点,为空的表示工作节点。
如果加入管理节点的时候如果报下面的错误,是防火墙或阿里云安全组没有开放2377端口,需要开放防火墙端口。
Error response from daemon: manager stopped: can’t initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host”
【第3步】添加两台工作节点
将192.168.1.202与192.168.1.203两台机加入到刚刚创建的docker swarm集群。
在任意一台管理节点上使用如下命令查看加入worker节点的命令。
docker swarm join-token worker
分别切换到将192.168.1.202与192.168.1.203,分别执行命令:
docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-a6zep6y0n18614nj9w1swrnlp 192.168.1.201:2377
加入工作节点成功。
查看节点信息:
docker swarm join-token worker
manager为Leader表示创建集群时创建的管理节点,Reachable(可达)表示加入进来的管理节点,为空的表示工作节点。
脱离swarm集群 |
工作节点脱离swarm集群。
切换到工作节点服务器,执行命令
dokcer swarm leave
管理节点脱离swarm集群。
管理节点脱离集群的前提是所有工作节点全部已脱离了集群后,使用 docker swarm leave 命令将管理节点本身脱离集群。
如果还有一台工作节点未脱离集群,还想让管理节点脱离集群,加 --force参数。
dokcer swarm leave --force