厨师的最佳做法/问题

我使用和爱Puppet。 我搬到一家新公司,他们正在采用厨师。 所以我想学习厨师,但是拼凑起来很难,因为我仍然认为在木偶=)

这些是我的问题:

  • 在Ruby DSL,JSON或pipe理控制台中设置angular色是否更好? 为什么有多种方式来做同样的事情?
  • 你可以把食谱组织成子目录吗? 例如:我们有自定义的软件,我想写一本食谱,并粘贴到:厨师回购/ cookbooks / ourcompanystuff / customsoftwarecookbook这将是一个很好的做法?
  • 我是否为每种types的angular色创build一个指定它的工作簿? 我是否有这些食谱包括其他食谱(即我的web服务器angular色的食谱包括apache食谱)。 我不知道如何处理食谱相互依赖和inheritance。
  • 有什么像Puppet的外部节点分类器,所以节点自动确定他们的angular色?
  • 似乎你可以configuration刀或pipe理控制台,或编辑JSON文件的东西? 这让我感到非常困惑,为什么有这么多的方式来做事情,这是瘫痪的! 有没有理由使用一个或另一个? 从傀儡来看,似乎用这些工具不小心configuration了一些东西很容易(比如,留下一些东西)
  • 如何在我的开发集群中自动configuration厨师节点? 使用Puppet,我启动了一个虚拟机,连接到puppermaster并启动一个木偶运行并设置自己(angular色由外部节点分类器决定)。 我如何与厨师做这个? 安装带有pem / rb文件的厨师,将其绑定到厨师服务器上,手动告诉节点其在厨师angular色中的angular色,或者在pipe理界面中编辑这个angular色,然后开始厨师 – 客户端运行来设置自己?

我完成了入门教程,我看到他们有EC2教程,但我从来没有使用EC2,所以他们很难跟随。 在这一点上,我主持了Chef的运行,并且开始configuration一个节点。 我从哪里出发? 我是否需要开始查看公共食谱?

Opscode上的文档没问题,但几乎没有Puppet的那么好。 在我的search中,有没有其他好的厨师资源?

    您的问题的答案。

    在这个答案中,“厨师”或“厨师”是指厨师的产品,通常以客户的forms。 “CHEF”是指Chef Software,Inc.在2013年更名为Chef Software,Inc的 Opscode。

    不清楚在Ruby,DSL或JSON中设置angular色还是从pipe理控制台设置angular色更好? 为什么有多种方式来做同样的事情?

    做同样的事情有多种方式,因为人们有不同的工作stream程。 您select最适合您的环境的工作stream程。 让我解释一下这些差异是什么,这样你才能做出明智的决定。

    Roles的Ruby DSL的存在使得在不知道JSON语法的情况下编写angular色变得更容易。 这是一个开始使用angular色的简单方法。 一旦你做了改变,你就可以用刀把它们上传到厨师服务器。

    knife role from file myrole.rb 

    这将angular色转换为JSON并将其存储在服务器上。 如果你有一个环境来强化Chef Repository,那么你的angular色就会成为真相的来源,这个效果很好。

    JSON是厨师服务器存储的,所以你也可以直接在pipe理控制台中编辑JSON。 它确实需要比Ruby DSL更多的字段才能使Knife正确识别上传。 这些细节通过networking用户界面在一定程度上是隐藏的。

    使用webui /pipe理控制台编辑angular色的缺点是它们不在您的本地版本控制系统中,除非您从服务器下载它们。 你可以用刀做到这一点:

     knife role show myrole -Fj 

    -Fj告诉刀“以JSON格式显示”。 如果你喜欢,你可以将输出redirect到一个.json文件。

    更新 :还有其他的刀子命令用于处理本地厨师仓库中的文件。 目前这些命令只支持JSON格式的文件。 一个社区的RFC是开放的,将解决这些插件增加对Ruby DSL的支持。 以下是工作stream程的简要概述。

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

     knife diff roles/myrole.json 

    上传一个JSON格式的angular色文件。 roles/path是必需的。 这被映射到服务器上的同一个API端点。

     knife upload roles/myrole.json 

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

     knife download roles/myrole.json 

    这些命令来自厨师客户端软件包内置的knife-essentials

    你可以把食谱组织成子目录吗? 例如,我们有定制的软件,我想写一本食谱并粘贴到:厨师回购/ cookbooks / ourcompanystuff / customsoftwarecookbook这将是一个很好的做法?

    No刀具有食谱应该在哪里生存的期望,因为它使用API​​将食谱上传到服务器。 这是用cookbook_path在knife.rb中设置的。 在老版本的Chef中,你可以为烹饪书指定一个path数组,但是这已经被弃用了,因为它需要更多的维护并且让用户感到困惑。

    按照惯例,我们以食谱指南中的前缀名称来命名客户特定的或特定地点的烹饪书。 举个例子,这将是:

     chef-repo/cookbooks/ourcompany_customsoftware 

    根据你在做什么,“我们的公司”可能会有多种不同的烹饪书。

    进一步参考:

    我是否为每种types的angular色创build一个指定它的工作簿? 我是否有这些食谱包括其他食谱(即,我的networking服务器angular色的食谱包括apache食谱)。 我不知道如何处理食谱相互依赖和inheritance。

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

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

     recipe[apache2] 

    厨师将下载节点的apache2食谱,以便它可以应用这个配方。

    您可能会在您的基础架构中具有特定于angular色的食谱。 更常见的是,您将拥有用于设置某些types的服务(如apache2,mysql,redis,haproxy等)的烹饪书。然后,您将把它们转换为适当的angular色。 如果你有自定义的应用程序特定的事情需要发生,以实现一个angular色,那么你可以把它写入一个自定义的食谱(就像我上面引用)。

    进一步参考:

    有没有像木偶外部节点分类器,所以节点自动确定他们的angular色?

    “是。” Chef服务器自动执行节点数据存储(使用JSON),服务器也自动索引所有的节点数据进行search。

    进一步参考:

    似乎你可以configuration刀或pipe理控制台,或编辑JSON文件的东西? 这让我感到非常困惑,为什么有这么多的方式来做事情,这是瘫痪的! 有没有理由使用一个或另一个?

    厨师服务器有一个RESTful API发送和接收JSON响应。 刀和pipe理控制台是用于从pipe理angular度与API进行交互的用户界面。

    尽pipepipe理控制台没有Knife那样多的function,但您可以更好地使用您喜欢的工具。 大多数使用Chef的人更喜欢使用命令行界面来提供强大的function和灵活性,即使是在Windows上使用Chef的人也是如此。 此外,knife是一个基于插件的工具,您可以创build新的插件与Chef Server或与您的基础设施的其他部分进行交互。

    厨师是一套图书馆和基元,以及一个API。 它使您能够灵活地构build最适合您基础架构的configurationpipe理系统。

    进一步阅读:

    如何在我的开发集群中自动configuration厨师的节点? 通过木偶,我启动了一个虚拟机,连接到puppermatser并启动木偶运行并设置自己(angular色由外部节点分类器决定)。 我如何与厨师做这个? – 安装带有pem / rb文件的厨师,将其绑定到厨师服务器上,手动告诉节点其在厨师angular色中的angular色,或者在pipe理界面中编辑这个angular色,然后开始厨师 – 客户端运行来设置自己的身份?

    你会想使用刀Bootstrap。 这是一个内置的插件,附带刀。 你这样调用它:

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

    这会:

    • 作为root用户使用SSH密钥(您可以ssh作为另一个用户,然后使用--sudo )SSH到目标系统(10.1.1.112)。
    • 安装Ruby
    • 安装厨师
    • 为您的厨师服务器创build厨师configuration文件,阅读刀的configuration(.chef / knife.rb)。
    • 复制节点用来自动向Chef Server注册的“validation”RSA私钥。
    • 使用指定的逗号分隔的运行列表运行chef-client 。 在这个例子中只应用了webserverangular色。

    这假定目标系统已经configuration好,有一个IP地址,你可以以root身份进行SSH连接。 根据您的本地策略和供应过程,您可能需要调整其工作原理。 维基上的knife bootstrap页面介绍了更多关于如何工作的内容。

    knife bootstrap命令使用引导程序“模板”,这些模板是特定于平台的shell脚本,它们将安装Chef在最熟悉的工作configuration中。 不同的发行版有不同的Ruby版本可用,不幸的是,有不同的脚本。 您也可以创build自己的引导程序模板。 您可以使用-d--distro选项指定另一个:

     knife bootstrap [ ... ] -d centos5-gems 

    Opscode正在处理完整的堆栈Chef客户端安装程序和引导程序模板,这将消除许多这些问题。 它正在betatesting,这将是Opscode将build议安装厨师的方式。

    Knife还为众多公共云计算提供商提供插件,如Amazon EC2和Rackspace Cloud。 Eucalyptus和OpenStack等私有云环境提供插件。 还有针对VMware,Vsphere等的插件。 您可以在维基上看到更多信息。

    进一步阅读:

    有没有其他的好厨师资源可能会在我的search中丢失?

    厨师文件的主要来源文件。 CHEF Opscode正在全面更新Wiki文档,以便与当前版本的Chef保持一致,并将初学者信息与高级信息适当分开。 这应该很快完成。

    CHEF经营厨师基础培训 ,这是一个为期两天的课堂式技术培训课程,包括讲座和练习。 定期提供公共培训课程,培训材料可通过在开放式培训课程中注册免费获得。 CHEF需要注册才能找出感兴趣的人,并联系注册新材料或新公开课的人。

    CHEF的开放式培训课程:

    我偶尔会发表关于厨师的提示,技巧和指南到我的博客: http : //jtimberman.housepub.org/ 。 我也有一个名为“ 快速提示 ”

    CHEF客户可以在支持网站上获得帮助和支持:

    厨师用户社区是一个很好的额外帮助来源:

    • IRC:irc.freenode.net #chef
    • 邮件列表: http : //lists.opscode.com

    CHEF网站提供额外资源。 我希望这有帮助。