我正在尝试构建一个将运行软件组件的短期(CI和测试版本)的系统,根据我的要求,每个组件都必须驻留在专用主机上,这是强制性的。我正在将该定义也包括半虚拟化选项,因为这似乎会让我头疼。
我在Mac上工作,所以几乎每种技术都失效了,libvirt和quemu等等对我都不起作用。但是我正在计划部署到Debian。因此,只要我可以编写主机及其来宾域的配置脚本,就可以将在Debian上运行的所有内容放回桌面上。
我想要的设置是,我可以用来引导Debian安装程序,这意味着在启动时,机器会自动进行预配置(Chef,Puppet,Babushka,不要介意),并且该预配置的一部分应该构建一个可用于引导容器的模板rootfs。还需要提供容器本身,以便在容器出现时知道要执行的工作,可以执行该工作,然后退出。
简而言之,这是我需要的工作流程:
- 启动计算机(虚拟或其他),并准备好进行工作。
- 该工作应由Chef / puppet / babushka / etc安装的脚本执行
- 进行工作时,应启动虚拟机进行工作。
- VM应该完成工作,退出并将其资源释放给父/主机。(重要的是,在合理的硬件上,它至少可以扩展到数百个来宾VM)
我已经尝试过以下内容,并出于以下原因放弃了它们:
对于主机
- 带有Instalinux(支持LinuxCOE)的预种子Debian微型ISO映像(不好: 根本没有用(“未找到内核模块”(因为Instalinux映像与FTP存储库不同步,显然该解决方案非常脆弱,它也没有太大的余地安装空间,并且无法将已知的SSH密钥,主机密钥等放置到计算机上,这简直是火如虹,最终我会拥有一台正在运行的计算机,但无法访问它)
- 种子前Debian netinst ISO(不好:与上述问题相同,但至少安装通常会完成,因为ISO和FTP存储库之间没有内核差异。安装后的范围仍然有限。 良好:绝对可靠且可重复,易于在Mac或裸机上的任何VM技术堆栈上使用,可以在任何地方使用,但是我无法对其进行足够的后期安装)
- 各种构建rootfs并将其编译为可启动硬盘映像的方法(不好:我所能做的工作很少,就像地狱一样,很难安装到真实的机器上,而且构建过程很复杂。 良好: 如果我可以使它工作,这似乎为使用ssh密钥,主机密钥,主机名,从Git安装的软件以及其他任何东西将机器预配置为给定规格提供了最大的范围,但是问题是如何打包进行分发,或编写脚本来娱乐。)
老实说,我不确定人们应该使用什么技术将虚拟机从无到有,带到正在运行,运行和有用的系统中。在我看来,这就像三个步骤:a)操作系统,b)系统配置(用户等),然后c)文件系统更改。
对于来宾(虚拟)计算机:
- 很多事情,大多数情况下,我认为答案是用创建的只读rootfs
debootstrap
和LXC容器上的特殊分区,其中包含为此特定实例(作业清单)要完成的工作。插入所有有关构建操作系统,引导,创建用户,从git中签出软件以及进行工作的一般警告。
我真的不确定要使用什么工具,看来问题应该得到很好解决。但是我只是找不到真正开始的地方。
多数人似乎建议主机,我应该选择一种虚拟化技术,将计算机引导至工作状态,然后对其进行快照(libvirt似乎是逻辑上的最爱)。使用快照启动任何后续安装以进行测试或投入生产。
对于来宾计算机,lxc似乎提供了最简单的选项,除了在现有的所有内核中中断容器的后台运行并稍后通过控制台连接到该容器之外,稳定的Debian可用的最新版本的lxc已有18个月以上的历史了。 ,并且缺少许多广泛使用的功能。
通常,我是一名应用程序开发人员,并且我不经常使用服务器级技术(并且我确信SF会将这个问题标记为“过于主观”),但是我确实不确定要使用哪些工具。
最后一句话是,我知道一个类似的堆叠项目(travis-ci.org)正在为此使用Vagrant框。这似乎是一种比较钝的工具,它是大型,慢速,面向红宝石的工具,专门用于对用于关键服务基础架构的测试VM进行小型桌面配置,但我也知道其中一些人,他们比我聪明,所以也许他们只是放弃了。
任何帮助表示赞赏。