最近,我在流浪汉环境中部署一些基于厨师的收件人时遇到了问题。我试图安装的组件之一(percona xtradbcluster)暂时不可用(percona ubuntu repo包含错误的构建)。虽然Percona的那些人在周末修复了这个问题,但我暂时无法部署我的测试设置,而没有其他方法可以修复它。
这让我想到:在部署时,我依赖于互联网上可用的一大堆“东西”:ubuntu repos第三方回购,这些回购中可用的包,可用的红宝石等等等。 ..这些中的任何一个都可能(暂时)不可用,因此无法部署。
我的问题:是否可以缓存我的所有依赖?它是值得的,还是我应该偶尔出现故障?你怎么处理这个?
谢谢! 尼克。
答案 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的问题。