解决厨师依赖关系

时间:2015-04-29 05:40:13

标签: automation dependencies chef

在我的实验室中,我目前正在使用Cobbler和Chef管理20节点集群。 Cobbler用于操作系统配置和基本网络设置,按预期正常工作。我可以使用基于预选的NQA安装和本地repo镜像来管理多个OS发行版。

我们还成功安装了厨师服务器并开始管理节点,但厨师没有像我预期的那样工作。问题是我无法在chef中设置节点依赖项。我们的一个重要用例是:

  1. 我们正在这些节点上设置ceph和openstack
  2. Ceph应该在openstack之前安装,因为openstack使用ceph作为后端存储
  3. 应该在Ceph osd之前安装Ceph监视器,因为创建osd需要与监视器进行通信
  4. Openstack和Ceph之间的依赖关系无关紧要,因为它是一个节点中的依赖关系;稍后再安装openstack就可以解决问题。 但是,ceph monitor和ceph osd之间存在依赖性问题。 Ceph osd配置需要运行ceph监视器。因此,ceph osd配方应始终在ceph mon recipe在另一个节点完成后运行。我们当前的方法只是在“ceph-osd”节点中运行“chef-client”,然后在“ceph-mon”节点完成“chef-client”运行,但我认为这太麻烦了。有没有办法在Chef中设置这些依赖项,以便节点根据其依赖项按顺序进行配置?如果没有,是否有好的框架来处理这个问题?

1 个答案:

答案 0 :(得分:1)

在厨师本身,我不知道编排的方法(那不是厨师Job)。

根据您的用例,解决方法可能是使用标记和搜索。

您可以监控配方可以tag结尾的节点(使用tag("CephMonitor")或设置您希望search开启的任何属性。)

之后,厨师的solr指数必须赶上(通常在一分钟内),你可以在Cephosd食谱中使用搜索,你可以这样做:

CephMonitor = search(:node,"tags:CephMonitor") || nil

return if CephMonitor.nil?

[.. rest of the CephOsd recipe, using the CephMonitor['fqdn'] or other attribute from the node ..]

可以使用相同的行为来避免在osd运行之前尝试运行OpenStack配方。

缺点是需要2或3名厨师才能进入融合基础设施。

我没有什么可以建议进行编排,动物园管理员或领事可以帮助代替标签并触发运行。

Rundeck可以对不同节点上的运行进行调整,并将其聚合在一个作业中。

哪个最好取决于你的感受。