厨师最佳做法/问题


48

我使用并喜欢Puppet。我搬到一家新公司,他们正在招收厨师。所以我想学习厨师,但是很难将它们拼凑在一起,因为我仍然认为在Puppet =)

这些是我的问题:

  • 在Ruby DSL,JSON或从管理控制台中设置角色更好吗?为什么有多种方法可以做同一件事?
  • 您可以将食谱组织到子目录中吗?例如:我们有一些我想为其编写食谱的自定义软件,并将其粘贴到:chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook会是一个好习惯吗?
  • 我是否为每种角色创建食谱,以指定其作用?我是否将这些食谱包括其他食谱(即,我的网络服务器角色的食谱包括apache食谱)?我不确定如何处理食谱的相互依赖性和继承性。
  • 是否有类似Puppet的外部节点分类器之类的东西,以便节点自动确定其角色?
  • 看来您可以使用Knife或在管理控制台中进行配置,或编辑JSON文件?这真让我感到困惑,为什么做事的方法如此之多,简直瘫痪了!是否有理由使用其中一个?来自木偶,似乎很容易用这些工具意外地错误配置了某些东西(即,遗漏了一些东西)
  • 如何在开发集群中使用Chef自动配置节点?使用Puppet,我启动了一个连接到puppermaster的虚拟机,并启动了puppet运行并进行了设置(角色由外部节点分类器确定)。如何与厨师一起做?使用带有将其绑定到厨师服务器的pem / rb文件安装厨师,用刀手动告诉节点其角色或在管理界面中对其进行编辑,然后启动厨师客户机运行以进行自我设置?

我已经完成了入门教程,并且看到它们有EC2教程,但是我从未使用过EC2,因此很难遵循。至此,我主持了Chef的运行,并且我开始尝试配置单个节点。我从这里去哪里?我需要开始阅读公共食谱吗?

Opscode上的文档还可以,但不及Puppet的文档。我在搜索中可能还会缺少其他好的厨师资源吗?


5
在一个帖子中有太多问题。考虑将每个单独拆分。这对整个社区来说都更好,也可以为您提供更好,更详细的答案。
韦斯利

Answers:


84

编辑此问题和答案已岁。最终的最佳做法是通过Chef Software,Inc. 提供的Learn Chef Rally自定进度的培训模块进行教授的。下面是大部分原始答案。

在此答案中,“ Chef”或“ chef-client”通常指的是Chef Infra产品。Opscode 于2013年更名为Chef Software,Inc。在20194月,Chef打开了其所有产品的源代码,并创建了一致的品牌命名。

还不清楚在ruby DSL,JSON或从管理控制台中设置角色是否更好?为什么有多种方法可以做同一件事?

2019更新:Policyfiles是最好的工作流程。角色被认为是次等做法,Chef Software,Inc.建议迁移到Policyfiles。

由于人们具有不同的工作流程,因此有多种方法可以执行相同的操作。您选择最适合您的环境的工作流程。让我解释一下差异是什么,以便您可以做出明智的决定。

Ruby DSL for Roles的存在使编写角色变得更加容易,而无需了解JSON的语法。这是入门的简单方法。进行更改后,请使用刀将其上传到Chef服务器。

knife role from file myrole.rb

这会将角色转换为JSON并将其存储在服务器上。如果您有一个强制执行Chef Repository的环境,而您的角色作为真相的来源而生活,那么这很好。

Chef服务器存储JSON,因此您也可以直接在管理控制台中编辑JSON。它确实需要比Ruby DSL更多的字段,以便Knife正确识别要上传的字段。这些细节在某种程度上通过Web UI隐藏。

使用webui /管理控制台编辑角色的缺点是,除非您从服务器下载角色,否则它们不在您的本地版本控制系统中。您可以用小刀来做:

knife role show myrole -Fj

-Fj通知刀“显示JSON格式。” 您可以根据需要将输出重定向到.json文件。

几年前更新:还有其他用于在本地Chef存储库中处理文件的刀具命令。当前,这些命令仅支持JSON格式文件。一个开放的RFC社区将解决为这些插件增加对Ruby DSL的支持。这是工作流程的简短摘要。

检查服务器和本地文件之间的内容差异。

knife diff roles/myrole.json

上载JSON格式的角色文件。在roles/需要的路径。这被映射到服务器上的相同API端点。

knife upload roles/myrole.json

从服务器下载内容,覆盖存储库中文件的内容。

knife download roles/myrole.json

这些命令来自knife-essentials,该命令已内置在Chef客户端软件包中。

您可以将食谱组织到子目录中吗?例如-我们有一些我想为其编写食谱的定制软件,并将其坚持使用:chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook会是一个好习惯吗?

不能。刀期望食谱应该存放在哪里,因为它使用API​​将食谱上传到服务器。这是在设置knife.rbcookbook_path。在较旧版本的Chef Infra中,您可以为菜谱指定路径数组,但是已弃用此方法,因为它需要更多维护,并且使用户感到困惑。

