如何将IP自动分配给无状态的Ubuntu虚拟机?

我计划创build一个可重复使用的模板映像,将我的应用程序部署到可能位于不同networking和不同数据中心的多个虚拟机。 我计划完全控制主机系统,并将KVM作为pipe理程序运行。

当连接到虚拟机时,映像将不可变,所以我可以通过更新单个模板而不是每台计算机的内部软件来更轻松地部署更改。

我知道如何在常规的ubuntu系统上configuration/ etc / network / interfaces文件,但是如何在第一次启动时为虚拟机使用一个不可变映像的时候自动为每个虚拟机分配一个或多个IP地址?

到目前为止,我想象得到的唯一方法是在启动时build立依赖于DHCP的networking模板。 机器启动后,可以运行一个脚本,通过连接到具有networkingconfiguration信息的另一台服务器或远程文件系统来validation和重新configurationIPconfiguration。

也许,在networking可用之后,我可以在访客虚拟机上运行一个脚本,该脚本将连接的networking接口的MAC地址作为唯一的ID从另一个具有IP的“主”服务器检索networkingconfiguration分配。 这假设所有的虚拟机将在创build时被分配一个唯一的MAC地址。

我可能需要避免启动服务,如MySQL和PHP,直到networkingconfiguration和validation,以便networking重新启动后不会中断任何重要的东西。

这听起来像是一个正确的方法来做到这一点?

亚马逊EC2,OpenStack或其他人有不同的方法来进行networking自动化吗? 也许他们提供了一个API和/或脚本,在启动过程中做同样的事情?

我在Ubuntu主机上使用KVM,客户操作系统也是Ubuntu。

您可以从主机端控制的唯一一件事是您提供给VM的MAC。 所以最简单的方法就是保留一个特定的虚拟机在一个特定的MAC地址中使用的IP地址,然后在设置它的时候把这个MAC地址给这个虚拟机。 这可以扩展到一个点,但有数百个pipe理MAC的虚拟机可能变得乏味。

因此,下一个方法是使用附加的ISO或软盘镜像启动虚拟机,并在其中提供每个虚拟机设置文件。 VM将在启动时运行一个脚本,该脚本将查找附加的ISO /软盘映像,并应用在此处find的设置(如果附加了这样的映像)。 在configuration新的虚拟机或重新configuration现有虚拟机时易于使用。

当然,最好的方法是使用configurationpipe理系统(puppet / chef / cfengine / ansible / saltstack / etc)或某种类似像Forrester这样的融合部署/configuration系统。 这是可以随时扩展的,并且使您可以灵活地pipe理设置,而不仅仅是联网。

我认为你正在努力使这个比所需要的更困难。 Ubuntu中的默认KVMnetworking称为Usermode。

https://help.ubuntu.com/community/KVM/Networking#usermodenetworking

这将在您的物理主机上创build一个NAT,允许您的所有虚拟机通过NAT访问networking。 如上所述,虚拟机获得DHCP地址,就是这样。

或者,您可以使用桥接networking来使外部主机能够直接访问来宾操作系统上的服务。