持续部署&与厨师的编排

时间:2014-11-30 18:28:15

标签: chef continuous-deployment orchestration

我正在研究如何在利用Chef的同时在多个主机上部署我的应用程序(Web / DB /应用程序层)。我所提出的是使用Chef配方将部署的每个步骤表示为单个节点状态。例如,如果有一个步骤来处理X守护进程的停止&监视,它可以写成一个厨师配方,只需要停止特定的X守护进程。 同样,将工件从共享位置移动到Web根目录的部署步骤也可以作为表示节点特定状态(将工件从A点复制到B点)的主厨配方引用。 / p>

整个部署过程将包含基本上执行以下三项操作的各个步骤:

  1. 根据当前部署修改节点的运行列表 步骤。
  2. 让每个节点都运行chef-client
  3. 记录任何失败,并允许在失败的节点上重复主厨运行或跳过步骤,以便继续部署。
  4. 问题:

    • 以这种方式使用Chef(不断修改节点的运行列表以改变节点状态)这是一种不好的做法吗?如果是这样,为什么?
    • 协调这一切的最佳方法是什么?我可以在那里使用任何类型的CI工具,但是我无法弄清楚如何捕获chef-client的输出并且能够重复或忽略在特定节点上运行的chef-client。

2 个答案:

答案 0 :(得分:3)

这真的不是厨师最适合的事情。 Chef擅长融合配置,而不是程序位。使用Chef处理汇聚更改的部分,例如部署新代码或重写配置文件,使用程序工具处理其他位。

至于协调这个的工具,如果你想要更多服务y,RunDeck是一个选择。如果你想要一个命令行工具,请查看Fabric或者Capistrano。我个人使用混合,RunDeck plus Fabric来获得两者的最佳效果。其他一些不太完整的选项包括Chef Push Jobs,Mcollective和Saltstack。

答案 1 :(得分:1)

Puppet和Chef不是编排工具,从这个角度来看,他们做得非常糟糕。它们不是为了编排而设计的,即使有一些具有特定兴趣的政党正在推动业务流程定义的界限,以使厨师被考虑进行协调,但他们忽略了关键的事实/需求。不幸的是,我不知道有一个关于大型环境编排的严肃解决方案 - 大多数工具都非常特定于某些需求,而且有些工具还没有准备就绪。我不得不发明自己的解决方法来完成这项工作,但这样做并没有什么优雅。