【linux】【部署】docker swarm部署与调度

本文详细介绍了如何部署和管理Docker Swarm集群,包括规划、系统配置、节点管理、服务创建与更新、Docker-stack使用以及常用命令解析。通过实例展示了从创建奇数个管理节点的Swarm集群,到配置防火墙、调整系统参数,再到添加工作节点,最后到使用Docker-stack部署Nginx服务的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值