我有一个需要大量依赖项的 Web 应用程序。我目前正在评估使用 kvm 映像来帮助我们的用户在其服务器上安装此应用程序。
然而,我们对定制这些图像的可能性有一些担忧,主要是网络和存储方面。
潜在的网络问题:
许多站点有多个网络(例如,一个网络用于公共 Web 界面,一个专用网络用于数据),虚拟访客有时需要访问这两个网络。使用两个(或更多)虚拟网络接口应该可以轻松解决此问题。但是:
- 有些网站使用 DHCP,而其他网站则需要静态 IP
- 某些网络存在 MAC 地址限制
- 如果我们在命令行上更改 MAC 地址,虚拟客户机可能会分配一个新接口(即 eth2/eth3 而不是 eth0/eth1)。由于 udev 规则,我们的 Debian 客户机会发生这种情况。
- 当发生此类网络问题时,通常客户机在启动时会花费很长时间来尝试加载某些网络服务(例如 MTA)。
我必须明确指出,客人目前是通过桥接访问网络的。
您使用什么技术来解决此类问题?有没有办法配置一次虚拟客户机并以最低配置在任何地方运行它?libvirt 可以为这个过程提供一些帮助吗?
谢谢 !
编辑:
感谢第一个答案。现在我意识到我应该更精确一点:
首先,我们的应用程序当然可以安装在任何类型的虚拟机(XEN、VMWare 等)中,我们将选择权交给用户。我仅关注 KVM,因为有些站点要求预配置 KVM 映像,并且对虚拟化技术不如当前使用 Xen 的站点那么熟悉。
其次,他们可能遇到的前面描述的网络问题与我在工作中遇到的问题大致相同:我通常在将存档移到我们的集群进行生产之前在台式计算机上创建一个虚拟机。但是我的台式计算机和集群之间的环境完全不同。Linux 版本不同,我们使用不同的专用网络等。因此,假设我只想简化将虚拟 KVM 机从我的计算机移动到集群的过程。
事实上,我正在寻找一些强大的解决方案,以便为虚拟客户机提供有关其环境的一些提示。例如,在 libvirt XML 文件中添加一些信息,如 eth0 和 eth1 的 mac 地址以及这些接口的 IP,以及其他类似的东西(NFS 等)。由于我们使用网络桥接,我认为主机上的本地 DHCP 服务器不是一个好的解决方案,而且只能解决问题的一部分。因此,真正酷的是一种将配置信息从主机传达给客户机的方法。也许这已经存在,或者可以通过某种方式实现。
所以我重新表述的问题是:有没有一个好的(坚固、标准、优雅等等)主人与客人沟通这些信息的方式(理想情况下直接使用 libvirt XML),如果它不存在,是否可以实现它,或者这个想法完全是愚蠢的(那么请说明为什么这是一个愚蠢的想法)。
再次感谢) !
答案1
最好将它创建为全栈安装,包括操作系统和所有依赖项,并在您知道它能很好地运行的操作系统上进行安装。然后让最终用户决定是要独立安装还是作为 KVM、VMWare、Xen 或任何其他操作系统上的 VM 客户机进行安装。使用 KVM 映像唯一能获得的好处是一定程度的硬件无关性,但正如您所指出的那样,仍然存在潜在的陷阱,并且该站点必须愿意并且能够维护 KVM 主机以及您的应用程序及其操作系统。
编辑:为了回答您重新表述的问题,我认为您还是要把这些事情留给站点——从设计上讲,VM 客户端无法控制主机上的网络设置方式。您当然可以提供文档和说明,以最简单或最有效的方式执行此操作,但这可能因站点而异。无论您做什么,如果您将其作为 VM 映像或设备分发,站点都必须有效地设置和维护专门配置为在其网络上运行的 VM 主机。
答案2
虽然目前还没有人真正实现它,但这正是 DMTF 的开放虚拟化格式所要解决的问题。抱歉,我没有更好的建议。
答案3
你只考虑简单的技术细节,没有考虑全局。镜像的问题在于它无法很好地集成到站点的基础设施中。它可能是不同的操作系统。它可能不遵循站点的配置/安全标准。它可能无法与站点的修补和配置管理系统、备份系统、HA/负载平衡系统或 DR 系统集成。基本上,它会成为系统管理员的痛处。