跨云服务商&网络Docker Swarm集群搭建

date
slug
26
status
Published
tags
Linux
Design
转载
summary
type
Post
Property

前言

由于隔一段时间各个云服务商都会搞活动,然后就会剁手入一个,手上已经有4个云服务器了。
  • 阿里云轻量一台
  • 腾讯云ESC一台
  • 腾讯云轻量两台
然后家里有用 PVE 搞了个虚拟机化,来运行软路由,NAS之类的家庭服务。由于有高配强迫症,组了台16核32线程的服务器,导致性能严重过剩,就琢磨着能不能和云服务器组网,来组建一个小集群
notion image
最终选定方案是用 zerotier 搭建VPN组内网,docker swarm 来组建集群,基于此安装管理面板,以及https 证书,网关服务日志记录搜索之类的,当然还有服务滚动更新,期间遇到一些坑,记录一下

Zerotier 搭建内网

首先请去 zerotier 组成账号,以及创建一个网络,这里网上教程很多,搜一下就有了。我给个简单的安装以及加入网络的代码。

安装 Docker 并配置加速镜像源

可以按照 腾讯云 的文档,来配置,这里就不赘述了

初始化集群管理节点&加入Worker

初始化集群 Manager

注意把192.168.xxx.xx 替换成你自己 zerotier 后台中的ip
可以注意到我指定了--data-path-addr=192.168.xxx.xx --data-path-port 5789
这是因为云服务的网络也是基于 vxlan, 占用了docker默认的4789端口,导致如果不指定端口,会导致集群虽然能组建成功,但是docker容器之间的网络不通。如加入了同一个network,node1中的容器,ping 不通 node2中的容器,这就失去了组建集群的意义了。
这是需要特别注意,踩了好久最后通过搜索才发现,我一度以为是不是这是厂商为了卖自己的集群服务,禁止了用户自建的可能。来源可以参考

加入Worker

在其他服务器中运行,加入到集群当中
在 manager 节点运行 sudo docker node ls 查看加入的node状态
notion image

Node 提权降权操作

我将我所有的云服务器都作为流量的出入口节点,家里虚拟机的流量将会通过域名指定的云服务器来对外开放。 我是用的是 traefik 作为网关及容器内的负载均衡, 由于treafik 需要监听docker的event事件,节点必须是manager 才能有权限,所以我将所有的云服务器都提升为 manager

创建 Swarm 网络

所有需要跨 Node 通信的容器,都需要加入该网络

测试集群容器网络是否互通

Traefik网关及负载均衡

由于配置过多,我这里直接贴上我现在的配置+注释,这是Treafik 的后台面板
notion image

部署一个服务

滚动更新、回滚、重启策略,及资源限制

  • 任何给Node 打上标签

    安装 swarmpit 面板

    swarmpit 可以用于监控集群状态,操纵节点回滚,升级,已经查看日志等操作
    notion image
    这是我的配置,也是基于官方 docker-compose.yml 基础,加上了 traefik 的配置

    安装 splunk

    • 上传 docker 容器日志

      启动

      补充


      © Viefane 2019 - 2025