厨师:预安装软件包或从头开始安装(快速/不灵活/慢/灵活)

我很好奇,是预制二进制文件(安装软件包)和只使用厨师进行configurationpipe理的好策略。 理论上讲,当我们需要新的机器(stream量尖峰)时,应该加快初始化过程,特别是如果我们使用像AWS这样的云来创build我们自己的AMI(图像),同时在其他食谱工作..

我期待着您对这个问题的看法,以及最佳实践,经验和想法!

两端都有其优点和缺点,中间的区域也是如此。

A.在启动时使用带有dynamic系统configuration的标准公共AMI

(+)不需要学习如何构buildAMI。

(+)不需要学习如何pipe理一个稳定的历史AMIs。

(+)通过编辑configuration并运行新的实例,可以轻松更改和testing系统configuration。

(+)易于跨地区pipe理,通过共享configuration文件帐户。

(+)通过调整启动configuration规则,轻松运行configuration的变体。

( – )根据启动configuration过程需要完成多less工作,系统的初始启动可能很慢或很慢。

( – )需要了解如何自动启动configuration,尤其是在与Auto Scaling或Spot实例一起使用时。

B.预先构build自定义的AMIS

(+)初始启动速度很快,因为不需要进行configuration步骤。

(+)适用​​于Auto Scaling和Spot实例。

( – )需要学习如何有效地构build和pipe理AMI。

( – )每当所需的configuration更改时,都需要创build一个新的AMI。

( – )每次发布操作系统安全补丁时,都需要构build新的AMI。

( – )更改configuration时长编辑/编译/testing循环

( – )不同地区所需的多个AMI,不同的帐户(除非共享),不同的configuration变体,不同的实例体系结构。

C.在两者之间的东西

你可以通过在中间做一些事情来获得这两种策略的一些好处(和一些缺点):创build一个基本的自定义AMI,它拥有你实例所需的大部分内容,然后在运行时运行一个dynamicconfiguration,并完成configuration,应用所需的任何特定变化。

这可能会大大加快启动时间,但也提供了一些灵活性,而不必经常重buildAMI。

build议

  1. 首先创build自动脚本(或厨师食谱),将采取公共AMI并将其configuration到您所需的系统。

  2. 使用公共AMI的自动化configuration(上面的方法A)只要适用于您。

  3. 何时何地遇到启动性能问题,请使用自动configuration来创build自定义AMI(上面的方法B)。 尽可能自动执行此过程,以便可以根据需要随时运行此过程。

  4. 如果您在同一基本基础之上有多个系统变体,则构build一个自定义基础AMI并使用上述方法C运行不同的系统风格。