我为一家软件公司工作。 我的部门负责(其中包括)为我们销售团队的成员构build和分发VMWare虚拟机,然后他们使用VMWare Player启动它们,以便为客户运行他们的产品演示。
最近,我想到我们更新和分发这些虚拟机的方式是各种各样的错误。 这里是我们更新“演示VM:”的过程
这不仅占用了大量的networking带宽,而且从networking上下载35 GB的内容也是非常耗时的,特别是对于那些没有内联网速度的远程办公室的人来说。
我的问题是:是否有更好的方法来pipe理需要在用户机器上本地运行的虚拟机的更新和分配?
我开始质疑我们现在的方法的原因是,当虚拟机更新时,只有一小部分文件(VMEM和虚拟磁盘映像)发生变化,对吧? 因此,不应该复制整个虚拟机文件夹,所以应该有一种方法来上传/下载只有三angular洲,可以这么说。 类似于Git等版本控制系统的工作方式。 我实际上试图用Git来做这件事, 但事实certificateGit在pipe理大文件方面是非常糟糕的 。 所以我想我会在这里问。
Rsync可以很好地工作。 如果你想把差异分发给没有直接访问服务器的机器,你也可以尝试xdelta 。
触发更新以在虚拟机内部运行也是一种select,但是您必须小心,即使在更新的时候,如果一个不耐烦的用户在中断它时也不会损坏虚拟机。 我会亲自去修补VM磁盘文件的路线。
在我看来,一个合适的答案取决于目标操作系统,因为可用的工具差别很大。
在这个工作stream程中可以有一个有趣的转变,可以通过使其具有可重现性而且可以灵活地改进过程。 让我试着解释一下。 正如你所描述的那样(如果我已经正确理解了这一点),这个任务是build立在离线build立一个黄金形象的基础上,让销售部门的员工克隆它。
(从你提供的信息来看,这个工作人员是否应该能够修改黄金形象,或者只是为了演示目的,因为它是分发的,这可能会产生一些我不想在下面考虑的分支)。
所以,为了给出至less一个部分的答案,这些是我的
debian-rules
或spec
文件与autotools
stream程配对 fpm
这样的工具更灵活的stream程
cobbler
服务器。 可以pipe理不同的服务,但有趣的将是TFTP,PXE,kickstarting,preseeding,即供应步骤。 另外, pulp
还可以分发储存库(不仅在客户请求时,而且还主动从服务器)。 puppet
, ansible
, salt
,…,即configuration步骤。 如果您可以抱怨上面的假设,有很多方法可以确保最终用户可以拥有一台具有您之前决定的确切configuration和安装软件的虚拟机。 其中之一将涉及使用vagrant
。 使用这个软件,你只需要修改一个文件( vagrantfile
来描述你想要build立的机器的types,另外, vagrant
也可以处理configuration好的机器到你select的configurationpipe理系统,在线文档相当不错, 网上有很多例子 。
销售人员的机器可以运行任何操作系统,唯一的要求是他们在主机上安装vagrant
。 产生一个演示虚拟机只会使一个简单的vagrant up
。
vagrant
也有一些有趣的select。 检查,例如, packer
。
如果销售人员机器可以使用任何GNU / Linux操作系统,那么也可以利用容器 ,这种运行虚拟化操作系统的方式几乎没有开销。 使用这种技术的更有趣的方式(在我看来)包括但不限于: libvirt
, docker
和LXC
。 Docker有dockerfile
这个概念,在function上与vagrantfile
类似,更有趣的是,有一个registry ,可以托pipe你的可分配的图像 。
容器可以在托pipe操作系统中作为简单的服务运行,所以使用它们非常简单。
为了帮助改进分配stream程,当然应该确保只安装最低限度所需的软件。 但是,没有操作系统,你可以做任何事情。 如果您的使用情况可以从使用supermin
这样的软件中受益,那么一台设备可能只有几兆字节到一千兆字节。
其他人提出了一个不同的方法, 没有托pipe操作系统 ,但这种模式似乎不符合你所描述的。