编辑此问题和答案已岁。最终的最佳做法是通过Chef Software,Inc. 提供的Learn Chef Rally自定进度的培训模块进行教授的。下面是大部分原始答案。
在此答案中,“ Chef”或“ chef-client”通常指的是Chef Infra产品。Opscode 于2013年更名为Chef Software,Inc。在2019年4月,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.rb
有cookbook_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.的网站上获得其他资源。
我希望这有帮助。