概述
docker :20.10.9
Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的是最新版的Docker,那么Swarm就已经被包含在内了,无需再安装。
Docker Swarm架构包含两种角色,manager和node,前者是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求,然后调度Node进行具体的容器工作,比如容器的创建、扩容与销毁等。 manager本身也是一个node。
部署
要利用Swarm模式的容错功能,建议创建奇数的管理节点。
当有多个管理节点时,如果一个leader节点宕机,其余的manager节点将选择一个新的leader,并恢复集群状态的编排和维护。默认情况下,管理节点也运行任务。
三个管理节点的Swarm最大允许一个管理节点宕机
规划中可以有多个管理节点。至少一个管理节点两个node节点
1、规划
本示例中使用6台机器为例。IP规划如下:
角色 主机名 IP地址 防火墙规则
主管理节点(manager node) docker01 172.16.86.11 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
从管理节点(manager node) docker02 172.16.86.12 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
从管理节点(manager node) docker03 172.16.86.13 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
工作节点(worker node) docker04 172.16.86.14 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
工作节点(worker node) docker05 172.16.86.15 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
工作节点(worker node) docker06 172.16.86.16 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp
默认的管理服务端口为2377,需要能被工作节点访问到。
2、系统基本配置
操作设备:所有节点
2.2.1 关闭SELinux
[root@docker01 ~]# setenforce 0
[root@docker01 ~]# vi /etc/selinux/config
SELINUX=disabled #将SELINUX设置为disabled
[root@docker01 ~]# getenforce
Permissive
2.2.2 关闭防火墙或开放需要的业务端口
[root@docker01 ~]# systemctl stop firewalld #关闭防火墙
[root@docker01 ~]# systemctl disable firewalld #禁止防火墙开机自启
或者:[root@docker01 ~]# firewall-cmd --zone=public --add-port=2375-2377/tcp --add-port=2375-2377/udp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --permanent
success
[root@docker01 ~]# firewall-cmd --reload
success
[root@docker01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports: 2375-2377/tcp 2375-2377/udp 7946/tcp 7946/udp 4789/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
2.2.3 调整max_open_files
[root@docker01 ~]# echo '* soft nofile 65535' >> /etc/security/limits.conf[root@docker01 ~]# echo '* hard nofile 65535' >> /etc/security/limits.conf
[root@docker01 ~]# cat /etc/security/limits.conf | tail -2
* soft nofile 65535
* hard nofile 65535[root@docker01 ~]# echo 'ulimit -SHn 65535' >> /etc/rc.d/rc.local
[root@docker01 ~]# cat /etc/rc.d/rc.local | tail -1
ulimit -SHn 65535[root@docker01 ~]# chmod +x /etc/rc.d/rc.local #为rc.local增加可执行权限
2.2.4 重启检查SELinux、firewalld和open files
[root@docker01 ~]# reboot[root@docker01 ~]# getenforce #查看SELinux是否关闭成功
Disabled #关闭成功[root@docker01 ~]# systemctl status firewalld #查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead) #防火墙已关闭
Docs: man:firewalld(1)[root@docker01 ~]# systemctl is-enabled firewalld #查看防火墙是否开机自启
disabled #防火墙已禁止开机自启[root@docker01 ~]# ulimit -a | grep open
open files (-n) 65535 #open files已调整为65535
2.3 配置主机名解析
操作设备:所有节点
将所有主机的IP和主机名对应关系配置到系统中,在所有服务器上执行:
[root@docker01 ~]# echo '172.16.86.11 docker01' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.12 docker02' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.13 docker03' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.14 docker04' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.15 docker05' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.16 docker06' >> /etc/hosts
[root@docker01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.86.11 docker01
172.16.86.12 docker02
172.16.86.13 docker03
172.16.86.14 docker04
172.16.86.15 docker05
172.16.86.16 docker06
3.每台服务器上部署docker
开启所有设备上的docker节点