Chef infra 使用Chef进行站点部署,但没有完整的节点设置

Chef infra 使用Chef进行站点部署,但没有完整的节点设置,chef-infra,chef-solo,knife,knife-solo,Chef Infra,Chef Solo,Knife,Knife Solo,我们使用Chef(Chef Solo)来创建托管站点节点,这非常棒 我们使用knife solo将节点作为JSON文件进行跟踪。我们的节点配置(json文件)本身被签入git repo。我们的节点设置文件和服务器(节点)之间有一对一的关系 有些节点为一个客户端托管多个站点,最好有一个轻量级解决方案,只为其中一个站点运行chef进程的部署部分,而不是运行整个chef节点设置过程 我意识到这可能是在用厨师的方式,它是不打算被使用。我得到了Chef的“拉”方法论,它是幂等的,它是如何用于配置管理的,以

我们使用Chef(Chef Solo)来创建托管站点节点,这非常棒

我们使用knife solo将节点作为JSON文件进行跟踪。我们的节点配置(json文件)本身被签入git repo。我们的节点设置文件和服务器(节点)之间有一对一的关系

有些节点为一个客户端托管多个站点,最好有一个轻量级解决方案,只为其中一个站点运行chef进程的部署部分,而不是运行整个chef节点设置过程

我意识到这可能是在用厨师的方式,它是不打算被使用。我得到了Chef的“拉”方法论,它是幂等的,它是如何用于配置管理的,以及这种类型的事情如何超出人们通常会做的范围。简单地说。。。我想利用Chefdeploy资源来部署站点,但不需要在特定服务器上部署所有站点

另外,我对Capistrano很熟悉,知道它是如何或多或少地完成我想做的事情的。。。如果可以的话,我不想在我们的DevOps工作流中引入另一个框架。似乎Chef的部署方式与Capistrano非常相似,我希望有一种方法可以像这样利用Chef


谢谢

我唯一的想法是

您可以使用多个厨师烹饪书-一个客户站点一本烹饪书。并在此食谱中部署站点

所以经过广泛的研发,我决定了我的选择,选择了一个。以下是我的选择,也是我最终选择的

    • 这是chef v11中引入的一个方便实用程序,允许您快速运行菜谱。主要用于测试
    • 这方面的不足之处在于,要使配方真正可重复使用,你需要有某种类型的论证。这个实用程序似乎不支持这一点
  • 在使用时,我为每个本地管理的“节点”都有一个json文件(以及git repo)。对于那些不熟悉的人。。knife solo使用一个json文件,该文件与您要连接和设置的主机(节点)的名称相匹配。我可以为我的主机名管理一些别名,而不是选择一个只部署站点而没有其他内容的json文件。
    • 这需要设置一个仅用于部署站点的配方。根据您如何设置烹饪书和食谱,您可能已经将站点部署逻辑隔离到它自己的食谱中。如果没有,您可以通过重构来实现
    • 这需要广泛使用sshconfig文件。而且真的不是很灵活或直观。如果您预计您可能不是唯一一个使用此设置的人,则尤其值得关注
    • 这个太复杂了
  • 走出刀锋独奏的领域,你可以直接在服务器上运行。这仍然需要一个JSON文件来指定参数/参数以及要运行的配方。
    • 在服务器上运行
      chef solo-c solo.rb-p deploy.json
      ,可以快速运行deploy.json文件中定义的chef服务器安装过程的一个子集
把它们放在一起 使用vanillachef solo可执行文件的最大障碍是必须通过JSON文件指定参数(有关于如何在CLI上内联指定JSON的说明,但似乎不起作用,至少不可靠)

简单地说,应该有一个标准的服务器设置JSON文件(如果需要,由knife solo管理),其中包含所有服务器设置。然后每个站点都有一个小json文件 在仅部署一个站点的主机上

我所做的是使用primary chef server设置配置创建每个站点所需的json文件。我的主chef进程已经知道服务器上的每个站点,因为它需要部署站点代码、设置数据库和配置apache等。因此,除此之外,它还创建了一个json文件,指示运行列表和一些其他属性,指示要部署的站点

我使用.erb文件创建站点部署json文件。例如:

{
 "custom_cookbook": {
    "deployroot": "<%= @deployroot %>",
    <% if @git_revision -%>
    "git_revision": "<%= @git_revision %>",
    <% end -%>
    <% if @settings_file -%>
    "settings-file": "<%= @settings_file %>",
    <% end -%>
    "git_repository_url": "<%= @git_repository_url %>"
  },
  "run_list": [
    "recipe[custom_cookbook::deploy]"
  ]
}
{
“定制食谱”:{
“部署根”:“,
“git_修订版”:“,
“设置文件”:“”,
“git_存储库_url”:”
},
“运行列表”:[
“配方[自定义烹饪书::部署]”
]
}
一旦这些json文件就位,部署带有chef的站点只需运行上面指定的chef solo命令,并使用-j参数指定由master/primary chef进程创建的自定义站点特定json文件

我们通过()启动部署,尽管这可以通过SSH访问站点来完成


希望这有帮助

我认为这更适合服务器故障。不,我不同意。Chef非常关注代码和编程谢谢,我将评估是否有一种方法可以利用它。我以前从未听说过厨师申请,这可能比我当时的方向要容易。我想问题是它是否可以用于厨师独奏设置。似乎没有太多的文档。但是对于一个厨师来说,他不能跳过一些烹饪书。你不需要跳过一些烹饪书。您必须只向服务器或此服务器的角色添加所需的cookbook。示例:我想要引导“nginx-app1”服务器-我为app1创建cookbook,并创建角色(app1服务器),其中包括nginx和app1 cookbook,然后-带角色app1服务器的引导服务器听起来很有趣!很高兴看到您找到了解决问题的解决方案。