解决 Chef 依赖关系

Resolving Chef Dependencies

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

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

  1. 我们正在这些节点上设置 ceph 和 openstack
  2. Ceph应该在openstack之前安装,因为openstack使用ceph作为后端存储
  3. Ceph monitor 应该在 Ceph osd 之前安装,因为创建 osd 需要与 monitor 对话

Openstack和Ceph之间的依赖无关紧要,因为是一个节点内的依赖;稍后只需安装 openstack 即可解决问题。 但是,ceph monitor和ceph osd之间的依赖关系出现了一个问题。 Ceph osd 配置需要 运行ning ceph 监视器。因此,在 ceph mon 配方在另一个节点中完成后,ceph osd 配方应该总是 运行。我们目前的方法只是在 "chef-client" 运行 完全完成后 "ceph-osd" 节点 运行 "chef-client" 在 "ceph-mon" 节点但我认为这是一个太很麻烦。有没有办法在 Chef 中设置这些依赖关系,以便节点将根据它们的依赖关系顺序配置?如果没有,是否有处理此问题的良好框架?

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

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

您可以 tag the node at end (with tag("CephMonitor") or with setting any attribute you wish to 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 ..]

可以使用相同的行为来避免尝试 运行 OpenStack 配方,直到 osd 运行。

缺点是需要 2 或 3 个厨师 运行 才能实现融合基础架构。

我没有什么可推荐的来进行编排,zookeeper 或 consul 可以帮助代替标签并触发 运行s。

Rundeck 可以标记不同节点上的 运行s 并将其聚合在一个作业中。

哪个最好看你的感觉。