我正在尝试建立一个可行的开发模型。我想知道是否有人对虚拟机软件有建议,以及要遵循哪些流程才能实现以下功能:
- 开发人员获取虚拟机黄金映像的副本并在自己的工作站上运行 VM 客户机。 (理想情况下,当开发人员工作站拥有所有这些闲置的马力时,我不想支付服务器硬件/软件来集中托管虚拟机的费用)
- 虚拟机的黄金映像已更新 - 使用所选 VM 供应商中的差异磁盘、快照或等效功能 - 每个复制的开发人员 VM 都会使用新的更改进行更新(理想情况下,我不会部署整个图像 - 仅部署与黄金图像的差异)
- 免费 (或许只是一厢情愿)
- 如前所述 - 这不是基于服务器的解决方案(除了将黄金映像和差异存储在网络上的某个地方) - 我不希望有更多的服务器和软件来管理
- 必须支持 64 位客户端(虚拟 PC 和 MS 虚拟服务器已经推出...)
这是白日梦吗?
考虑到我的限制,我想我可以选择VMware工作站或者虚拟盒。但我不认为他们会完全按照我的要求去做。
作为一种折衷方案 - 我可以使用 Hyper-V 或 ESX 来创建 VM 模板,创建模板的许多克隆 - 然后以某种方式将这些克隆分发到各个工作站吗?
我对部署差异磁盘/快照的想法是,每周部署一次更新到每个单独的开发人员虚拟机,然后将其与基础映像合并。然后,“黄金映像”也会合并差异 - 这样所有虚拟机都可以匹配,而无需删除现有克隆并从更新的模板克隆。您可以继续运行相同的虚拟机 - 只需继续应用差异磁盘/快照即可。
答案1
快照:首选方法
在您的机器上创建一个基础虚拟机。就您的目的而言,使用紧凑/精简配置的磁盘映像文件就足够了,因此不要使用固定大小的磁盘映像文件。
关闭基本 VM 实例。(挂起/休眠是不是充足的。)
拍摄快照。
分发给开发人员后您已拍摄快照。
到时候,启动基础虚拟机并更新它。您所做的任何更改都将写入新的“增量”文件,该文件的大小将仅与自拍摄快照以来所做的累积更改一样大。由于您已经拍摄了快照,因此该巨大的磁盘映像文件将保持 100% 不变。
关闭基本 VM 实例。(挂起/休眠是不是充足的。)
如果您进行了重大更改(例如,安装大型服务包),请考虑拍摄额外的快照现在这样您在下次更新时就不必重新传输当前快照。
一夜之间,(a)要么重启每台开发人员机器,要么以编程方式终止每台开发人员机器上的虚拟机管理程序进程(不,开发人员将不是记得自己关闭它),然后(b)使用复制已更改的文件机器人复制/MIR或类似的东西。
当然,为了实现这个功能,你需要转移全部与虚拟机相关的已更改文件,除了快照/增量文件本身之外,还可能包括包含有关快照元数据的配置文件。您还需要确保在每台开发人员机器上,虚拟机的存储位置与您自己的机器上的存储位置完全相同。
Rsync:替代方法
另一种方法是使用固定大小的虚拟磁盘,不快照,以及 rsync 客户端/服务器,如增量复制仅复制已更改的部分。这不是首选方法,因为:
它需要在每台开发机器上安装 rsync 软件。
尽管没有更多数据被传输,但实际的复制过程会花费更长时间,因为 rsync 需要分析整个虚拟磁盘文件来确定需要传输哪些部分。
结论:您可以为此使用 rsync,但如果您的虚拟机管理程序支持快照,这似乎有点过度。
答案2
这听起来你需要一个配置管理工具。这将是一个中央存储库,您可以在其中安全地保存配置,并且客户端(您的 Windows VM)可以获得新的配置。
因为我使用的是 Linux,所以我不确定它在 Windows 上运行得有多顺畅,但有支持 Windows 的解决方案。看看这维基文章。它有一个很好的总结。