用于短期私有 VM 的技术

Lee*_*ley 8 virtualization debian provisioning libvirt lxc

我正在尝试构建一个系统,该系统将运行短期(CI 和测试版本)的软件组件,根据我的要求,每个组件都位于私人主机上是强制性的。我将这个定义也包含在半虚拟化选项中,因为它似乎可以让我省去很多麻烦。

我在 Mac 上工作,所以几乎所有技术都已淘汰,libvirtquemu等对我不起作用。然而,我计划部署到 Debian;所以在 Debian 上运行的任何东西都回到了桌面上,前提是我可以编写主机及其来宾域的配置脚本。

我的预期设置是我可以用来引导 Debian 安装程序,这意味着在启动时,机器会自动配置(Chef、Puppet、Babushka,别介意,真的) - 并且该配置的一部分应该构建一个可用于启动容器的模板 rootfs。容器本身也需要进行配置,这样当容器上来的时候,知道要做什么工作,可以做工作,然后退出。

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

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

我已经到了尝试以下的地步,并出于以下内联的原因放弃了它们:

对于主机

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

老实说,我不确定人们应该使用什么技术来将虚拟机从一无所有变成一个运行、工作和有用的系统。对我来说似乎是三个步骤 a) 操作系统,b) 系统配置(用户等),然后 c) 文件系统更改。

对于来宾(虚拟)机器:

  1. 很多事情,主要是我认为这里的答案是使用debootstrap和 LXC 容器上的一个特殊分区创建的只读 rootfs ,其中包含要为此特定实例(作业清单)完成的工作。插入有关构建操作系统、启动、创建用户、从 git 检出软件和执行工作的所有常见警告。

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

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

对于来宾机器,lxc 似乎提供了最简单的选项,除了将容器置于后台并稍后通过控制台连接到它的所有现有内核中都已损坏,并且稳定的 Debian 可用的最新版本的 lxc 已经超过 18 个月了,并且缺少许多广泛使用的功能。

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

最后一句话是,我知道一个类似的堆叠项目(travis-ci.org)正在为此使用 Vagrant 盒子。这似乎是一个相当生硬的工具,大型、缓慢、面向 ruby​​ 的工具,专为用于关键服务基础设施的测试虚拟机的小规模桌面配置而设计,但我也认识其中一些人,他们比我更聪明,所以也许他们只是放弃了。

任何帮助表示赞赏。

Hau*_*ing 2

一些想法:

  1. 你的观点“在合理的硬件上有数百个虚拟机”让我(没有个人经验)想到了通过网络启动或通过 NFS 共享大部分卷空间(/usr)的虚拟机。取决于您的虚拟机的相似程度。
  2. “我能做的那一点点工作简直脆弱得要命”,简直难以置信。您能更准确地说明问题是什么吗?
  3. “很难安装到真机上” 您的意思是与所需的一键式虚拟机创建解决方案相比,“困难”是什么?我会问:这有多困难?这种情况多久发生一次?为各自的硬件重新创建 initrd 有什么区别?
  4. “但是我无法进行足够的后安装”您想要/需要什么,为什么这不起作用?您可以将脚本的下载作为启动过程的一部分。VM 通过 DHCP 获取 IP(硬配置为 VM MAC 地址),Samba 根据客户端的 IP 地址向 VM 提供不同的安装后脚本。