按照惯例,我们使用食谱目录中的前缀来命名特定于客户或特定地点的食谱。以您的示例为例:

chef-repo/cookbooks/ourcompany_customsoftware

根据您的工作,“我们的公司”可能有多种不同的食谱。

进一步参考:

我是否为每种角色创建食谱,以指定其作用?我是否将这些食谱包括其他食谱(即,我的网络服务器角色的食谱包括apache食谱)。我不确定如何处理食谱的相互依赖性和继承性。

角色和食谱之间没有直接关系或依赖性。

角色具有运行列表,该列表指定应应用于具有该角色的任何节点的配方和其他角色。节点具有一个运行列表,其中可以包含角色或配方。当Chef在该节点上运行时,它将为其包含的所有角色和配方扩展运行列表,然后下载所需的食谱。在节点运行列表中:

recipe[apache2]

Chef将下载该apache2节点的食谱,以便它可以应用此食谱。

您可能有专门针对基础结构中角色的食谱。更常见的是,您会拥有用于设置某些类型的服务的食谱,例如apache2,mysql,redis,haproxy等。然后,您将把它们放在适当的角色中。如果您需要满足特定角色的特定于应用程序的特定任务,那么您可以将其写入自定义菜谱中(就像我上面提到的一样)。

进一步参考:

有没有像p外部节点分类器那样的东西,所以节点可以自动确定其角色?

“是。” Chef Infra Server自动进行节点数据存储(以JSON格式),并且服务器还自动为所有节点数据建立索引以进行搜索。

进一步参考:

看来您可以使用Knife或在管理控制台中进行配置,或编辑JSON文件?这真让我感到困惑,为什么做事的方法如此之多,简直瘫痪了!是否有理由使用其中一个?

Chef Infra Server具有RESTful API,可发送和接收JSON响应。刀和管理控制台是用于从管理角度与API进行交互的用户界面。

尽管管理控制台的功能不如Knife,但您可以更好地使用该工具。大多数使用Chef Infra的人都喜欢使用命令行界面,因为它提供了强大的功能和灵活性,即使是在Windows上使用Chef Infra的人。此外,这knife是一个基于插件的工具,您可以创建新插件来与Chef Infra Server或基础设施的其他部分进行交互。

Chef Infra是一组库,基元和API。它使您可以灵活地构建最适合您的基础架构的配置管理系统。

进一步阅读:

如何在我的开发集群中使用Chef自动配置节点?使用puppet,我启动了一个连接到puppermatser的虚拟机,并启动了puppet运行并进行了设置(角色由外部节点分类器确定)。我如何与厨师一起做?-使用带有将其绑定到厨师服务器的pem / rb文件安装厨师,用刀手动告诉节点其角色或在管理界面中对其进行编辑,然后启动厨师客户端运行以进行自我设置?

您将要使用小刀引导插件。这是刀子附带的内置插件。您可以这样调用它:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

这将:

  • root使用SSH密钥以用户身份SSH到目标系统(10.1.1.112)(您可以以其他用户ssh身份使用ssh,然后使用--sudo)。
  • 安装Ruby
  • 安装厨师
  • 为Chef Server创建Chef配置文件,读取刀的配置(.chef / knife.rb)。
  • 复制“验证” RSA私钥,节点将使用该私钥自动向Chef Server注册。
  • 运行chef-client使用指定的上市逗号分隔运行。在此示例中,仅webserver应用角色。

这假定已配置了目标系统,并具有IP地址,并且您可以作为root用户进行SSH。根据您的本地策略和设置过程,您可能需要调整其工作方式。Wiki上的“ bootstrap”页面介绍了有关此工作原理的更多信息。

Knife还为许多公共云计算提供商(例如Amazon EC2和Rackspace Cloud)提供了插件。有一些可用于私有云环境(如Eucalyptus和OpenStack)的插件。还有适用于VMware,Vsphere等的插件。您可以在文档中查看更多信息。

进一步阅读:

我在搜索中可能还会缺少其他任何优秀的厨师资源吗?

厨师文档文件的主要来源。

学习厨师拉力赛是一个系列的,你可以学习所有关于厨师红外的各个方面,和其他厨师产品自导模块。

我曾经维护过一个博客,其中发布了有关Chef Infra的提示,技巧和指南:http : //jtimberman.housepub.org/。我有一个名为“ 快速提示 ” 的系列。由于现实生活中的情况和其他承诺,我不再有时间来维护该站点,但是将来我可能会再次使用它。

厨师客户可以在支持站点上获得帮助和支持:

Chef用户社区是其他帮助的绝佳来源:

可以在Chef Software,Inc.的网站上获得其他资源。

我希望这有帮助。


2
这是宝贵的资源,请更频繁地链接到它。
Pooyan Khosravi 2015年

7年后有什么要添加/更新的吗?;)
Spechal
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.