跨云服务商&网络Docker Swarm集群搭建
date
‣
slug
26
status
Published
tags
Linux
Design
转载
summary
type
Post
Property
前言
由于隔一段时间各个云服务商都会搞活动,然后就会剁手入一个,手上已经有4个云服务器了。
- 阿里云轻量一台
- 腾讯云ESC一台
- 腾讯云轻量两台
然后家里有用 PVE 搞了个虚拟机化,来运行软路由,NAS之类的家庭服务。由于有高配强迫症,组了台16核32线程的服务器,导致性能严重过剩,就琢磨着能不能和云服务器组网,来组建一个小集群

最终选定方案是用 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状态
Node 提权降权操作
我将我所有的云服务器都作为流量的出入口节点,家里虚拟机的流量将会通过域名指定的云服务器来对外开放。
我是用的是 traefik 作为网关及容器内的负载均衡, 由于treafik 需要监听docker的event事件,节点必须是manager 才能有权限,所以我将所有的云服务器都提升为 manager
创建 Swarm 网络
所有需要跨 Node 通信的容器,都需要加入该网络
测试集群容器网络是否互通
Traefik网关及负载均衡
由于配置过多,我这里直接贴上我现在的配置+注释,这是Treafik 的后台面板

部署一个服务
滚动更新、回滚、重启策略,及资源限制
- 任何给Node 打上标签
安装 swarmpit 面板
swarmpit 可以用于监控集群状态,操纵节点回滚,升级,已经查看日志等操作

这是我的配置,也是基于官方 docker-compose.yml 基础,加上了 traefik 的配置
安装 splunk
- 上传 docker 容器日志
启动
补充
- 结合 Github Action 部署集群,实现 CI/CD,参考配置 blog-backend-deploy.yml