温馨提示×

Ubuntu Docker集群怎么搭建

小樊
34
2025-12-18 11:16:26
栏目: 智能运维

Ubuntu Docker 集群搭建指南

一、方案选型与准备

  • 方案对比
    • Docker Swarm:Docker 原生编排,命令与 Docker CLI 一致,适合快速上线与中小规模集群。
    • Kubernetes:生态完备、可扩展性强,适合复杂有状态应用与大规模生产环境。
  • 节点规划
    • 建议至少 3 台 Ubuntu 服务器(可 1 管理节点 + 2 工作节点,或 3 管理节点实现管理高可用)。
    • 各节点间网络互通,开放端口:2377/TCP(集群管理)7946/TCP 与 UDP(节点通信)4789/UDP(覆盖网络 VXLAN)
  • 基础环境
    • 每台机器安装 Docker Engine 19.03+,设置唯一 hostname,并配置 /etc/hosts 或 DNS 解析。
    • 时间同步(如 chrony/ntp),关闭不必要的防火墙规则(仅放通上述端口)。

二、快速搭建 Docker Swarm 集群

  • 步骤 1 初始化管理节点
    • 在管理节点执行(将 <MANAGER_IP> 替换为管理节点内网 IP):
      • docker swarm init --advertise-addr <MANAGER_IP>
    • 初始化成功后,控制台会输出加入命令,包含 workermanager 的 token。
  • 步骤 2 加入工作节点与管理节点
    • 工作节点加入:
      • docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
    • 添加更多管理节点(实现管理高可用):
      • 在管理节点获取命令:docker swarm join-token manager
      • 在目标管理节点执行输出的 join 命令。
  • 步骤 3 验证集群状态
    • 查看节点:docker node ls(应看到各节点状态为 Ready,管理节点有 Leader/Reachable 标识)
    • 查看 Swarm 信息:docker info | grep -i swarm
  • 步骤 4 部署示例服务(Nginx)
    • 创建覆盖网络: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
      • 浏览器访问任一节点 IP 的 8080 端口,应看到 Nginx 欢迎页(Swarm 内置路由网格对外暴露端口)。

三、高可用与服务运维要点

  • 服务高可用
    • 自动重启:docker service update --restart-condition any --restart-delay 5s --restart-max-attempts 3
    • 滚动更新:docker service update --update-parallelism 2 --update-delay 10s --image nginx:1.25
    • 健康检查:docker service update --health-cmd “curl -f http://localhost || exit 1” --health-interval 5s --health-retries 3 --health-timeout 2s
  • 节点维护
    • 排空节点(维护前):docker node update --availability drain
    • 恢复节点:docker node update --availability active
  • 配置与备份
    • 定期备份 Swarm 的 Raft 数据(在管理节点执行),确保管理节点故障时可恢复集群元数据。

四、安全加固与网络注意

  • 加固建议
    • 启用 TLS 加密管理通道,限制管理端口 2377 的访问来源,仅允许内网或跳板机访问。
    • 定期轮换证书,最小化节点间与对外暴露面。
  • 网络要点
    • 确保 7946/TCP/UDP4789/UDP 未被防火墙拦截,否则节点发现与覆盖网络将异常。
    • 对外暴露建议使用 Swarm 的路由网格(如 8080:80),由集群自动负载到后端任务。

五、进阶 Kubernetes 方案简述

  • 若需更强的生态与调度能力,可在 Ubuntu 上用 kubeadm 部署 Kubernetes(示例):
    • 初始化主节点:sudo kubeadm init --apiserver-advertise-address=<MASTER_IP>
    • 加入工作节点:sudo kubeadm join <MASTER_IP>: --token --discovery-token-ca-cert-hash sha256:
    • 部署应用可用 Deployment/Service 资源对象进行扩缩与暴露。
  • 高可用与组件
    • 多 Master 场景常配合 HAProxy + Keepalived 提供 VIP,结合 kubelet/kubeadm 完成控制面高可用与证书管理。

0