温馨提示×

docker如何在centos上进行集群搭建

小樊
49
2026-01-02 01:31:33
栏目: 智能运维

在 CentOS 上使用 Docker Swarm 搭建集群

一 环境准备与网络要求

  • 准备至少 3 台可互通的 CentOS 7/8 主机,建议 2 核 4GB 以上,已安装 Docker Engine 19.03+
  • 规划角色:建议 3 个 Manager 实现管理面高可用,其余为 Worker
  • 开放或放通端口:
    • TCP 2377:集群管理通信
    • TCP/UDP 7946:节点间通信
    • UDP 4789:Overlay 网络(VXLAN)
  • 主机名与解析:为便于维护,设置主机名并写入 /etc/hosts(或内网 DNS)。
  • 防火墙示例(firewalld):
    • 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
  • 时间同步:建议启用 chronyntpd,避免证书/调度异常。

二 安装 Docker 引擎

  • 安装依赖与仓库(以 CentOS 7/8 为例):
    • yum -y install yum-utils
    • yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    • yum makecache fast
    • yum -y install docker-ce docker-ce-cli containerd.io
  • 启动与自启:
    • systemctl start docker && systemctl enable docker
  • 验证:
    • docker version
    • docker run --rm hello-world
  • 可选:配置镜像加速(/etc/docker/daemon.json):
    • { “registry-mirrors”: [“https://<你的镜像加速地址>”] }
    • systemctl daemon-reload && systemctl restart docker

三 初始化 Swarm 并加入节点

  • 在首个管理节点初始化(将 替换为实际管理节点内网 IP):
    • docker swarm init --advertise-addr
    • 多网卡环境可同时指定:–listen-addr IP:2377
  • 查看加入命令:
    • 获取 Worker 令牌:docker swarm join-token worker
    • 获取 Manager 令牌:docker swarm join-token manager
  • 在其他节点执行输出的 join 命令加入集群(区分 worker/manager 令牌)。
  • 在管理节点查看节点状态:
    • docker node ls(看到 Leader/Reachable/Worker 状态即正常)
  • 提升 Worker 为 Manager(实现多 Manager 高可用):
    • docker node promote
  • 建议始终维持 奇数个 Manager(如 3/5),避免脑裂并提升容错。

四 部署示例服务与验证

  • 创建覆盖网络(便于跨节点服务互通):
    • docker network create --driver overlay --attachable my-overlay
  • 部署示例服务(Nginx,3 副本,ingress 发布 8080→80):
    • docker service create --name web --replicas 3 --publish published=8080,target=80 --network my-overlay nginx:latest
  • 查看服务与任务分布:
    • docker service ls
    • docker service ps web
  • 访问验证:从任意节点访问 http://<任一节点IP>:8080,Swarm 的 Ingress 负载均衡会将请求分发到健康的任务副本。
  • 扩缩容与更新:
    • 扩容:docker service scale web=5
    • 滚动更新:docker service update --image nginx:1.25 web
  • 可选:部署 Portainer 做可视化(仅运行在 Manager):
    • docker service create --name portainer --publish 9000:9000 --replicas 1 --constraint ‘node.role == manager’ --mount type=volume,src=portainer_data,dst=/data --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock portainer/portainer

五 常用管理与高可用实践

  • 节点维护:
    • 维护前将节点设为 Drain(调度不再分配新任务并迁移现有任务):docker node update --availability drain
    • 维护完成恢复:docker node update --availability active
  • 移除节点:
    • 在待移除节点执行:docker swarm leave
    • 在管理节点移除:docker node rm (异常时加 -f 强制)
  • 服务高可用:
    • 健康检查:docker service update --health-cmd “curl -f http://localhost/ || exit 1” --health-interval 5s --health-retries 3 --health-timeout 2s web
    • 重启策略:docker service update --restart-condition any --restart-delay 5s --restart-max-attempts 3 web
  • 安全与证书:
    • 定期轮换 CA/证书:docker swarm ca --rotate
    • 限制管理端口访问(示例仅允许内网网段):
      • iptables -A INPUT -p tcp --dport 2377 -s <TRUSTED_SUBNET> -j ACCEPT
      • iptables -A INPUT -p tcp --dport 2377 -j DROP
  • 备份与恢复:
    • 备份 Raft 数据(在 Manager):tar czvf swarm-backup.tar.gz /var/lib/docker/swarm/
    • 灾难恢复(在新节点重建管理面):docker swarm init --force-new-cluster --advertise-addr
  • 生产建议:
    • 使用 奇数个 Manager(3/5),Worker 横向扩容
    • 为数据库等有状态服务配置 持久化卷反亲和/约束,避免单点
    • 对外入口建议前置 HAProxy/Keepalived 或云负载均衡,配合健康检查与自动切换

0