在 CentOS 和 RHEL 上安裝 Puppet 伺服器和客戶端
本教程要做些什麼?
在這篇教程里,我們將一起安裝配置一個 Puppet 伺服器,然後在我們的客戶端伺服器(譯註:這裡的「客戶端伺服器」指需要部署業務邏輯的伺服器)上完成一些基本配置。
準備工作
由於 Puppet 不是 CentOS 或 RHEL 發行版的基本倉庫,所以我們得手動添加 Puppet 實驗室提供的自定義倉庫。在所有你想使用 Puppet 的地方執行以下命令安裝這個倉庫(版本不同,對應的 RPM 文件名可能略有不同)。
對於 CentOS/RHEL 6.5:
# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm
對於 CentOS/RHEL 7:
# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm
安裝伺服器端
在你打算用作 master 的伺服器上安裝 "puppet-server" 包。
# yum install puppet-server
安裝完成後,設置 Puppet 伺服器開機自動啟動,然後啟動它。
# chkconfig puppetmaster on
# service puppetmaster start
現在伺服器已經運行起來了,我們試試看我們的網路能不能訪問到它。
對於使用 iptables 當做防火牆的 CentOS/RHEL 6,在 /etc/sysconfig/iptables 文件的 OUTPUT ACCEPT 小節里添加下面這一行。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT
重新啟動 iptables 服務讓剛才的修改生效。
# service iptables restart
在安裝了防火牆的 CentOS/RHEL 7 上,我們這麼做:
# firewall-cmd --permanent --zone=public --add-port=8140/tcp
# firewall-cmd --reload
安裝客戶端
執行下面的命令,在客戶端節點安裝 Puppet 客戶端。
# yum install puppet
安裝完成後,確保 Puppet 會隨開機自動啟動。
# chkconfig puppet on
Puppet 客戶端需要知道 Puppet master 伺服器的地址。最佳方案是使用 DNS 伺服器解析 Puppet master 伺服器地址。如果你沒有 DNS 伺服器,在 /etc/hosts 里添加類似下面這幾行也可以:
1.2.3.4 server.your.domain
2.3.4.5 client-node.your.domain
1.2.3.4 對應你的 Puppet master 伺服器 IP 地址,「server.your.domain」是你的 master 伺服器域名(默認通常是伺服器的 hostname),「client-node.your.domain」是你的客戶端節點。包括 Puppet master 和客戶端,所有相關的伺服器都要在 hosts 文件里配置。
完成這些設置之後,我們要讓 Puppet 客戶端知道它的 master 是誰。默認情況下,Puppet 會查找名為「puppet」的伺服器,但通常這並不符合你網路環境的真實情況,所以我們要改成 Pupper master 伺服器的完整域名。打開文件 /etc/sysconfig/puppet,把 PUPPET_SERVER 變數的值改成你在 /etc/hosts 文件里指定的 Puppet master 伺服器的域名。
PUPPET_SERVER=server.your.domain
master 伺服器名也要在 /etc/puppet/puppet.conf 文件的「[agent]」小節里事先定義好。
server=server.your.domain
現在可以啟動 Puppet 客戶端了:
# service puppet start
強制我們的客戶端在 Puppet master 伺服器上登記:
# puppet agent --test
你會看到類似於下面的輸出。別怕,這是正常現象,因為伺服器還沒有在 Puppet master 伺服器上驗證過。
Exiting; no certificate found and waitforcert is disabled
返回 Puppet master 伺服器,檢查證書驗證請求:
# puppet cert list
你應該能看到一個列出了所有向 Puppet master 伺服器發起證書籤名請求的伺服器。找到你客戶端伺服器的 hostname 然後使用下面的命令簽名(client-node 是你客戶端節點的域名):
# puppet cert sign client-node
到此為止 Puppet 客戶端和伺服器都正常工作了。恭喜你!但是,現在 Puppet master 沒有任何要客戶端做的事兒。好吧,我們來創建一些基本的 manifest 文件然後讓我們的客戶端節點安裝一些基本工具。
回到你的 Puppet 伺服器,確保目錄 /etc/puppet/manifests 存在。
# mkdir -p /etc/puppet/manifests
創建 manifest 文件 /etc/puppet/manifests/site.pp,內容如下
node 'client-node' {
include custom_utils
}
class custom_utils {
package { ["nmap","telnet","vim-enhanced","traceroute"]:
ensure => latest,
allow_virtual => false,
}
}
然後重新啟動 puppetmaster 服務。
# service puppetmaster restart
客戶端默認每 30 分鐘更新一次配置,如果你希望你的修改能強制生效,就在客戶端執行如下命令:
# puppet agent -t
如果你需要修改客戶端的默認刷新時間,編輯客戶端節點的 /etc/puppet/puppet.conf 文件中「[agent]」小節,增加下面這一行:
runinterval =
這個選項的值可以是秒(格式比如 30 或者 30s),分鐘(30m),小時(6h),天(2d)以及年(5y)。值得注意的是,0 意味著「立即執行」而不是「從不執行」。
提示和技巧
1. 調試
你免不了會提交錯誤的配置,然後不得不通過調試判斷問題出現在哪兒。一般來說,你要麼通過查看日誌文件 /var/log/puppet 著手解決問題,要麼手動執行查看輸出:
# puppet agent -t
使用「-t」選項,你可以看到 Puppet 的詳細輸出。這條命令還有額外的選項可以幫你定位問題。首先要介紹的選項是:
# puppet agent -t --debug
debug 選項會顯示 Puppet 本次運行時的差不多每一個步驟,這在調試非常複雜的問題時很有用。另一個很有用的選項是:
# puppet agent -t --noop
這個選項讓 puppet 工作在 dry-run(譯註:空轉模式,不會對真實環境產生影響)模式下,不會應用任何修改。Puppet 只會把其工作內容輸出到屏幕上,不會寫到磁碟里去。
2. 模塊
有時候你需要更複雜的 manifest 文件,在你著手編寫它們之前,你有必要花點兒時間瀏覽一下 https://forge.puppetlabs.com。Forge 是一個集合了 Puppet 模塊的社區,你的問題很可能已經有人解答過了,你能在那兒找到解決問題的模塊。如果找不到,那就自己寫一個然後提交上去,其他人也能從中獲益。
現在,假設你已經找到了一個模塊能解決你的問題。怎麼把它安裝到你的系統中去呢?非常簡單,因為 Puppet 已經有了可以直接下載模塊的用戶界面,只需要執行下面的命令:
# puppet module install <module_name> --version 0.0.0
```
# puppet module search <search_string>
```
你會得到一個包含 search_string 的列表。
```
# puppet module search apache
```
```
Notice: Searching https://forgeapi.puppetlabs.com ...
NAME DESCRIPTION AUTHOR KEYWORDS
example42-apache Puppet module for apache @example42 example42, apache
puppetlabs-apache Puppet module for Apache @puppetlabs apache web httpd centos rhel ssl wsgi proxy
theforeman-apache Apache HTTP server configuration @theforeman foreman apache httpd DEPRECATED
```
如果你想查看已經安裝了哪些模塊,鍵入:
```
# puppet module list
```
### 總結
到目前為止,你應該有了功能完整的可以向一個或多個客戶端伺服器推送基本配置的 Puppet master 伺服器。你可以自己隨便加點兒配置適配你自己的網路環境。不必為試用 Puppet 擔心,你會發現,它會拯救你的生活。
Puppet 實驗室正在試著維護一個質量上乘的項目文檔,所以如果你想學點兒關於 Puppet 相關的配置,我強烈推薦你訪問 Puppet 項目的主頁 [http://docs.puppetlabs.com](http://docs.puppetlabs.com/)。
如果你有任何問題,敬請在文章下方評論,我會盡我所能回答你並給你建議。
via:
作者:[Jaroslav Štěpánek](http://xmodulo.com/author/jaroslav) 譯者:[sailing](https://github.com/sailing) 校對:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原創翻譯,[Linux中國](http://linux.cn/) 榮譽推出
---
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive