如何將Puppet服務器及客戶端安裝到CentOS和RHEL上?
譯文由于系統管理員需要管理的系統越來越多,日常任務自動化顯得相當重要。于是,許多管理員采用了編寫自定義腳本這種方法,這些腳本其實模擬復雜的調配軟件。可遺憾的是,腳本會變得過時,開發腳本的人可能離開了公司,要是沒有投入大量的精力來維護,一段時間后這些腳本最終就會無法使用。一種更可取的方法無疑是共享一種人人都能使用的系統,開發不管某人的雇主是誰,都可以使用的工具。這方面有幾個系統可供我們使用,本文介紹如何使用其中一個系統:Puppet。
何謂Puppet?
Puppet是一款面向IT系統管理員和咨詢人士的自動化軟件。它讓用戶可以自動處理重復性任務,比如安裝應用程序和服務、補丁管理及部署。所有資源的配置都存儲在一個所謂的清單文件(manifest)里面,可以適用于多臺機器,或適用于僅僅一臺服務器。如果你想知道更多信息,The Puppet Labs網站更全面地描述了Puppet的性質及其工作方式:https://puppetlabs.com/puppet/what-is-puppet/。
我們準備在本教程中實現什么任務?
我們將安裝和配置一臺Puppet服務器,并為我們的客戶端服務器完成一些基本的配置。我們會介紹如何編寫及管理Puppet清單文件以及如何將它發送到你的服務器上。
前提條件
由于Puppet不在基本的CentOS或RHEL發行版軟件庫中,我們只好添加由Puppet Labs提供的自定義軟件庫。在你想要使用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
服務器的安裝
將軟件包“puppet-server”安裝到你想用作主服務器的服務器上。
- # yum install puppet-server
安裝完畢后,設置Puppet服務器,以便在系統啟動時自動開啟、并打開它。
- # chkconfig puppetmaster on
- # service puppetmaster start
現在我們讓服務器運行起來后,就要確保它能夠從我們的網絡加以訪問。
在iptables用作防火墻的CentOS/RHEL 6上,將下面這一行添加到/etc/sysconfig/iptables的“:OUTPUT ACCEPT”這部分。
- 1 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT
為了讓這個變更生效,有必要重啟iptables。
- # service iptables restart
在使用firewalld的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主服務器位于何處。為此,最佳辦法就是使用DNS服務器,你可以在該服務器上配置Puppet域名。要是你沒有一臺正常運行的DNS服務器,可以使用/etc/hosts文件,為此只要添加下面這一行:
- 1.2.3.4 server.your.domain
- 2.3.4.5 client-node.your.domain
完成這些設置后,我們就要向Puppet客戶端表明誰是主服務器。默認情況下,Puppet尋找一臺名為“puppet”的服務器,但該設置通常不適合你的網絡配置,因此我們將它換成Puppet主服務器的完全符合標準的域名(FQDN)。打開文件/etc/sysconfig/puppet,把“PUPPET_SERVER”值換成/etc/hosts中指定的Puppet主服務器域名:
- PUPPET_SERVER=server.your.domain
主服務器名稱也必須在/etc/puppet/puppet.conf的“[agent]”部分中加以定義:
- serverserver=server.your.domain
現在,你可以啟動Puppet客戶端了:
- # service puppet start
我們需要使用下面這個命令,迫使客戶端聯系上Puppet主服務器:
- # puppet agent --test
你應該會看到類似下列輸出內容的結果。別慌張,這很正常,因為該服務器仍沒有在Puppet主服務器上得到驗證。
- Exiting; no certificate found and waitforcert is disabled
回到你的puppet主服務器,核實證書驗證請求:
- # puppet cert list
你應該會看到一份列表,列出了從puppet主服務器請求證書簽名的所有服務器。找到客戶 服務器的主機名稱,使用下面這個命令來簽名(client-node是客戶端節點的域名):
- # puppet cert sign client-node
至此,你已有了一臺正常工作的Puppet客戶端和服務器。祝賀你!不過,眼下Puppet主服務器無法指令客戶端進行什么操作。所以,不妨創建某個基本的清單文件,并設置客戶端節點來安裝基本的實用工具。
連接回到Puppet服務器,確保目錄/etc/puppet/manifests已存在。
- # mkdir -p /etc/puppet/manifests
現在,創建具有下列內容的清單文件/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
如果你想更改默認的客戶端刷新間隔時間,將下面這一行:
- runinterval = <yourtime>
添加到客戶端節點上的/etc/puppet/puppet.conf的“[agent]”部分。該設置是個時間間隔,單位可能是秒鐘(30或30s)、分鐘(
技巧和方法
1. 調試
有時候可能出現這種情況:你要提交錯誤的配置,不得不調試Puppet在哪里出現了故障。為此,你總是可以從檢查/var/log/puppet/中的日志,或者手動運行代理軟件、查看輸出結果開始入手:
- # puppet agent -t
默認情況下,“-t”激活詳細模式,所以它讓你可以查看Puppet的輸出結果。該命令還有幾個參數,可以幫助更細致一點地識別問題。第一個實用的選項是:
- # puppet agent -t --debug
debug表明Puppet在運行期間經歷的所有步驟。它在調試非常復雜的規則的過程中大有用處。可能很有用的另一個參數是:
- # puppet agent -t --noop
該選項將puppet設置在所謂的空運行(dry-run)模式,并不執行任何變更。Puppet只是在屏幕上輸出所要呈現的內容,并不將任何內容寫入到磁盤上。
2. 模塊
一段時間后,你會發現處于這種情形:你想要有更復雜的清單文件。但在你坐下來開始編寫清單文件之前,應該花點時間,瀏覽https://forge.puppetlabs.com。Forge是個龐大的軟件庫,里面含有諸多Puppet社區模塊;你很有可能在這里找到問題的解決方法。要是沒找到,就編寫自己的模塊,然后提交,那樣別人就能得益于Puppet模塊文化。
現在,假設你已經找到了可以解決你問題的一個模塊。那么,如何把它安裝到系統上?安裝其實相當容易,因為Puppet已經含有直接下載模塊的接口。只要鍵入下面這個命令:
- # puppet module install <module_name> --version 0.0.0
<module_name>是你所選擇模塊的名稱,version是可選的(要是沒有指定,那么下載最新版本。)如果你不記得想要安裝的那個模塊的名稱,可以試著使用module search(模塊搜索)來找到它:
- # puppet module search <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主服務器,可以為一個或多個客戶端服務器提供基本的配置。現在可以隨意為你的配置添加更多的設置,讓它適應你的基礎設施。用不著為搗鼓Puppet而擔心,你會發現它確實大有幫助。
Puppet實驗室在努力為其項目維護最高質量的說明文檔,所以如果你想進一步了解Puppet及其配置,本人強烈建議訪問Puppet項目的網頁:http://docs.puppetlabs.com。
要是你有任何問題,歡迎在下面留言,本人會盡量給予解答或給出建議。