温馨提示×

centos上docker集群搭建方法

小樊
39
2025-12-23 07:39:54
栏目: 智能运维

CentOS 上 Docker Swarm 集群搭建步骤

一 架构与端口规划

  • 组件与角色:使用 Docker 原生的 Swarm 模式,将多台 CentOS 主机组成一个集群,包含 ManagerWorker 两类节点;Manager 维护集群状态与调度,Worker 运行容器任务。建议 Manager 数量为奇数(如 3 或 5) 以实现控制面高可用(Raft 共识)。
  • 端口要求(所有节点间需互通):
    • 2377/tcp:Swarm 管理通信端口
    • 7946/tcp 与 7946/udp:节点间 gossip 通信
    • 4789/udp:Overlay 覆盖网络(VXLAN)
  • 基础环境:各节点安装 Docker Engine,主机名可解析(/etc/hosts 或 DNS),时间同步(如 chrony/ntpd)。

二 环境准备与 Docker 安装

  • 所有节点执行(以 root 或具备 sudo 权限的用户):
    • 设置主机名与解析(示例):
      hostnamectl set-hostname node1
      echo "192.168.1.101 node1
      192.168.1.102 node2
      192.168.1.103 node3" >> /etc/hosts
      
    • 安装 Docker(使用国内镜像源加速):
      yum install -y yum-utils device-mapper-persistent-data lvm2
      yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      yum -y install docker-ce
      systemctl start docker && systemctl enable docker
      
    • 可选:配置镜像加速器(/etc/docker/daemon.json):
      {
        "registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com"]
      }
      systemctl restart docker
      
    • 防火墙放行端口(推荐按需开放,而非直接关闭防火墙):
      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
      
    • SELinux(如为 enforcing,建议测试环境先设为 permissive 或按策略放行,生产以合规策略为准):
      setenforce 0
      sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
      

三 初始化 Swarm 并加入节点

  • 在第一个节点(规划为 Manager)初始化集群:
    docker swarm init --advertise-addr <MANAGER-IP>:2377 --listen-addr <MANAGER-IP>:2377
    
    记录输出的加入命令(包含 WorkerManager 的 Token)。如需查看或再次生成加入命令:
    docker swarm join-token worker
    docker swarm join-token manager
    
  • 在其他节点加入集群(分别执行上一步输出的对应命令),例如 Worker:
    docker swarm join --token <WORKER-TOKEN> <MANAGER-IP>:2377
    
  • 在 Manager 查看节点状态:
    docker node ls
    
    输出中 MANAGER STATUSLeader/Reachable 表示控制面正常。

四 高可用与常用运维

  • 提升管理节点数量(实现控制面 HA,建议保持奇数个 Manager):
    docker node promote <NODE-NAME>
    docker node ls
    
  • 节点维护与排空(升级/维护前将节点置为 Drain,任务会自动迁移):
    docker node update --availability drain <NODE-NAME>
    # 维护完成后恢复
    docker node update --availability active <NODE-NAME>
    
  • 服务部署示例(创建覆盖网络并发布端口):
    docker network create --driver overlay --attachable my-overlay
    docker service create --name nginx \
      --replicas 3 \
      --publish published=8080,target=80 \
      --network my-overlay \
      nginx:latest
    docker service ls
    docker service ps nginx
    
  • 节点移除与强制离开:
    # 在待移除节点执行
    docker swarm leave --force
    # 在 Manager 执行
    docker node rm <NODE-ID>
    
  • 证书轮换与备份(提升安全性与可恢复性):
    # 轮换 Swarm CA 证书
    docker swarm ca --rotate
    # 备份 Raft 数据(在 Manager 执行)
    tar czvf swarm-backup-$(date +%F).tar.gz /var/lib/docker/swarm/
    

五 常见问题与排查

  • 无法加入集群:核对 2377/tcp、7946/tcp|udp、4789/udp 是否在所有节点间放通;多网卡环境在 init/join 时显式指定 –advertise-addr–listen-addr;Token 是否正确(区分 worker/manager)。
  • 法定人数丢失(Quorum Lost):Swarm 需要多数 Manager 在线;若丢失多数,管理操作(扩缩容、升级等)将不可用。尽快恢复离线 Manager;若不可恢复,可在现有 Manager 上谨慎执行 docker swarm init --force-new-cluster 重建控制面(会丢失除本机外的 Raft 状态,务必先备份)。
  • 节点状态异常:使用 docker node ls 查看 STATUS/AVAILABILITY/MANAGER STATUS;必要时将节点 drain 后恢复,或 promote/demote 调整角色;服务异常可用 docker service ps 定位故障实例与节点。

0