我有一个应用程序,我想使用Chef来配置,它跨越多个节点。比方说,这个过程包括
要做到这一点,一种方法是编写一个菜谱,将其存储在每个节点上,然后在两个节点上反复运行,直到最终它有机会在所有节点上执行所有操作。但是这很笨拙,如果有节点C、D等,就不会扩展。我知道通知可以在单个节点中对依赖项进行排序,但这不能在多个节点上运行。我不可能是唯一需要这样做的人,所以对于这种类型的活动是否有一种机制或设计模式/最佳实践/TTP?
发布于 2017-10-20 09:05:36
简而言之,厨师可能不是这里使用的工具。
厨师是一个收敛的模型,所以你必须以幂等的方式编写你的食谱,比如在一些运行之后,它将根据周围的其他节点处于期望的状态。
关于存储状态的方法听起来是可行的,您必须使用外部调度器来安排主厨-客户端在A和B上的交替运行。
如果您有一个厨师服务器,推送作业可能是坚持在厨师生态系统中的方法,我认为与其他调度器相比,它的主要优势是不需要传入的管理端口,也不需要目标节点上的ssh。
发布于 2017-10-20 16:29:47
这是服务器编配的一个教科书样例,是厨师本质上不打算做的事情。正如Tensibai所指出的,运行Chef的服务器是一个收敛的系统,它根据食谱、属性、数据包等设定的配置设置实现自己想要的状态。如果不了解有关基础设施的具体细节,您可能可以采取以下几种方法:
正如您在问题中所述,创建一个操作状态,使您的节点可以重复运行,直到所有任务都完成为止,并不能很好地扩展。不过,可以重新设计节点,这样就不重要了。如果节点a和b并行运行任务以输出其日志,而b在a之前完成,则可以运行节点a通常运行的任务,反之亦然。
使用外部协调器
如果您打算安排许多节点,那么使用委托节点肯定会更好地扩展。但是,这可能会与主厨客户端在委托方管理的节点上运行冲突。很难验证您的节点配置和委托节点任务之间没有冲突。管理这一点的一种聪明方法可能是将任务合并到每个节点的配置中,并让委托方在数据包或服务器的属性中设置一个值,以指示它应该如何配置自己(即它需要执行哪些任务)。
如果每个节点根据其他节点依次运行任务,并且对在不同节点上运行任务没有成本/技术依赖性,则可能需要考虑将节点配置组合到一个节点中。这将消除任何节点之间的任何配置冲突。我认为在不同的节点上运行任务的意图是明确的,但这绝对是一个需要考虑的选项(甚至以为不同节点重写任务的时间为代价)。
发布于 2017-10-26 02:49:59
使用SaltStack来编排您的厨师运行。
您的跨节点编排逻辑如下所示:https://docs.saltstack.com/en/latest/topics/orchestrate/orchestrate_Runner.html#more-复杂-编排
并且您可以声明性地https://docs.saltstack.com/en/latest/ref/states/all/salt.states.chef.html
或者是必要的https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chef.html
驱动主厨节点到它们想要的状态。
https://devops.stackexchange.com/questions/2374
复制相似问题