对于那些已经运行配置管理工具的人来说,这可能是一个简单的问题。Puppet 或 Chef 等配置管理工具是否是保持已安装软件包最新的正确方法?
假设我运行多台服务器,其中大部分基于 Debian 和 Ubuntu。当出现安全更新或错误修复时,配置管理工具是否可以更轻松地更新从存储库安装的软件包?
我目前正在运行“无人值守升级”让系统自动安装安全更新,但我仍然必须连接到服务器并aptitude update && aptitude safe-upgrade
时不时地运行。当然,服务器越多,这个过程就越无聊、乏味,而且容易出错。
Puppet 或 Chef 等工具是否是使已安装软件包保持最新的正确方法?你们中有人使用这些工具来避免aptitude
在 15 台服务器上手动运行或执行等效操作吗?我非常肯定这些问题的答案是“是的,当然!”
但是我在哪里可以找到有关此特定用例的更多信息?我还没有时间深入研究 Puppet 或 Chef,示例手册或课程仅展示了安装一个特定包(例如 ssh)的或多或少简单的例子。除了官方文档之外,您还有其他资源可以推荐吗(当然,一旦我知道哪些工具(如果有的话)适合我,我就会研究文档)。
答案1
Puppet(我相信 chef 也一样)与你的apt-get/好吃软件存储库。由于它们负责确定哪些软件包可用,这意味着它们ensure => latest
只适用于 Ubuntu/CentOS/Debian 等。只要您正确设置了相应的文件(/etc/apt/sources.list
,等等)。
答案2
你可以用 puppet 来做,你可以这样做:
ensure => latest,
或者
ensure=> "1.0.2",
指定最新/所需版本。即
package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }
这至少意味着您可以在所有系统中指定相同的版本,并防止服务器(可能很危险地)自动升级。我已在多个站点的生产中使用了这种方法,效果非常好。
运行无人值守升级让我有点害怕,特别是如果他们升级关键任务包、内核、mysql 库、apache 等。特别是如果安装脚本可能想要重新启动服务!
答案3
我认为这可能是个错误的问题。使用 Puppet 和 Chef 等配置管理工具来维护您的基础设施与尝试手动完成所有操作相比无疑是一个巨大的飞跃。保持软件包版本最新和同步的问题并不是这些工具中的任何一个直接解决的问题。要正确自动化此过程,您需要将软件包存储库本身置于您的控制之下。
我这样做的方法是维护一个专用的 Yum 存储库(适用于 Redhat/Fedora/CentOS;适用于 Debian/Ubuntu 的 APT 存储库),其中包含我关心的特定站点的软件包。这些通常是应用程序本身的依赖项(Ruby、PHP、Apache、Nginx、库等)和安全关键软件包。
一旦完成了设置(通常您可以从上游 repo 镜像所需的包开始),您可以使用 Puppet 的“ensure => latest”语法来确保您的所有机器都与 repo 保持同步。
使用“staging”存储库是明智之举,它使您能够在将软件包的更新版本顺利投入生产之前对其进行测试。使用存储库模板,Puppet 可以轻松完成此操作,无需重复任何代码。
自动化软件包版本控制强烈建议您将所有生产系统同步,因为维护不同操作系统发行版、版本和机器架构的多个存储库和软件包非常耗时,并且可能会导致各种模糊的问题和不兼容问题。
所有这些建议同样适用于 Ruby gems、Python eggs 以及您可能使用的其他软件包系统。
我写了一点Puppet 教程这应该可以帮助您快速启动并运行 Puppet。您可以使用 Puppet 将自定义存储库定义部署到您的机器,这是控制软件包版本的第一步。
答案4
这个问题已经很老了,但我想我会以一种最新的方式回答,因为当时还没有现有的答案。
如果您正在使用 puppet 或 chef,请查看 mcollective。这是 puppetlabs 团队开发的一款非常好的工具,允许您向服务器组发送命令。http://docs.puppetlabs.com/mcollective/
它还有一个 apt 插件,可用于在任意数量的服务器上执行 apt 更新: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt