厨师——多少抽象才是聪明的?

厨师——多少抽象才是聪明的?

我们支持超过 20 个独立应用。大多数应用一年内变化不超过几次。我们认为 chef 会帮助我们。

我正在尝试在手动配置和自动化之间找到一个折衷方案。我有两个很好的问题:

1) 为每个应用设置一个带有说明书和角色的 Chef 服务器是否更明智?还是我们应该隔离每个项目,并为每个应用设置一个 Chef 服务器?

2) (如果我们有多个 chef 服务器)我应该如何管理多个 chef-server?使用另一个 chef 服务器?chef-solo?

我看到很多文章记录了如何设置 chef 或介绍其功能,但我还没有看到一篇真正好的记录,记录了人们如何在中大型生产环境中实际使用 chef。这方面的一些提示可能会很好。

谢谢!

答案1

主要问题有点棘手。关于抽象程度的轻率回答是“不要太多,也不要太少”。只是稍微严肃一点,这确实需要你自己去解决,因为它取决于很多因素。

一个好的开始是创建一个“basenode”配置(角色和环境属性),让 Chef 管理所有节点。这可能包括一堆现有的社区食谱,例如:

在此阶段,您的应用程序将在基础节点上手动配置和安装。

现在您应该对 Chef 的工作原理有了更好的了解,因此您可以开始思考更多特定领域的食谱是什么样子。继续自下而上地工作,编写食谱来安装应用程序所需的软件包,并使用属性和数据包来配置它们。您提到的 20 个应用程序之间可能存在一些共同点(例如,它们大多是 Rails 应用程序),您可以将这些共同点分解为一组通用的食谱。

您说得很对,在手动配置和自动化之间寻找一种平衡点。我刚开始使用 Chef 时陷入的一个陷阱就是尝试尽可能地实现自动化。这最终变成了一场噩梦,充满了极端情况和奇怪的错误,这些错误需要通过手动重启服务或重新启动节点来修复。维护和调试并不好玩。这些天我尽量坚持使用包、文件和模板资源。

拥有 100 个角色确实听起来有点多余,但我不知道您的情况的更多细节。我倾向于使用更通用的角色,如“Apache 服务器”或“RabbitMQ 服务器”,然后使用各种属性、数据包和更具体的角色组合来个性化每个节点。

相关内容