为什么本地食谱的厨师客户端同步慢

why is chef-client synchronization slow for local cookbooks

背景

我 运行ning chef-client --local-mode 食谱路径设置为 ./berks-cookbooks 这些食谱已经在 运行ning 厨师之前由 berkshelf 下载。 (厨师 sdk 4.0.0,berkshelf 3.2.3)

在 运行 编写我的脚本之前,厨师必须 运行 "Synchronizing Cookbooks" 这一步需要 2 到 3 分钟。我了解到厨师正在下载依赖的食谱并检查它们的哈希值。

我的问题

如果我使用的是 berkshelf 并且已经在本地保存了食谱,为什么厨师要花这么长时间下载食谱?

有人知道加快速度的方法吗?

我也想知道这个问题,最后对 chef-client 进程进行了 strace 以查看它在做什么。当您在本地模式下 运行 时,对于厨师客户端可用的每本食谱,它都会读取所有其他可用食谱中的文件(更糟糕的是,它似乎对每本食谱都执行了不止一次)。

这意味着在本地模式下同步食谱的时间将随着可用食谱数量的平方增长。

你可以做的一件事是尽量减少这个时间,就是在 运行 之前删除所有不必要的食谱 - 即。事先手动同步你的食谱,并删除那些不会被使用的。

由于我没有检查代码,我不知道为什么会这样,但真正的解决方法是更改​​代码,使其不再一遍又一遍地重新读取相同的文件。

我 运行 遇到了类似的情况,我的厨房在“使用 Berkshelf 解决菜谱依赖性...”时停滞不前,经过消除过程后,我发现我的菜谱路径中有几个大文件(我的实际上是 VirtualBox .box 文件)。我推测收敛过程正在扫描文件到“chefignore”,尽管我没有证据证明这一点。

我确实找到了这篇暗示有这种可能性的文章:https://github.com/chef/chef/issues/6323。它围绕着我的厨师版本,即 12.21.31。

因此,要加快速度,请从食谱路径中删除所有 non-essential 文件。包含大量文件的大型文件或文件夹。