Puppet是其基于C/S架構,在Puppet的服務器端存儲著所有對客戶端服務器的配置代碼,這在Puppet中稱為Manifest(清單)。清單存放在PupppetMaster服務器上,當Puppet客戶端下載了Manifest之后,可以根據清單對服務器進行配置。根據以上介紹可以看出,Puppet的主要功能就是實現自動化運維。
在 本 例 中,Puppet服 務 器 端 的IP為192.168.1.100,名 稱 為“server1.com”,Puppet客戶端 的 IP為192.168.1.101,名稱為“client1.com”。
在服務器端以Root賬戶登錄,執行“hostname”命令查看主機名信息。
執行“cat/etc/hosts”命令,查看IP和域名的對應信息。
執 行“scp /etc/hosts 192.168.1.101:/etc/”命令,輸入客戶端的Root密碼后,將Hosts文件復制到客戶機上。
在另一個控制臺界面中執 行“ssh 192.168.1.101”命令,輸入客戶端的Root密碼,登錄到客戶機上。
執行“cat/etc/hosts”命令,查看復制過去的Hosts文件信息。
執行“cat/etc/ntp.conf”命令,查看其中保存的時間服務器信息,選擇某臺時間服務器。
執行“ntpdate 0.rhel.pool.ntp.org”之類的指令,實現時間同步操作。
也可以執行“crontab-e */5 * * * * /usr/sbin/ntpdate 0.rhel.pool.ntp.org&”命令,讓時間同步每隔5分鐘進行一次。按照上述方法,保證服務器端和客戶端時間同步。
執行“cat/etc/sysconfig/network”命令,在其中編寫“NETWORKING=yes”,“HOSTNAME=server1.com”語句,讓主機名永久生效。在客戶端上執行同樣的操作。
在服務器上執行“yum install ruby -y”命令,安裝Ruby開發環境。
執行“yum install openssl openssl-devel”命令,安裝OpenSSL組件。
執行“tar zxvf facter-1.6.7.tar.gz” 命令,對Facter包進行解壓,進入“facter-1.6.7”目錄,執行“ruby install.rb”命令,安裝Factor組件。
執行“tarzxvf puppet-2.7.13.tar.gz”命令,對Puppet包進行解壓。
進入“puppet-2.7.13”目錄,執行“ruby install.rb”命令,安裝Puppet軟件。在客戶端上也執行同樣的安裝操作。
執行“cp conf/auth.conf /etc/puppet/auth.conf”命令,生成Puppet的權限控制文件,該是用于客戶端訪問Puppet服務器的ACL文件,用于判斷允許哪些客戶端擁有訪問的權限。
執行“cp conf/redhat/fileserver.conf/etc/puppet/”,“cp conf/redhat/puppet.conf /etc/puppet/”命令,復制所需的文件。前者作為文件服務器的ACL文件,后者是Puppet服務器的配置文件。
執行“mkdir /etc/puppet/manifests” 命令,創建存儲清單的目錄,這是Puppet腳本的主目錄,應該包含諸如“site.pp”,“site.pppuppet”等文件,所有要在服務器上執行的操作都保存在以“.pp”為后綴的文件中。
例如,執 行“cp conf/redhat/server.init/etc/init.d/puppetmaster”,“chmod+x/etc/init.d/puppetmaster”命令,復制所需的文件并為其配置權限。
執行“chkconfig puppetmaster on”命令,設置開機自啟動腳本。
為了順利的運行Puppet,需要為其配置合適的賬戶。執行“puppetmasterd--mkusers”命令,創建對應的賬戶。
執行“grep puppet/etc/passwd”命令,顯 示名 為“puppet”的賬戶信息。當準備好各種條件后,就可執行“/etc/init.d/puppetmaster start”命令,來啟動PuppetMaster服務。
執行“netstat-antup |grep 8140”命令,顯示關聯的網絡連接處于監聽狀態。
執行“lsof-i:8140”命令,顯示是Puppetmas進程打開了該端口。
在客戶端上執行同樣的安裝操作,來安裝Ruby,Facter和 Puppet。
注意,客戶端準備的是Puppetd的配置文件。
在Puppet安裝路徑中進入“conf”目錄,將其中的“auth.conf”,“namespaceauth.conf”文件復制到“/etc/puppet”目錄中,進入“conf/redhat”目錄,將其中的“pupet.conf”文件也復制過去,同時將“client.init”文件復制到“/etc/init”目錄中,將其更名為“puppet”。
執行“chmod +x/etc/init.d/puppet”命令,為其設置執行權限。
執行“chkconfig puppetd on”命令,將其設置wield開啟啟動狀態。
為了讓客戶端準確找到Puppet服務器,需要執行“vim /etc/puppet/puppet.conf”命令,在該配置文件中的“[agent]”段中添加“server = server1.com”,“certname = server1.com”兩行,告訴客戶端服務器的名稱以及證書的名稱。
同樣地,在客戶端也需要執行“puppetmasterd--mkusers”命令,創建名為“puppet”的賬戶。
執行“/etc/init.d/pupet start”命令,啟 動Puppet客戶端程序。
為了保證雙方的通訊安全,客戶端需要先向服務器發送簽名請求,在客戶端 執 行“rm-rf/var/lib/puppet/ssl/*”命令,將無關的認證文件刪除。
執行“puppetd--test--server server.com”命令,生成證書請求文件。
在服務器上執行“puppetca--list”命令,查看證書請求信息。
執行“puppetca-s client.com”命名,對指定客戶端請求進行簽名處理。
進入“/var/lib/puppet/ssl/ca/signed”目錄,看到生成的指定客戶端的證書文 件,例如“client1.com.pem”。
當然,如果想對所有客戶端請求進行簽名,可以執行“puppet-a-s”命令來實現。執行“puppetca-a--list”命令,在列表中出現“+”符號的證書表示簽署成功。
在客戶端執行“/etc/init.d/pupetd restart”命令,重啟Pupper服務。
然后可以自動從服務器上下載證書,執行“ls /var/lib/puppet/ssl/certs”命令,可以看到從服務器上得到的證書文件,然后就可以使用新的CA證書進而服務器進行通訊了。
下面使用簡單的例子,來說明使用Puppet實現自動化操作的方法。例如在客戶端的“/tmp”目錄下創建名為“test.txt”的文件,在其中寫入一些文本。
在服務器端進入“/etc/puppet/manifests”目 錄,執行“vim site.pp”命令,在該入口文件中逐行寫入:“node default{”,“file{"/temp/test.txt":”,“content=>"hello,World!";”,“}”,“}”等內容。
其中的“default”表示針對所有的客戶端,當然也可以輸入特定的客戶端名稱,表示僅僅針對該客戶端有效。
服務器之所以可以找到客戶端信息,是因為Factor組件在發揮作用。在“file”部分設置需要寫入的文件信息。
執行“/etc/init.d/pupetmaster restart”命令,重啟Pupper服務,讓上述配置信息生效。在默認情況下,每隔30分鐘,客戶端可以和服務器進行一次同步。
當然,您可以根據實際需要,來修改默認的同步時間。
在客戶機上執行“vim/etc/puppet/puppet.conf”命令,在該配置文件中的“[agent]”段中添加“runinterval=60”行,表示將間隔時間設置為60秒。根據上述配置信息,在客戶端上創建預設的文件。
也可以在客戶端上執行執 行“/etc/init.d/puppet restart”命令,重啟Puppet服務,讓其立即和服務器端進行同步。然后進入“/tmp”目錄,就會發現名為“test.txt”的文件。
當 然,執行“puppet--test --server server1.com”命令,也可以實現同樣的效果。
接下來舉例說明如何分發文件,例如,將服務器上“/opt”目錄下的“test.c”文件分發到客戶端的“/opt”目錄下。
當然,不要發布“/root”目錄下的文件,避免權限問題的干擾。該例子主要模擬軟件包的更新操作。
在服務器上執行“vim/etc/puppet/fileserver.conf”命令,在其中添加“[files]”,“path /opt/”,“allow 192.168.1.0/24”行,即允許指定網段的主機同步“/opt”目錄下的內容。
執 行“vim/etc/puppet/manifests/pp.site”命令,在其中添加“file { "/opt/test.c":”,“source =>"puppet://$puppetserver/files/test.c",”,“owner=> "puppet",”,“group=> "puppet",”,“mode =>777,”,“}”行,其 中 的“/opt/test.c”為同步到客戶端的路徑,“$puppetserver”表示服務器的IP。這里的“files”必須和上述配置文件中的小節名一致。
注意,因為在“site.pp”文件中已經存在內容,所以上述部分應該插入到最后兩個“}”之間。在其中設置了權限信息,即針對該文件為“Puppet”賬戶設置了指定的權限。
然后直接在客戶端上執行“puppet--test--server server1.com”命令,可以立即實現文件分發操作。
如果想在客戶機上執行腳本,可以按照上述方法,對服務器上“site.pp”文件進行編輯,在其中 添 加“file{ "/opt/test.sh":”,“source=>"puppet://$puppetserver/files/test.sh",”,“owner=>"puppet",”,“group=>"puppet",”,“mode=>755,”,“}”,“exec { "execmkdir":”,“cwd =>"/opt",”,“command =>"sh /opt/test.sh",”,“user =>"puppet",”,“path =>"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"”,“}”行。
其作用是先將服務器上的“/opt”目錄下的“test.sh”腳本文件同步到客戶端上的“/opt”目錄下,并為其設置針對“Puppet”賬戶的執行權限,之后在客戶機上執行該腳本文件。
其中的“cwd”參數表示進入指定的路徑,“command”參數表示執行目標腳本文件,“path”參數指明環境變量信息。
然后直接在客戶端上執行“puppetd--test--server server1.com”命令,可以立即同步并執行該腳本文件。
在Linux中存在很多服務,如果想對客戶機上的服務進行控制(例如啟動或關閉等),也可以利用Puppet來實現。
例如,可以按照上述方法,對服務器上“site.pp”文件進行編輯,在其中添加“service {”,“"vsftpd":”,“ensure => stopped;”,“"nfs":”,“ensure =>running;”,“}”行,可 以 將“vsftp”服務關閉,將“NFS”服務重啟。
直接在客戶端上執行“puppet --test --server server1.com”命令,可以立即對指定的服務的狀態進行調整了。