如何使用chef缓存部署的依赖关系?

时间:2012-10-03 14:32:49

标签: deployment chef

最近,我在流浪汉环境中部署一些基于厨师的收件人时遇到了问题。我试图安装的组件之一(percona xtradbcluster)暂时不可用(percona ubuntu repo包含错误的构建)。虽然Percona的那些人在周末修复了这个问题,但我暂时无法部署我的测试设置,而没有其他方法可以修复它。

这让我想到:在部署时,我依赖于互联网上可用的一大堆“东西”:ubuntu repos第三方回购,这些回购中可用的包,可用的红宝石等等等。 ..这些中的任何一个都可能(暂时)不可用,因此无法部署。

我的问题:是否可以缓存我的所有依赖?它是值得的,还是我应该偶尔出现故障?你怎么处理这个?

谢谢! 尼克。

2 个答案:

答案 0 :(得分:1)

使用Opscode的“apt”cookbook在你的某个系统上设置apt缓存,然后其他系统就可以将它用作apt源。

在要作为缓存的系统上,将recipe[apt::cacher-ng]放入其运行列表中(或使用角色)。

在所有其他系统上,将recipe[apt::cacher-client]放入运行列表中(例如,应用于所有系统的“基本”角色)。如果您正在使用Chef Solo,则需要将属性node['apt']['cacher_ipaddress']设置为缓存系统的IP。

然后将缓存所有安装的软件包,其他系统将从缓存中安装。

答案 1 :(得分:0)

Chef实际上为您做了一些缓存,但仅限于 remote_file 资源。但是当它涉及软件包安装时,那么Chef完全依赖于软件包提供程序,这意味着它运行shell命令调用apt-get install(或yum或smth。else)并且apt可以缓存一些下载的软件包,但它不依赖于厨师以任何方式。

而且我不知道任何可以帮助预加载某些远程内容的东西。我们在公司做的唯一事情是我们为更大的文件(> 500Mb)创建了一些本地文件存储,并且我们非常肯定在多台机器上需要这些文件。 (例如我们已经安装了java容器)然后我们在配方中提供了到本地商店的链接,新机器将从那里下载。

唯一想到如何改进的是:

您可以根据 remote_file 资源创建自己的LWRP。当他们收到一些url来下载或包名时,他们会以某种方式尝试首先从本地存储库下载它,并且只有当它们失败然后他们才会尝试使用远程URL。但是可能存在匹配远程URL和本地存储库URL的问题。