Puppet
當 puppet、chef 或 ansible 是比包管理器更簡單的解決方案時?
我是上述部署和配置工具的新手。我通常需要在目標機器上安裝和升級定制和配置的網路伺服器,可能是反向代理、數據庫、解釋語言所需的執行時等。
我的發行版已經有一個可以工作的包管理器。我可以創建和分發包含預配置軟體的自己的包,並通過 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', }, ], }
另一個基本範例是在您的基礎架構中有不同的環境。包管理器中的靜態配置不能做的事情是模板配置文件。如果您有一個開發和生產環境,模板允許您編寫配置,告訴您的應用程序連接到正確的數據源(例如數據庫)或它的特定環境。
最後,誰將添加您的自定義儲存庫並在每台主機上安裝正確的軟體包?這是更多不必要的維護,通過配置管理來解決。