基于 CentOS 的 Docker Swarm 集群管理实战指南

基于 CentOS 的 Docker Swarm 集群管理实战指南

之前是基于ubuntu系统,此文以CentOS进行不同配置管理和实战说明,特别加上了FAQ常见问题。

一、环境准备

1.1 系统要求

操作系统CentOS 7/8(推荐 7.9 + 版本)

内核版本 :需高于 3.10(通过uname -r验证)

硬件配置:管理节点建议 2 核 4G,工作节点建议 1 核 2G

网络配置:所有节点需互通,关闭防火墙或放行以下端口:

复制代码
\# 开放Swarm通信端口

firewall-cmd --zone=public --add-port=2377/tcp --permanent

firewall-cmd --zone=public --add-port=7946/tcp --permanent

firewall-cmd --zone=public --add-port=7946/udp --permanent

firewall-cmd --zone=public --add-port=4789/udp --permanent

firewall-cmd --reload

1.2 安装 Docker(国内源优化)

卸载旧版本

复制代码
sudo yum remove docker \\

docker-client \\

docker-client-latest \\

docker-common \\

docker-latest \\

docker-latest-logrotate \\

docker-selinux \\

docker-engine-selinux \\

docker-engine

配置国内源

复制代码
\# 阿里云Docker CE源

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo yum-config-manager --enable docker-ce-stable

安装 Docker CE

复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum install -y docker-ce docker-ce-cli containerd.io

配置镜像加速器

复制代码
\# 创建配置文件

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

&#x20; "registry-mirrors": \["https://mirror.ccs.tencentyun.com", "https://docker.m.daocloud.io"]

}

EOF

启动服务

复制代码
sudo systemctl start docker

sudo systemctl enable docker

1.3 关闭 SELinux(可选)

复制代码
sudo setenforce 0

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

二、单管理节点集群配置

2.1 初始化 Swarm

复制代码
\# 选择管理节点执行

sudo docker swarm init --advertise-addr <管理节点IP>

2.2 添加工作节点

获取加入令牌

复制代码
sudo docker swarm join-token worker

\# 输出示例:

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-3nuu8r2s3z9eq2o3tl47wjgacpfuxpg64eqsc8wb5t8buijzbx-d2qw8h52loc0ithrvnosxxxxx 172.xx.xx.12:2377

在工作节点执行加入命令

复制代码
sudo docker swarm join \\

\--token \<WORKER\_TOKEN> \\

<管理节点IP>:2377

2.3 验证集群状态

复制代码
sudo docker node ls

三、三管理节点高可用集群配置

3.1 初始化主管理节点

复制代码
\# 在第一个管理节点执行

sudo docker swarm init --advertise-addr \<Manager1-IP>

3.2 添加其他管理节点

获取管理节点令牌

复制代码
sudo docker swarm join-token manager

\# 输出示例:

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在 Manager2 和 Manager3 执行加入命令

复制代码
sudo docker swarm join \\

\--token \<MANAGER\_TOKEN> \\

\<Manager1-IP>:2377

3.3 验证集群状态

复制代码
sudo docker node ls

四、集群管理实战

4.1 服务部署

复制代码
\# 创建Nginx服务(3副本)

sudo docker service create \\

\--name nginx \\

\--replicas 3 \\

-p 80:80 \\

nginx

4.2 滚动更新

复制代码
\# 更新镜像版本

sudo docker service update \\

\--image nginx:1.23.3 \\

nginx

\# 回滚更新

sudo docker service update \\

\--rollback nginx

4.3 节点管理

复制代码
\# 查看节点状态

sudo docker node ls

\# 移除节点

sudo docker node rm <节点ID>

\# 晋升为管理节点

sudo docker node promote <节点ID>

五、常见问题与解决方案(FAQ)

5.1 Docker 安装问题

Q1:yum 安装 Docker 时提示依赖错误 A:执行sudo yum update -y更新系统包后重试。

Q2:镜像拉取速度慢A:配置国内镜像加速器(参考 1.2 节),或使用阿里云 / 腾讯云专有加速器。

5.2 Swarm 集群问题

Q1:节点无法加入集群A:

检查防火墙规则(参考 1.1 节)

确认节点间网络连通性(ping/telnet

重新获取加入令牌(docker swarm join-token

Q2:管理节点配置错误导致集群不可用A:

使用docker swarm leave --force强制退出问题节点

主节点执行docker swarm init --force-new-cluster重建集群

重新加入其他节点

Q3:Raft 协议脑裂问题A:确保管理节点数量为奇数(1/3/5),避免同时离线超过半数节点。

5.3 服务部署问题

Q1:服务启动失败 A:检查镜像是否存在(docker image ls),或通过docker service logs <服务名>查看日志。

Q2:滚动更新失败A:

检查更新策略(--update-parallelism/--update-delay

手动回滚至稳定版本

排查应用程序错误

六、性能优化建议

资源限制

复制代码
sudo docker service create \\

\--name nginx \\

\--limit-cpu 2 \\

\--memory 1g \\

nginx

存储优化

复制代码
sudo docker service create \\

\--name mysql \\

\--mount type=volume,source=mysql-data,destination=/var/lib/mysql \\

mysql

网络优化

复制代码
sudo docker network create \\

-d overlay \\

\--subnet 10.0.0.0/24 \\

my-overlay-network

七、生产环境最佳实践

节点监控

复制代码
\# 安装Portainer可视化工具

sudo docker service create \\

\--name portainer \\

\--publish 9000:9000 \\

\--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \\

portainer/portainer-ce

数据备份

复制代码
\# 备份Raft日志

sudo tar czvf raft-data.tar.gz /var/lib/docker/volumes/

安全加固

复制代码
\# 启用TLS认证

sudo docker swarm init --tlsverify \\

\--tlscacert ca.pem \\

\--tlscert server.pem \\

\--tlskey server-key.pem \\

\--advertise-addr \<IP>

八、总结

本文通过实战案例详细介绍了基于 CentOS 的 Docker Swarm 集群搭建与管理,涵盖单节点和三节点高可用配置、服务部署、滚动更新及故障处理等核心操作。通过国内源优化和防火墙配置,显著提升了镜像拉取速度和集群通信效率。在生产环境中,建议结合监控工具和数据备份策略,确保容器化应用的稳定运行。

相关推荐
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo3 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy5 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo6 天前
Linux系统中网线与USB网络共享冲突
linux