当 puppet、chef 或 ansible 是比包管理器更简单的解决方案时?

当 puppet、chef 或 ansible 是比包管理器更简单的解决方案时?

我是上述部署和配置工具的新手。我通常需要在目标计算机上安装和升级自定义和配置的网络服务器,可能是反向代理、数据库、解释语言所需的运行时等等。

我的发行版已经有一个可以运行的包管理器。我可以创建和分发我自己的包含预配置软件的软件包,并通过 ssh 安装/升级它们。

我应该在哪里期望这个解决方案是不够的并选择提到的工具?

答案1

包管理器绝不是配置管理的替代品。配置管理系统可以处理与本机包管理器的交互。就将配置烘焙到包中而言,仅当 a) 所有服务器都打算具有相同的配置并且 b) 其配置不需要外部数据时,这才足够。

让我们看一下基本的基础设施。您有一个内部 Web 应用程序,但您还使用一个 Web 服务器来运行票证跟踪软件(比如说 Redmine)。您的内部 Web 应用程序是用 PHP 编写的,但 Redmine 是一个 ruby​​ 应用程序。这两个不同的 Web 应用程序将具有不同的 apache 配置。如果您将配置烘焙到包中,则需要构建两个相互冲突的 apache 包,例如 apache-internal 和 apache-redmine。很容易看出这种情况很快就会变得难以管理。

让我们看看这在木偶清单中会是什么样子:

# internal PHP application
class { apache: }
# uses your OS package manager to install PHP
class {'::apache::mod::php':
  package_name => "php54-php",
  path         => "${::apache::params::lib_path}/libphp54-php5.so",
}

# redmine
class { apache: }
# uses your OS package manager to install mod_passenger
class { apache::mod::passenger: }
apache::vhost { $::fqdn:
  docroot     => '/path/to/directory',
  directories => [
    { path              => '/path/to/directory',
      passenger_enabled => 'on',
    },
  ],
}   

另一个基本示例是基础设施中有不同的环境。您无法在包管理器中使用静态配置来执行模板配置文件。如果您有开发和生产环境,模板允许您编写配置来告诉您的应用程序连接到正确的数据源(例如数据库)或其特定环境。

最后,谁将添加您的自定义存储库并在每台主机上安装正确的软件包?这是更多不必要的维护,通过配置管理来解决。

答案2

我同意 Jordanm 的观点,我在公司内使用 puppet 的一个实际例子是,我们有本地 yum 存储库,因为我们的整个基础设施都是基于 Centos 的。从头开始构建新服务器时,我可以选择一个已预先配置的清单来构建服务器,例如它可能是一个灯堆栈,因此 puppet 将安装所有必需的 RPM,以确保所有正确的应用程序都存在。但它也会删除任何我不想要的系统服务、更改配置、部署 iptable 规则、安装管理员用户帐户、配置代理规则等。我所做的任何系统更改都是通过木偶进行的,因此我永远不会忘记再次进行更改。

正如您所看到的,puppet 不仅仅用于包管理,它还可以构建整个服务器而无需用户交互。想想如果你的硬件坏了,构建一个新的副本需要多长时间和多少努力。

相关内容