【问题标题】:why is chef-client synchronization slow for local cookbooks为什么本地食谱的厨师-客户同步缓慢
【发布时间】:2022-04-01 06:44:12
【问题描述】:
背景
我正在运行 chef-client --local-mode,食谱路径设置为 ./berks-cookbooks 这些食谱在运行 chef 之前已经由 berkshelf 下载。 (厨师 SDK 4.0.0,berkshelf 3.2.3)
在运行我的脚本之前,厨师必须运行“同步食谱”,这一步需要 2 到 3 分钟。我了解到 Chef 正在下载相关食谱并检查其哈希值。
我的问题
如果我正在使用 berkshelf 并且已经在本地保存了食谱,为什么厨师要花这么长时间下载食谱?
有人知道加快速度的方法吗?
【问题讨论】:
标签:
performance
chef-infra
chef-recipe
chef-solo
【解决方案1】:
我也想知道这一点,最后对 chef-client 进程进行了 strace,看看它在做什么。当您在本地模式下运行时,对于厨师客户端可用的每本食谱,它会读取所有其他可用食谱中的文件(更糟糕的是,它似乎对每本食谱不止一次这样做)。
这意味着在本地模式下同步食谱的时间将随着可用食谱数量的平方而增加。
您可以做的一件事是在运行前删除所有不必要的食谱 - 即。事先手动同步您的食谱并删除那些不会使用的。
由于我没有检查代码,我不知道它为什么会这样,但真正的解决方法是更改代码以不一遍又一遍地重新读取相同的文件。
【解决方案2】:
我遇到了类似的情况,我的厨房会在“使用 Berkshelf 解决食谱依赖项...”处停滞不前,在消除过程之后,我发现食谱路径中有几个大文件(实际上是我的 VirtualBox .box 文件) .我推测收敛过程正在扫描文件以“chefignore”,尽管我没有证据证明这一点。
我确实发现这篇文章暗示了这种可能性:https://github.com/chef/chef/issues/6323。它围绕着我的厨师版本,即 12.21.31。
因此,为了加快速度,请从食谱路径中删除所有非必要文件。包含大量文件的大型文件或文件夹。