过去几周,我们宣布了 ZSvirt 正式开源,聊了开源背后的原因,带你亲手创建了第一台虚拟机,剖析了这套经受住生产检验的引擎架构,也走完了从 VMware 迁移虚拟机的完整流程。今天,我们把视角拉回到评估本身:当你认真考虑用 ZSvirt 替代现有虚拟化环境时,应该从哪些环节入手验证?
评估 ZSvirt 是否适合替代 VMware:一份从部署到迁移的 PoC 指南
寻找 VMware 替代方案时,创建并启动一台虚拟机,只完成了最基础的计算链路验证。
完整评估还需要覆盖围绕虚拟机形成的运维体系:主机和集群如何管理,存储与网络如何接入,权限如何分配,任务失败后如何恢复,以及现有 VMware 工作负载如何迁移。
本文提供一套可在实际环境中执行的 PoC 路径。完成测试后,你应该能够回答一个具体问题:
ZSvirt 能否在我们的硬件、网络、存储和工作负载条件下承接现有虚拟化环境?
在开始之前:先定义你要替代什么
“替代 VMware”涉及一整套基础设施能力。
对于只运行少量虚拟机的团队,评估范围可能集中在现有服务器上的 Linux 和 Windows 工作负载。对于规模较大的基础设施团队,还需要考虑集群管理、共享存储、分布式网络、权限控制、自动化接口、高可用和迁移流程。
因此,PoC 可以从记录当前环境开始。
至少需要整理以下信息:
- vCenter、集群、主机和虚拟机数量;
- CPU 架构、代际以及现有硬件的保留计划;
- 虚拟磁盘规模、快照及持续写入情况;
- VLAN、地址分配、安全策略和外部网络依赖;
- Linux、Windows 及特殊操作系统版本;
- 备份、监控、审计和自动化系统的连接方式;
- 可接受停机的工作负载,以及需要缩短割接窗口的工作负载。
这份清单将决定后续测试范围。每个 VMware 环境的资源结构和业务依赖都有差异,需要结合实际情况完成迁移判断。
第一步:跑通最小资源链路
评估 ZSvirt 最直接的起点,是按照首次虚拟机部署指南,完成一套最小环境。
在测试阶段,一台服务器即可同时作为管理节点和计算节点。完成 ISO 安装后,依次创建数据中心和集群,添加主机、数据存储、镜像存储、分布式交换机与端口组,最后创建第一台虚拟机。
虚拟机进入“运行中”状态后,还需要继续检查各项资源是否正常协作:
- 主机能否稳定连接到管理节点;
- 镜像能否正常上传并用于创建虚拟机;
- 虚拟磁盘能否完成创建、挂载和删除;
- 虚拟机能否获得预期地址;
- 网关、外部地址和域名解析是否正常;
- 控制台能否打开;
- 关闭、启动、重启和删除操作是否留下清晰的任务记录。
确认计算、存储、网络、镜像和虚拟机链路全部正常后,再进入集群与迁移测试。这样可以在后续出现问题时,更快判断问题来自平台配置、基础设施条件还是迁移过程。
第二步:验证日常运维
虚拟化平台的长期使用体验,主要体现在持续数年的日常变更中。
在 PoC 环境中,建议继续执行以下操作:
- 扩容虚拟磁盘;
- 添加和移除数据盘;
- 创建、恢复并删除快照;
- 修改虚拟机计算规格;
- 调整网络配置;
- 将虚拟机迁移到其他主机;
- 模拟一项操作在中途失败;
- 检查失败任务的回滚过程和错误信息。
ZSvirt 使用异步任务、无状态服务和工作流机制处理长执行路径。以创建虚拟机为例,底层可能涉及调度计算节点、准备镜像、创建磁盘、配置网络以及生成虚拟机配置。任意环节失败,都可能留下已经创建但不再使用的资源。
工作流会将此类操作拆分为可执行、可回滚的步骤。关于相关机制,可以继续阅读 ZSvirt 架构详解和工作流引擎设计。
PoC 中可以主动制造一次可控失败,例如提供不可用的存储路径或错误的网络参数,然后观察:
- 任务停在哪一步;
- 界面和 API 返回了什么错误;
- 已完成的步骤是否被清理;
- 是否产生孤立磁盘或残留配置;
- 修正问题后能否重新执行。
这项测试能够直观展示平台在异常情况下的处理和恢复行为。
第三步:分别验证存储和网络
在虚拟化替代项目中,存储与网络往往决定最终的稳定性和运维复杂度。
存储验证
配置页面中出现某种存储类型,只能说明平台提供了相应的接入入口。实际验证还应包括:
- 镜像导入和基于镜像创建虚拟机;
- 系统盘与数据盘的创建和挂载;
- 快照与恢复;
- 共享存储下的跨主机迁移;
- 主机或存储路径异常后的状态;
- 典型业务负载下的延迟和吞吐;
- 备份与恢复所需时间。
如果生产环境使用 SAN、NFS、Ceph 或其他存储系统,应使用计划保留的设备完成测试。本地磁盘适合跑通最小环境,测试结果无法直接代表共享存储环境的表现。
网络验证
建议选择一个接近生产环境的 VLAN 和地址段,验证:
- 分布式交换机和端口组配置;
- DHCP 或静态地址分配;
- VLAN 与物理交换机配置是否一致;
- 虚拟机跨主机迁移后的网络连通性;
- 安全规则的应用位置和生效范围;
- 主机或网络组件状态变化后的流量路径。
出现网络故障时,管理员应当能够回答三个问题:流量从哪里进入、规则在哪里执行、问题应该从哪一层开始排查。
如果流量路径和规则位置仍不清楚,说明相关验证还需要继续。
第四步:验证权限、审计与自动化
对于多人管理的环境,除了 Web 界面的操作体验,还应验证权限边界、审计记录和自动化接口。
建议创建至少两类测试账户:
- 具备基础虚拟机操作权限的日常运维人员;
- 能够管理主机、存储、网络和账户的管理员。
分别检查两类账户在界面和 API 中能够查看和执行的内容,并确认被拒绝的操作是否留下记录。
接着通过 API 完成一条最小自动化链路:
- 查询主机、存储、网络和镜像;
- 创建一台虚拟机;
- 查询异步任务状态;
- 为资源添加标签;
- 读取操作结果和审计记录;
- 主动提交一个错误参数并检查返回信息。
ZSvirt 提供 RESTful/OpenAPI 接口,以及 Terraform Provider 和 Go、Python、Java SDK。PoC 需要确认现有门户、脚本、ITSM、监控或资产系统能否稳定调用这些接口。相关能力和开源范围可参阅我们为什么开源 ZSvirt。
第五步:从一台非关键虚拟机开始迁移
基础平台验证完成后,可以开始测试 VMware 迁移。
ZSvirt 当前提供三种常见迁移路径:
| 迁移方式 | 适用场景 | 主要验证内容 |
|---|---|---|
| ZMigrate 在线迁移 | 希望保持源虚拟机运行,并在计划窗口完成割接 | 全量与增量同步、网络映射、目标验证和最终割接 |
| OVF 导入 | 已有标准 OVF/OVA 导出文件 | 虚拟硬件配置、磁盘、启动模式和网络适配 |
| VMDK 镜像上传 | 已经取得 VMware 虚拟磁盘文件 | 磁盘格式、系统启动、驱动和虚拟网卡 |
完整操作过程可参考ZSvirt 迁移实践:从 VMware 迁移虚拟机的三种方法。
第一次测试建议避开关键生产系统,也不宜选择完全空闲的演示虚拟机。更合适的对象是一台运行真实服务、存在持续磁盘写入,同时具备回退条件的 Linux 或 Windows 虚拟机。
一次完整迁移至少应记录:
- 初始数据量与同步耗时;
- 增量同步期间源虚拟机的负载;
- 最终割接窗口;
- 目标虚拟机首次启动时间;
- IP、路由和安全策略是否正确;
- 应用服务、文件系统和数据库一致性;
- 迁移失败后的重试与回退方式;
- 应用负责人最终确认结果。
迁移任务达到 100% 后,还需要完成目标平台上的业务验证,并确认团队能够在异常情况下执行回退。
建议执行的 PoC 清单
在讨论生产替换之前,建议至少完成以下十项测试:
- 使用 ISO 部署 ZSvirt 管理节点;
- 创建数据中心和集群并添加主机;
- 配置镜像、数据存储和虚拟网络;
- 分别创建并运行 Linux 与 Windows 虚拟机;
- 验证控制台、地址分配与外部网络;
- 测试磁盘挂载、扩容、快照与恢复;
- 在共享存储条件下执行跨主机迁移;
- 验证角色权限、操作记录和审计信息;
- 通过 API 创建虚拟机并跟踪异步任务;
- 使用 ZMigrate 完成一台 VMware 虚拟机的同步、验证、割接与回退演练。
每一项都应该包含明确的预期结果、实际结果和负责人。对于未通过的项目,还应记录日志位置、恢复方式,以及它是否会阻止生产迁移。
如何判断 PoC 结果
不同虚拟化场景对平台能力有不同要求。
如果只需要管理一台服务器和少量实验虚拟机,完整的集群控制平面可能超出实际需求。如果团队已经采用 Kubernetes 原生的基础设施模式,也可以将 Kubernetes 虚拟化方案纳入比较。如果现有环境依赖特定 VMware 插件或专有集成,则需要单独验证替代路径。
ZSvirt 面向希望保留以集群、主机、虚拟机、存储和网络为核心的运维模型,同时需要开放源代码、开放 API 和 VMware 迁移路径的团队。
PoC 结束后,可以依据以下问题形成内部结论:
- 现有硬件能否继续使用;
- 关键工作负载能否稳定运行;
- 运维人员能否理解并排查平台行为;
- 自动化和外部系统能否完成接入;
- 迁移窗口与回退流程是否符合业务要求。
完成这些验证后,团队将获得一项可以在内部评审、复现和继续推进的迁移结论。
开始验证 ZSvirt
你可以从一台服务器和第一台虚拟机开始:
加入社区
- 问题反馈:GitHub Issues
- 社区讨论:GitHub Discussions
- 社交媒体:
- YouTube:https://youtube.com/@ZSvirt
- LinkedIn:https://www.linkedin.com/in/zsvirt-community/
- X/Twitter:https://x.com/ZSvirt
- Discord:https://discord.com/invite/KHsw63z9xA
- Email:community@zsvirt.io