短期专用VM的技术


8

我正在尝试构建一个将运行软件组件的短期(CI和测试版本)的系统,根据我的要求,每个组件都必须驻留在专用主机上,这是强制性的。我正在将该定义也包括半虚拟化选项,因为这似乎会让我头疼。

我在Mac上工作,所以几乎每种技术都失效了,libvirtquemu等等对我都不起作用。但是我正在计划部署到Debian。因此,只要我可以编写主机及其来宾域的配置脚本,就可以将在Debian上运行的所有内容放回桌面上。

我想要的设置是,我可以用来引导Debian安装程序,这意味着在启动时,机器会自动进行预配置(Chef,Puppet,Babushka,不要介意),并且该预配置的一部分应该构建一个可用于引导容器的模板rootfs。还需要提供容器本身,以便在容器出现时知道要执行的工作,可以执行该工作,然后退出。

简而言之,这是我需要的工作流程:

  1. 启动计算机(虚拟或其他),并准备好进行工作。
  2. 该工作应由Chef / puppet / babushka / etc安装的脚本执行
  3. 进行工作时,应启动虚拟机进行工作。
  4. VM应该完成工作,退出并将其资源释放给父/主机。(重要的是,在合理的硬件上,它至少可以扩展到数百个来宾VM)

我已经尝试过以下内容,并出于以下原因放弃了它们:

对于主机

  1. 带有Instalinux(支持LinuxCOE)的预种子Debian微型ISO映像(不好: 根本没有用(“未找到内核模块”(因为Instalinux映像与FTP存储库不同步,显然该解决方案非常脆弱,它也没有太大的余地安装空间,并且无法将已知的SSH密钥,主机密钥等放置到计算机上,这简直是火如虹,最终我会拥有一台正在运行的计算机,但无法访问它
  2. 种子前Debian netinst ISO(不好与上述问题相同,但至少安装通常会完成,因为ISO和FTP存储库之间没有内核差异。安装后的范围仍然有限。 良好绝对可靠且可重复,易于在Mac或裸机上的任何VM技术堆栈上使用,可以在任何地方使用,但是我无法对其进行足够的后期安装
  3. 各种构建rootfs并将其编译为可启动硬盘映像的方法(不好我所能做的工作很少,就像地狱一样,很难安装到真实的机器上,而且构建过程很复杂。 良好: 如果我可以使它工作,这似乎为使用ssh密钥,主机密钥,主机名,从Git安装的软件以及其他任何东西将机器预配置为给定规格提供了最大的范围,但是问题是如何打包进行分发,或编写脚本来娱乐。

老实说,我不确定人们应该使用什么技术将虚拟机从无到有,带到正在运行,运行和有用的系统中。在我看来,这就像三个步骤:a)操作系统,b)系统配置(用户等),然后c)文件系统更改。

对于来宾(虚拟)计算机:

  1. 很多事情,大多数情况下,我认为答案是用创建的只读rootfs debootstrap和LXC容器上的特殊分区,其中包含为此特定实例(作业清单)要完成的工作。插入所有有关构建操作系统,引导,创建用户,从git中签出软件以及进行工作的一般警告。

我真的不确定要使用什么工具,看来问题应该得到很好解决。但是我只是找不到真正开始的地方。

多数人似乎建议主机,我应该选择一种虚拟化技术,将计算机引导至工作状态,然后对其进行快照(libvirt似乎是逻辑上的最爱)。使用快照启动任何后续安装以进行测试或投入生产。

对于来宾计算机,lxc似乎提供了最简单的选项,除了在现有的所有内核中中断容器的后台运行并稍后通过控制台连接到该容器之外,稳定的Debian可用的最新版本的lxc已有18个月以上的历史了。 ,并且缺少许多广泛使用的功能。

通常,我是一名应用程序开发人员,并且我不经常使用服务器级技术(并且我确信SF会将这个问题标记为“过于主观”),但是我确实不确定要使用哪些工具。

最后一句话是,我知道一个类似的堆叠项目(travis-ci.org)正在为此使用Vagrant框。这似乎是一种比较钝的工具,它是大型,慢速,面向红宝石的工具,专门用于对用于关键服务基础架构的测试VM进行小型桌面配置,但我也知道其中一些人,他们比我聪明,所以也许他们只是放弃了。

任何帮助表示赞赏。


真正的发展……这绝对可以自动化。构建系统很容易。我假设您可以编写工作脚本或使用您选择的配置管理工具。有关此目标的目的地或最终结果的更多信息将很有帮助。您正处于私有云解决方案或使用LXC之类的优势之间
ewwhite

绝对地,关键在于能够以一种方式构建主机,而我和我的团队(Mac用户)可以重复地构建主机,我们可以在其中使用LCX guest虚拟机进行开发,但是以可以部署的方式进行构建它生产。我们应用程序的工具全部用Ruby编写,我真的很想对来宾使用LXC。主机自然足够长寿,但是由于客人的典型寿命为2-10分钟,因此整个基础架构确实是短暂的。这是关于开发与生产的关系,并且具有可重复的过程。
Lee Hambley

Answers:


2

一些想法:

  1. 您的观点“在合理的硬件上安装了数百个VM”(没有个人经验)让我想到了通过网络引导或通过NFS共享其大部分卷空间(/ usr)的VM。取决于您的VM有多相似。
  2. “我几乎无法工作的一切都像地狱一样脆弱”,难以置信。您能否更精确地说明问题所在?
  3. “将很难安装到真实机器上”与想要的用于创建VM的一键式解决方案相比,您的意思是“困难”。我会问:这有多困难,多久会发生一次?为各个硬件重新创建initrd有什么区别?
  4. “但是我无法对其进行足够的后期安装”您想要/想要的东西以及为什么这样不起作用?您可以在启动过程中下载脚本。VM通过DHCP(硬配置为VM的MAC地址)获取其IP,Samba根据客户端的IP地址向VM提供不同的安装后脚本。

+1用于网络启动。我没有足够的经验来写出完整的答案,但是我可以告诉您,我曾经通过从PXE服务器启动来部署数百台物理和虚拟机。这意味着您不必为每个VM操心单独的磁盘映像。
Moshe Katz

1

在阅读您的帖子时,我一直认为带有vagrant插件的vagrant和jenkins非常适合您的需求。您所拥有的任何可以实际处理您所讨论的VM数量的盒子都不会注意到维护环境的工具的开销。


0

使用某些适用于Apple和Debian的工具,我尝试过的唯一方法是虚拟盒子。使用virtualbox的好处是,您可以在mac系统上构建VM,然后使用相同版本的virtual box将其复制到Debian系统上,它将启动。

拥有数百个使用虚拟盒的虚拟机的声音听起来像您将花费大量时间使用vboxmange接口为每个虚拟机编写必要的唯一信息的脚本。像硬盘驱动器的uuid一样,网络接口上的mac地址。

如果基本系统要使用以相同方式配置的相同软件,则可以在虚拟框中创建系统快照并冻结它。这样,所做的任何更改都不会写入冻结的快照,而是写入新的临时存储区。然后关闭虚拟机,还原回快照,您将在一个干净的系统上工作,而没有在测试过程中进行任何更改。所有这些都可以使用vboxmange编写脚本。

使用快照,您还可以复制该VM映像数百个。使用vboxmange脚本接口创建副本,以重要的方式(即uuid和mac地址)唯一。然后让启动脚本调用发生的变化,需要应用于虚拟机以进行测试或运行各种测试的配置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.