如何基于VPS与AWS、GCP等公有云搭建并管理多集群/节点自动扩缩容架构
混合VPS+公有云K8s集群落地方案
基础集群选型
推荐用k3s作为K8s发行版,占用资源低,部署难度远低于原生K8s,完全适配你在用的Ubuntu 20.04系统,不需要复杂的运维配置即可跑通全流程。
- 控制面直接部署在你自有低价VPS上,预算充足可以配3台VPS做高可用控制面,避免单点故障
- 控制面安装命令:
curl -sfL https://get.k3s.io | sh -,安装完成后会自动生成节点接入token,存放在/var/lib/rancher/k3s/server/node-token路径
多环境节点纳管方案
你可以同时纳管自有VPS和公有云实例到同一个集群,全程不需要复杂配置:
- 自有VPS接入:在新采购的VPS上执行节点接入命令即可完成加入,全程1分钟内完成:
curl -sfL https://get.k3s.io | K3S_URL=https://<控制面公网IP>:6443 K3S_TOKEN=<你的控制面token> sh - - 公有云实例接入:给AWS EC2、GCP GCE实例执行和上面完全相同的接入命令即可加入集群,不需要额外适配
- 节点调度配置:给自有VPS打标签
node.kubernetes.io/type: on-prem,给公有云节点打标签node.kubernetes.io/type: cloud,给你的常规业务Deployment配置节点亲和性,优先调度到自有VPS,公有云节点仅作为弹性资源池使用,避免日常资源浪费。同时给公有云节点配置污点,只有弹性扩容的Pod才会调度到公有云节点
自动扩缩容配置
完全匹配你“高峰自动扩公有云、长期流量高就用VPS替换降本”的需求:
- 先给你的node.js、express等业务应用配置HPA(水平Pod自动扩缩容),根据CPU使用率、内存使用率或者自定义的QPS阈值自动扩容Pod副本数
- 配置Cluster Autoscaler(集群自动扩缩容),仅开启公有云节点池的自动扩缩容权限,关闭自有VPS池的自动缩容权限:当Pod因为自有VPS资源不足无法调度时,Cluster Autoscaler会自动创建公有云实例加入集群承接流量
- 当流量持续高位时,你手动采购新VPS加入集群后,自有节点会有闲置资源,Cluster Autoscaler会自动把公有云节点上的Pod迁移到自有VPS,然后自动销毁闲置的公有云节点,不需要你手动操作即可完成降本替换
技术栈适配配置
你现有技术栈可以无缝对接,不需要做大量改造:
- 镜像构建&部署:直接用Github Actions自动构建Docker镜像,推送到Github Container Registry,之后触发K8s集群滚动更新即可,全程自动化
- 数据库部署:MongoDB直接部署在自有VPS节点上,配置持久化存储,不要调度到公有云节点,避免节点缩容丢失数据
- 前端Angular应用:打包成镜像和后端一起部署即可,也可以根据需求放到公有云对象存储加CDN加速,不影响集群架构
- Firebase相关的云服务直接正常调用即可,不需要额外适配
试错步骤(适合DevOps经验较少的情况)
建议按顺序验证,风险极低:
- 先拿3台自有VPS搭建基础集群,把现有业务迁上去跑通,验证基础部署、访问逻辑正常
- 手动创建1台公有云实例加入集群,验证跨节点Pod通信、服务调用正常
- 配置HPA和Cluster Autoscaler,模拟高流量测试,验证公有云节点自动扩容、流量承接逻辑正常
- 手动加入一台新的自有VPS到集群,验证公有云节点自动缩容释放逻辑正常
- 全流程跑通后再切生产流量,同时给公有云节点配置最大扩容数上限,避免异常流量产生高额账单
关键注意事项
- 所有节点之间的防火墙只开放集群必要端口,公网通信可以配置IPsec隧道加密,避免数据泄露
- 核心业务数据全部存在自有VPS的持久化存储中,不要用公有云节点的本地存储存重要数据
- 可以配置账单告警,及时收到公有云消费异常的通知
内容的提问来源于stack exchange,提问作者Tommy Lambert
相关产品推荐
相关产品推荐

