一、为什么自己搭“开发测试云”
当我们依赖公有云时,开发测试环境往往会面临几个典型痛点:
- 成本高昂:按量计费的测试环境需要7×24小时运行,一年下来可能烧掉一台MacBook。
- 环境冲突:开发、测试、QA团队共用一套环境,任何配置改动都可能导致整个团队停摆。
- 资源闲置:公司内网通常有千兆带宽,许多旧服务器也在吃灰,这些资源不利用起来实在可惜。
今天,我们就用3台二手电脑搭配Proxmox VE 8,带你用30分钟搭建一个功能完备的“开发测试云”,它将包含:
- 3节点高可用集群(即使宕机一台也无感)
- 30台“带公网IP”的测试虚拟机(支持一键批量创建)
- 日志、监控、DNS全自服务(让开发自助使用,无需频繁打扰运维)
二、硬件与网络5分钟速配
我们先规划好基础的硬件与网络架构。
| 节点 |
主机名 |
管理 IP |
角色 |
| 主节点 |
pve-dev01 |
192.168.80.11 |
控制+镜像仓库+日志 |
| 计算节点 |
pve-dev02 |
192.168.80.12 |
纯跑虚拟机 |
| 计算节点 |
pve-dev03 |
192.168.80.13 |
纯跑虚拟机 |
硬件与安装要点:
- 每台配置:32 GB内存 + 1 TB SSD,配备两个千兆电口网卡。
- 安装时,使用ISO制作启动U盘,务必将时区选为 Shanghai,NTP服务器填
ntp.aliyun.com,这能有效防止集群脑裂。
- 第二块网卡(例如
eno2)在安装时保持未配置状态,后续我们将用它来创建“假公网”桥接 vmbr2。
三、集群骨架:仅需3条命令
搭建Proxmox VE集群的过程非常简单。
# ① 在主节点 pve-dev01 上创建集群
pvecm create dev-cluster
# ② 在其他节点(pve-dev02, pve-dev03)上执行,加入集群
pvecm add 192.168.80.11
# ③ 检查集群仲裁状态
pvecm status # 看到输出 Quorate: Yes 即可
如果你的公司交换机禁用了多播,需要提前修改 /etc/corosync/corosync.conf 配置文件,将 transport: udpu 的注释打开。
四、一键批量创建30+台“公网虚拟机”
1. 网络拓扑(全部虚拟化)
我们设计一个清晰的虚拟网络结构,来实现“假公网”和项目隔离。
vmbr2(192.168.2.1) ← 假公网网关
│
├── vmbr100(VLAN100) ← 项目 A 专用网络
├── vmbr101(VLAN101) ← 项目 B 专用网络
└── vmbr102(VLAN102) ← 项目 C 专用网络
- 假公网:虚拟机的默认网关指向
192.168.2.1,我们在PVE主机上配置SNAT,这样开发同学就能“假装”在公网环境,方便调试微信回调、OSS上传等需要公网访问的场景。
- 项目隔离:不同VLAN在二层网络就实现了隔离,即使某个测试虚拟机把网卡流量打满,也不会影响其他项目的网络。
2. 批量创建脚本(利用cloud-init自动配置)
以下脚本利用cloud-init模板,自动为虚拟机注入SSH密钥、扩容磁盘、修改主机名。
#!/usr/bin/env bash
TEMPLATE=9000 # 提前制作好的CentOS 9 Stream cloud-init模板ID
VLAN=100
for i in {1..30}; do
VMID=200$i
NAME=proj${VLAN}-vm$i
qm clone $TEMPLATE $VMID --name $NAME --full
qm set $VMID --net0 virtio,bridge=vmbr$VLAN,tag=$VLAN
qm set $VMID --ipconfig0 ip=192.168.${VLAN}.$((100+i))/24,gw=192.168.${VLAN}.1
qm set $VMID --sshkey /root/.ssh/id_rsa.pub
qm start $VMID
done
脚本运行大约2分钟后,开发同学就可以直接使用以下命令登录:
ssh proj100-vm7.dev.int
整个过程实现了从虚拟机创建、网络配置到系统启动的全程零手工干预。
五、日志、监控与DNS自服务三件套
为了让开发团队能自助运维,我们快速部署三个核心服务。
| 系统 |
一键容器化部署命令 |
给开发带来的价值 |
| 日志 |
docker run -d -p 3100:3100 grafana/loki |
可按项目或版本秒级搜索所有虚拟机的日志 |
| 监控 |
docker run -d -p 9090:9090 prom/prometheus |
虚拟机宕机后1分钟内通过飞书等工具告警 |
| DNS |
docker run -d -p 53:5353 coredns/coredns -conf /Corefile |
自动解析 xxx.dev.int 域名,彻底告别手动维护hosts文件 |
- 日志收集:将Promtail日志采集器预装在虚拟机模板中,并设置开机自启。
- 动态DNS:CoreDNS可以对接etcd等存储,在上述批量创建脚本中,可以顺手将虚拟机IP和主机名的对应关系写入,实现虚拟机启动即可被解析。
六、日常运维:3个核心命令就够用
这个系统搭建好后,日常维护非常简单。
| 场景 |
命令 |
| 查看集群健康状态 |
pvecm status |
| 在线迁移虚拟机(不中断服务) |
qm migrate 2001 pve-dev02 --online |
| 升级前为批量虚拟机创建快照 |
for id in $(seq 2001 2030); do qm snapshot $id “pre-release”; done |
七、成本与收益对比
让我们算一笔经济账,看看自建方案能省下多少。
| 项目 |
公有云(1年估算) |
自建PVE集群(一次性) |
| 3台 2核4G 长期运行实例 |
≈ 1 万元 |
0 元(利用旧硬件) |
| 500 GB 日志存储费用 |
≈ 1.2 万元 |
0 元(使用本地SSD) |
| 宕机恢复 |
人工处理,响应时间不定 |
集群HA自动迁移,业务无感 |
| 合计 |
≈ 2.2 万元 |
3台旧电脑 + 30分钟部署时间 |
八、未来的扩展玩法
基础平台搭建完成后,你还可以探索更多进阶功能:
- Ceph超融合:将三台节点的SSD池化,构建一个分布式存储,既能省去额外NAS的开销,还能享受快照、克隆等高级特性。
- GitLab CI/CD集成:通过调用
pvesh API,实现 “合并请求(MR)通过即自动创建独立测试环境”,测试完毕后环境自动销毁,资源高效利用。
- 支持远程办公:在阿里云等公有云上购买一台轻量应用服务器,通过内网穿透技术将自建集群的网络延伸出去,这样异地同事也能直接
ssh proj100-vm7.dev.int 进行开发和测试。
通过30分钟的部署,你就能为公司搭建起一个高效、经济、自主可控的开发测试云平台。把省下来的数万元预算,拿去团队建设岂不是更好?如果在搭建过程中有任何心得或疑问,也欢迎来到云栈社区与大家交流分享。
|