Puppet

當 puppet、chef 或 ansible 是比包管理器更簡單的解決方案時?

  • April 6, 2019

我是上述部署和配置工具的新手。我通常需要在目標機器上安裝和升級定制和配置的網路伺服器,可能是反向代理、數據庫、解釋語言所需的執行時等。

我的發行版已經有一個可以工作的包管理器。我可以創建和分發包含預配置軟體的自己的包,並通過 ssh 安裝/升級它們。

我應該在哪裡期望這個解決方案是不夠的並選擇提到的工具?

包管理器絕不是配置管理的替代品。配置管理系統可以處理與本機包管理器的互動。就將配置烘焙到包中而言,這僅在以下情況下就足夠了:a)您的所有伺服器都打算具有相同的配置,並且 b)它們的配置不需要外部數據。

讓我們看一個基本的基礎設施。您有一個內部 Web 應用程序,但您還使用一個 Web 伺服器來執行票證跟踪軟體(比如說 Redmine)。您的內部 Web 應用程序是用 PHP 編寫的,但 Redmine 是一個 ruby​​ 應用程序。這兩個不同的 Web 應用程序將具有不同的 apache 配置。如果您將配置烘焙到包中,這將需要您建構兩個相互衝突的 apache 包,例如 apache-internal 和 apache-redmine。很容易看出這如何很快變得無法管理。

讓我們看看它在 puppet manifest 中的樣子:

# 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',
   },
 ],
}   

另一個基本範例是在您的基礎架構中有不同的環境。包管理器中的靜態配置不能做的事情是模板配置文件。如果您有一個開發和生產環境,模板允許您編寫配置,告訴您的應用程序連接到正確的數據源(例如數據庫)或它的特定環境。

最後,誰將添加您的自定義儲存庫並在每台主機上安裝正確的軟體包?這是更多不必要的維護,通過配置管理來解決。

引用自:https://unix.stackexchange.com/questions/198725