找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1980

积分

0

好友

255

主题
发表于 7 小时前 | 查看: 0| 回复: 0

一、为什么选择自建“开发测试云”

搭建专属的开发测试环境,是许多团队在提效和降本路上绕不开的课题。直接上公有云看似方便,但三个痛点非常明显:

  1. 成本高昂:测试环境需要7×24小时运行,按量计费一年下来轻松烧掉一台高端笔记本的预算。
  2. 环境抢占:开发、测试、QA团队共用一套环境,任何配置变更都可能引发“蝴蝶效应”,导致全员工作停摆。
  3. 资源闲置:公司内网往往有千兆带宽和淘汰下来的旧服务器,与其让它们吃灰,不如物尽其用。

今天,我们就用3台性能普通的二手电脑,配合开源的 Proxmox VE (PVE) 8,带你用30分钟搭建一套功能完备的私有“开发测试云”。这套系统将包含:

  • 3节点高可用集群:任意一台物理机宕机,虚拟机(VM)可自动迁移,业务无感知。
  • 30台带“公网IP”的测试VM:支持一键批量创建,并通过网络配置模拟公网访问能力。
  • 日志、监控、DNS全自服务:提供平台化的运维能力,让开发同学自助使用,减少对运维团队的依赖。

二、硬件与网络:5分钟基础配置

首先规划好硬件和网络。我们准备3台节点,配置与角色分配如下:

节点 主机名 管理 IP 角色
主节点 pve-dev01 192.168.80.11 控制节点 + 镜像仓库 + 日志中心
计算节点 pve-dev02 192.168.80.12 纯虚拟机计算节点
计算节点 pve-dev03 192.168.80.13 纯虚拟机计算节点

硬件建议

  • 每台电脑配备32GB内存和1TB SSD,基本能满足多台轻量级VM运行。
  • 准备两块千兆电口网卡。

安装注意

  1. 使用PVE 8的ISO制作启动U盘进行安装。
  2. 安装时,时区务必选择“Shanghai”,NTP服务器填写 ntp.aliyun.com。这一步对于集群时钟同步、防止“脑裂”至关重要。
  3. 安装过程中,第二块网卡(例如 eno2)先不配置IP,留到后面用作创建“假公网”网桥 vmbr2

三、搭建集群:3条命令构建骨架

集群是实现高可用的基础。配置过程非常简单,几乎就是三条命令:

# ① 在主节点 pve-dev01 上创建集群
pvecm create dev-cluster

# ② 在其他节点(pve-dev02, pve-dev03)上执行,加入集群
pvecm add 192.168.80.11

# ③ 在任何节点检查集群状态
pvecm status          # 看到输出中有 “Quorate: Yes” 即可

网络提示:如果公司内部交换机禁用了多播(Multicast),需要预先在所有节点的 /etc/corosync/corosync.conf 配置文件中,启用 transport: udpu (单播)模式。

四、批量创建“带公网”的测试虚拟机

1. 虚拟网络拓扑设计

为了实现VM能“模拟公网”访问,并隔离不同项目,我们设计以下纯虚拟网络:

vmbr2(192.168.2.1) ← 假公网出口网关
  │
  ├── vmbr100(VLAN100) ← 项目 A 专用网络
  ├── vmbr101(VLAN101) ← 项目 B 专用网络
  └── vmbr102(VLAN102) ← 项目 C 专用网络
  • 假公网:所有VM的默认网关指向 192.168.2.1,在PVE主机上对这个网段配置SNAT(源地址转换)。这样,VM内发起的对外网络请求(如调试微信回调、模拟OSS上传)都能正常出去,仿佛拥有公网IP。
  • 项目隔离:不同VLAN在二层网络隔离。即使某个测试VM把网络搞崩,也完全不会影响其他VLAN下的虚拟机。

2. 一键批量克隆脚本

使用Cloud-Init模板可以极大简化VM初始化。假设你已准备好一个CentOS 9的Cloud-Init模板(VM ID为9000),以下脚本可以批量创建30台VM:

#!/usr/bin/env bash
TEMPLATE=9000          # 预先制作好的Cloud-Init模板ID
VLAN=100                # 项目所属VLAN

for i in {1..30}; do
  VMID=200$i
  NAME=proj${VLAN}-vm$i
  # 克隆模板
  qm clone $TEMPLATE $VMID --name $NAME --full
  # 配置网络:连接到指定VLAN的网桥
  qm set $VMID --net0 virtio,bridge=vmbr${VLAN},tag=${VLAN}
  # 配置IP和网关
  qm set $VMID --ipconfig0 ip=192.168.${VLAN}.$((100+i))/24,gw=192.168.${VLAN}.1
  # 注入SSH公钥,实现免密登录
  qm set $VMID --sshkey /root/.ssh/id_rsa.pub
  # 启动虚拟机
  qm start $VMID
done

运行这个脚本大约2分钟后,开发同学就可以直接使用命令:

ssh proj100-vm7.dev.int

连接到第7台测试机,全程无需手动干预系统安装、网络配置或密钥注入

五、自服务三件套:日志、监控与DNS

为了让开发团队能自主排查问题,我们容器化部署三个核心服务:

系统 部署命令(Docker版) 给开发带来的价值
日志 docker run -d -p 3100:3100 grafana/loki VM内的应用日志可按项目、版本、时间等维度秒级检索。
监控 docker run -d -p 9090:9090 prom/prometheus 监控VM状态,任何VM宕机可在1分钟内通过飞书/钉钉告警。
DNS docker run -d -p 53:5353 coredns/coredns -conf /Corefile 自动提供 xxx.dev.int 域名解析,彻底告别手动维护hosts文件。

集成要点

  • 日志采集:将 Promtail 代理预先安装在VM模板中,并设为开机自启,自动将日志推送到Loki。
  • 域名管理:CoreDNS可以对接etcd。在上述批量创建脚本中,可以在创建VM后,顺势将 主机名 -> IP 的映射写入etcd。这样VM启动完成时,域名就已经可以解析,体验无缝衔接。

六、日常运维:3个高频命令就够

对于日常管理,记住下面三个命令足以应对大部分场景:

场景 命令
查看集群健康状态 pvecm status
在线迁移虚拟机(不中断服务) qm migrate 2001 pve-dev02 --online
升级系统前,为一批VM创建快照 for id in $(seq 2001 2030); do qm snapshot $id “pre-release”; done

七、成本与收益对比

算一笔经济账,自建方案的优势非常直观:

项目 公有云方案(按1年估算) 自建PVE方案(一次性投入)
3+ 台 2核4G 云实例 ≈ 10,000 元 0 元(利用旧硬件)
500 GB 日志存储 ≈ 12,000 元 0 元(使用本地SSD)
宕机恢复 人工处理,耗时 集群HA自动迁移
合计 ≈ 22,000 元 3台旧电脑 + 30分钟部署时间

八、未来可扩展的进阶玩法

基础平台搭好后,还可以向更自动化的方向演进:

  1. Ceph超融合:将三台节点的SSD池化,构建分布式存储。这样可以彻底省去外置NAS,还能享受秒级快照、克隆等高级存储功能。
  2. GitLab CI/CD集成:在GitLab Pipeline中调用PVE的API (pvesh),实现 “Merge Request合并后,自动创建一套独立测试环境” ,测试完毕再自动销毁,实现资源最大化利用。
  3. 支持远程办公:在阿里云等公有云购买一台轻量应用服务器(如4核8G),通过WireGuard等工具与内网PVE集群组建VPN。这样,异地同事也能直接 ssh proj100-vm7.dev.int 访问测试环境。

用30分钟和手边的闲置资源,打造一个可控、高效、低成本的开发测试云。把省下来的年度预算,用在更能激励团队的团建活动上,岂不更香?希望这篇实践指南能为你带来启发,也欢迎到 云栈社区 分享你的搭建经验和遇到的问题。




上一篇:聊聊游戏圈那103天:米哈游、叠纸们是如何在抖音同好会里“和谐共处”的
下一篇:e-link物联网平台开源项目:基于Spring Cloud的统一接入底座快速部署
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-28 18:17 , Processed in 0.400085 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表