http://blog.csdn.net/wych1981/article/details/46839893
puppet安裝和部署
1 puppet是什麼
puppet是一種基于ruby語言開發的Lnux、Unix、windows平台的集中配置管理系統。它使用自有的puppet描述語言,可管理配置檔案file、使用者user、cron任務、軟體包、系統服務等系統實體。
puppet把這些系統實體稱之為資源,puppet設計目标是簡化對這些資源的管理以及妥善處理資源間的依賴關系。
puppet依賴于C/S(用戶端/伺服器)的部署架構。它需要在puppet伺服器上安裝puppet-server軟體包(以下簡稱master),在需要管理的目标主機上安裝puppet用戶端軟體(以下簡稱agent)。
當agent連接配接上master後,定義在master端的配置檔案會被編譯,然後在agent上運作。每個agent預設30分鐘會連接配接一次master,确認配置資訊的更新情況。但是這種方式在很多場景下不是很符合系統管理者的要求,是以很多系統管理者也會将agent通過crontab(任務計劃)來管理,這樣會更加靈活一些。
2 puppet優點
puppet的文法允許你建立一個單獨的腳本,用來在你所有的目标主機上建立一個使用者。所有的目标主機會依次使用适合本地系統的文法來解釋和執行這個子產品。如果這個配置是在Red Hat伺服器上執行的話,建立使用者使用useradd指令,如果這個配置是在FreddBSD伺服器上執行的話,則使用adduser指令。
puppet另外一個卓越的地方就是它的靈活性。源于開源軟體的天性,你可以自由地獲得puppet的源代碼。如果你遇到問題并且有能力處理的話,你可以修改或加強puppet的代碼使其适用于你的環境,然後解決這個問題。
puppet也是易于擴充的。定制軟體包的支援功能和特殊的系統環境配置能夠快速簡單地添加至puppet的安裝程式中。
3 安裝準備工作
本次實驗OS為centos 6.3 64bit,服務端為:10.10.42.31,用戶端為10.10.42.169。
3.1 主機時間同步
為了減少在實驗過程中不必要的麻煩,我們需要對所有主機(包括伺服器和用戶端)進行時間同步。即伺服器與用戶端的時間相差不能超過秒級。
使用以下指令進行時間同步,如下:
# ntpdate 10.10.1.230
3.2 修改主機名
因為安裝 puppet 時會把主機名寫入證書,同時用戶端和服務端之間通信需要這個證書。如果主機沒有設定主機名,則需要修改伺服器與用戶端的主機名。
修改主機名。如下:
Master:
# hostname jijilu-test
Client:
# hostname 430-test01
執行此指令,可以使主機的主機名立即生效。但是伺服器重新開機後,此修改就會失效。
要是主機名永久生效的話,需要修改/etc/sysconfig/network檔案。
3.3 關閉iptables和selinux
我們現在所有的實驗都是在關閉iptables和selinux下進行的。
# /etc/init.d/iptables stop
# chkconfig iptables off
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# setenforce 0
4 環境準備
puppet的安裝可以分為源碼安裝和RPM安裝,但是無論哪一種安裝方法,我們都需要在安裝之前對其進行幾點需要說明。
4.1 puppet安裝說明
由于puppet是采用ruby語言開發,是以無論是源碼還是RPM方式安裝puppet,我們都必須要先安裝ruby語言環境
puppet從2.7版本以後,就需要hiera的支援。是以也必須安裝hiera。
在前面章節中,我們說明了puppet是一個配置管理系統,而管理的資源,都是系統的實體。但是這些實體,是如何來的呢?這就需要我們安裝另外一個資源收集軟體—facter。
facter主要用來收集主機的一些資訊,比如:CPU、主機IP等。facter把這些收集的資訊發送給puppet伺服器端,伺服器端就可以根據不同的條件來對不同的節點機器生成不同的puppet配置檔案。
4.2 安裝ruby
ruby的安裝比較簡單,我們在此使用是yum進行安裝。如下:
# yum -y install ruby
我們可以檢視ruby的幫助資訊,如下:
# ruby -h
除此之外,我們還要安裝ruby-rdoc這個軟體包。該軟體包主要用于檢視ruby的幫助文檔。如下:
# yum -y install ruby-rdoc
以上就是和ruby有關的軟體包,安裝完畢後,我們開始來安裝facter。
4.3 安裝facter
facter我們可以從puppet官網下載下傳,如下:
http://downloads.puppetlabs.com/facter/
注意:facter也可以通過yum進行安裝,在此我們使用的是源碼安裝。
下載下傳facter 2.3.0,如下:
wget http://downloads.puppetlabs.com/facter/facter-2.3.0.tar.gz
解壓facter軟體包:
# tar -xf facter-2.3.0.tar.gz
開始安裝facter:
# ruby install.rb或者./install.rb
facter安裝完畢後,我們來檢視下facter的使用幫助。如下:
# facter -h
如果想檢視facter詳細幫助資訊,我們也可以man下facter。如下:
# man facter
如果安裝沒有問題的話,我們在執行facter指令後,會顯示facter收集的相關資訊。如下:
# facter
architecture => x86_64
augeasversion => 0.9.0
bios_release_date => 08/16/2013
bios_vendor => Phoenix Technologies LTD
bios_version => 6.00
blockdevice_sda_model => Virtual disk
blockdevice_sda_size => 42949672960
blockdevice_sda_vendor => VMware
blockdevice_sr0_model => VMware IDE CDR10
blockdevice_sr0_size => 1073741312
blockdevice_sr0_vendor => NECVMWar
blockdevices => sda,sr0
boardmanufacturer => Intel Corporation
boardproductname => 440BX Desktop Reference Platform
boardserialnumber => None
facterversion => 2.3.0
filesystems => ext4,iso9660
fqdn => jijilu-test
gid => root
hardwareisa => x86_64
hardwaremodel => x86_64
hostname => jijilu-test
id => root
interfaces => eth2,lo
ipaddress => 10.10.42.31
ipaddress_eth2 => 10.10.42.31
ipaddress_lo => 127.0.0.1
is_virtual => true
kernel => Linux
kernelmajversion => 2.6
kernelrelease => 2.6.32-279.el6.x86_64
kernelversion => 2.6.32
lsbdistcodename => Final
lsbdistdescription => CentOS release 6.3 (Final)
lsbdistid => CentOS
lsbdistrelease => 6.3
lsbmajdistrelease => 6
lsbminordistrelease => 3
lsbrelease => :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
macaddress => 00:50:56:11:42:31
macaddress_eth2 => 00:50:56:11:42:31
manufacturer => VMware, Inc.
memoryfree => 1.86 GB
memoryfree_mb => 1909.07
memorysize => 4.73 GB
memorysize_mb => 4842.25
mtu_eth2 => 1500
mtu_lo => 16436
netmask => 255.255.255.0
netmask_eth2 => 255.255.255.0
netmask_lo => 255.0.0.0
network_eth2 => 10.10.42.0
network_lo => 127.0.0.0
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.3
os => {"family"=>"RedHat", "name"=>"CentOS", "release"=>{"minor"=>"3", "major"=>"6", "full"=>"6.3"}, "lsb"=>{"minordistrelease"=>"3", "distrelease"=>"6.3", "release"=>":core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch", "distid"=>"CentOS", "majdistrelease"=>"6", "distdescription"=>"CentOS release 6.3 (Final)", "distcodename"=>"Final"}}
osfamily => RedHat
partitions => {"sda1"=>{"uuid"=>"899a5bca-f9e0-4b1f-9f41-ab48d2835c3a", "filesystem"=>"ext4", "size"=>"1024000", "mount"=>"/boot"}, "sda2"=>{"filesystem"=>"LVM2_member", "size"=>"82860032"}}
path => /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
physicalprocessorcount => 8
processor0 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor1 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor2 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor3 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor4 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor5 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor6 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processor7 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
processorcount => 8
processors => {"models"=>["Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz"], "count"=>8, "physicalcount"=>8}
productname => VMware Virtual Platform
ps => ps -ef
puppetversion => 3.8.1
rubyplatform => x86_64-linux
rubysitedir => /usr/lib/ruby/site_ruby/1.8
rubyversion => 1.8.7
selinux => false
serialnumber => VMware-42 3d 2a ec b8 96 b5 35-c5 c5 b4 ec e4 a7 cf bf
sshdsakey => AAAAB3NzaC1kc3MAAACBANw5dHJoJD8se6a+T8PzJHQ6csFXmCamMgkw/iMGU/NoRMoT2L1dSYdRceX2yvpcuP+f0XHUd9Jidhbzyv+TXaQeGFun694ybiiIjX5krqH70B3VBpXnuF+ojzu+o8mAgrdAHv7RaL4j710hrxGPyVn/cqlEmZBy0WEkIImQM61BAAAAFQDpnRPYnuidoOcHuRVHRlpWvj62kwAAAIEAoyvCjHfUwIM7fmJK72yIpLY6Z3+uuBD/N6RmAtJx2vBtp3OyKwOsaZdqV1+kiMoDSqNJNsePXxs9PmtNJ3pyCg/gSilPAFyGD0yB2J3TYuS05Zvkyuge2zmHvBQX5bavp6grdl/H7toBenlRG4xmzyXxYamRdt0RTId9Tnx+rlIAAACBANlAAzWWX7gyGhrK4YHtAIH5a1PNVAOrCFj3LOyOQce4U2o1UrJXUQd5MDO32BiDvN0XAACFikWHz6XCoGdM4YwGhRTMe9MJ7vri3bVGbjHAIhJsxoItWIVUtKi2dA3iIg9iX61RcLt6osnLB6H/tmRXkbXTHWGn/8dlH0zGvyuz
sshfp_dsa => SSHFP 2 1 52b0579624a3304e956ab417596486751827aaa8
SSHFP 2 2 fe83d4cfce352a439c8994d1746944095333b22502256c8b5f59cb469ccff6ef
sshfp_rsa => SSHFP 1 1 7682ee464c27395dc65fafd20a3fa20628a8bac5
SSHFP 1 2 c9c3b39df9a32e130a4e69fa953d65e040df00b2da024cd5687dc60debc64a9a
sshrsakey => AAAAB3NzaC1yc2EAAAABIwAAAQEAxg2jKX7EfCPtNM7bnRCBvcBWK8MeHy/FgzYU7fSQo7VbC2TS4hp45mAxeFVN6rUCiDBolXVO1p5FTsID1dAxFFSsQyIub1Yp32XuC+lr63n/I6sgjzXhIjPpFLjPRv8FKXQtbaR860dRUi94gAAnuuXdiEFlrjH4mMadCw3iE3Ks1HSaMlBGdAVJ5A3t721NTlm5HTFYR9hHQZhb5AV9Y88U+1JQn1UIi0Ye1nPiHDzApOO0Eg3wdMQcMVmOpZKTLpDA1MRuIdE6SFgnVTS0wwHKFKBMGxXNCG+gkYSnmT/nb9sOz8iNcP6zUtmItzb6ZXmxXLh4Pgjz9dl7vMfKYw==
swapfree => 4.80 GB
swapfree_mb => 4916.39
swapsize => 4.86 GB
swapsize_mb => 4975.99
system_uptime => {"days"=>301, "hours"=>7227, "seconds"=>26020598, "uptime"=>"301 days"}
timezone => CST
type => Other
uniqueid => 0a0a1f2a
uptime => 301 days
uptime_days => 301
uptime_hours => 7227
uptime_seconds => 26020598
uuid => 423D2AEC-B896-B535-C5C5-B4ECE4A7CFBF
virtual => vmware
4.4 安裝hiera
hiera主要用于控制一些agent經常變化的數值,在puppet2.7以後的版本必須要安裝。如果不安裝的話,我們在安裝puppet時,系統會提示如下錯誤:
Could not load hiera; cannot install
但是在安裝hiera之前,我們必須安裝額外的yum源,否則系統會提示找不到該軟體包。
該yum源,我們可以puppet官網檢視到。如下:
https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives
按照puppet官網的方法進行安裝。如下:
# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum源配置完畢後,我們現在來安裝hiera。如下:
# yum -y install hiera
以上安裝完畢後,我們就可以正式安裝puppet。
5 源碼安裝puppet
puppet服務端與用戶端的源碼安裝使用的是同一個軟體包,安裝步驟一樣,隻是在配置檔案方面有細微的差别。
在下載下傳puppet源碼之前,我們還要在master端和agent端建立puppet運作時使用的使用者puppet。
建立puppet使用者,如下:
# useradd -M -s /sbin/nologin puppet
# cat /etc/passwd |grep puppet
puppet:x:52:52:Puppet:/var/lib/puppet:/sbin/nologin
注意:puppet服務端是以puppet使用者運作的,而puppet用戶端是root使用者運作。
這樣做的目的是:master在服務端以普通使用者運作安全性比較高,而agent在用戶端以root使用者運作,是因為master在建立使用者、修改系統檔案等資源時,需要具有最高權限。
5.1 puppet源碼安裝
puppet的源碼包,我們可以從puppet官網下載下傳。目前puppet最新版為3.7.3.如下:
http://downloads.puppetlabs.com/puppet/
下載下傳puppet軟體包。如下:
# wget http://downloads.puppetlabs.com/puppet/puppet-3.7.3.tar.gz
解壓puppet軟體包,如下:
# tar -xf puppet-3.7.3.tar.gz
puppet的安裝方法與facter的安裝一樣,如下:
# ruby install.rb或者./install.rb
puppet安裝完畢後,我們來檢視下其幫助資訊,如下:
# puppet help
檢視puppet的安裝位置如下:
# ll /etc/puppet/
total 28
-rw-r--r-- 1 root root 4178 May 22 04:55 auth.conf
drwxr-xr-x 2 root root 4096 Jun 11 13:28 manifests
以上就是puppet的安裝,安裝完畢後。我們現在來配置puppet。
5.2 master端配置
puppet安裝完畢後,我們來配置下master端。把puppet源碼包ext/redhat/目錄下的puppet.conf檔案複制到puppet的安裝目錄/etc/puppet/下,如下:
# cp ext/redhat/puppet.conf /etc/puppet/
# vi /etc/puppet/puppet.conf
server = jijilu-test
certname = jijilu-test
pluginsync = false
其中:
jijilu-test表示puppet伺服器的主機名。
pluginsync = false表示關閉子產品中的插件功能
配置檔案修改完畢後,我們現在來配置master端的啟動腳本。
複制puppet源碼包ext/redhat/目錄下的server.init檔案到/etc/init.d/下,并重命名為puppetmaster。然後賦予puppetmaster可執行權限。如下:
# cp ext/redhat/server.init /etc/init.d/puppetmaster
# chmod u+x /etc/init.d/puppetmaster
注意:master端啟動,我們也可以通過puppet master指令來啟動。如下:
# puppet master
# netstat -tunlp |grep "8140"
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 26486/ruby
# ps aux |grep puppet
puppet 26486 0.4 0.9 150224 47868 ? Ssl 11:15 1:50 /usr/bin/ruby /usr/bin/puppet master
把puppetmaster加入到開機啟動項。如下:
# chkconfig --add puppetmaster
# chkconfig puppetmaster on
# chkconfig |grep puppetmaster
puppetmaster 0:off 1:off 2:off 3:off 4:off 5:off 6:off
以上都配置完畢後,我們來啟動puppet服務,如下:
# /etc/init.d/puppetmaster start
# 通過上圖,我們可以很puppet服務使用TCP協定的8140端口,而且運作時使用puppet使用者。
puppet服務端配置完畢後,我們現在來配置puppet用戶端。
5.3 agent端配置
agent端的配置,隻需要把puppet.conf檔案複制到puppet的安裝目錄/etc/puppet/下即可,如下:。
# cp ext/redhat/puppet.conf /etc/puppet/
# cat /etc/puppet/puppet.conf
server = jijilu-test
pluginsync = false
其中:
jijilu-test表示puppet伺服器的主機名。
pluginsync = false表示關閉子產品中的插件功能
agent端啟動,我們可以通過puppet agent指令來啟動。如下:
# puppet agent
# ps aux |grep puppet
root 23854 0.0 1.5 162220 61932 ? Ss 11:49 0:06 /usr/bin/ruby /usr/bin/puppet agent
通過上圖,我們也可以看出agent端運作時使用的使用者為root,而不是puppet使用者。
注意:
agent端我們使用puppet agent指令來進行各種管理,包括證書的申請、資源的同步,我們都是通過這個指令進行的。
agent可以以兩種方式運作:第一種方式是指令接參數連接配接master,第二種是以守護程序的形式在系統背景運作,預設每30分鐘連接配接一次master,但是這樣并不靈活。我們一般是使用第一種方式,并配合crontab使用。
6 puppet證書授權
我們知道puppet為了安全,采用ssl隧道通信,是以需要申請證書來驗證。
6.1 master端證書初始化
當master端第一次啟動的時候,可以檢視/var/log/message日志檔案中,有類似如下的資訊:
# tail -f /var/log/messages
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for ca
Jun 11 11:15:25 jijilu-test puppet-master[26440]: jijilu-test has a waiting certificate request
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for jijilu-test
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/ca/requests/jijilu-test.pem'
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/certificate_requests/jijilu-test.pem'
Jun 11 11:15:26 jijilu-test puppet-master[26486]: Reopening log files
Jun 11 11:15:26 jijilu-test puppet-master[26486]: Starting Puppet master version 3.8.1
Jun 11 11:49:17 jijilu-test puppet-master[26486]: 430-test01 has a waiting certificate request
從日志中我們可以看出第一次啟動master端時,puppet服務會在本地建立認證中心,給自己授權證書和key,這個我們可以在/var/lib/puppet/ssl看到那些證書和key。如下:
# ll /var/lib/puppet/ssl
drwxr-xr-x 5 puppet puppet 4096 Jun 11 11:15 ca
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certificate_requests
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certs
-rw-r--r-- 1 puppet puppet 958 Jun 11 11:15 crl.pem
drwxr-x--- 2 puppet puppet 4096 Jun 11 11:05 private
drwxr-x--- 2 puppet puppet 4096 Jun 11 11:06 private_keys
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:06 public_keys
這個目錄和/etc/puppet/puppet.conf檔案中配置的ssldir路徑有關系。
我們也可以檢視master端給自己授權的證書檔案,如下:
# ll /var/lib/puppet/ssl/ca/signed
-rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 jijilu-test.pem
6.2 agent端申請證書
agent端在第一次連接配接master端時,會向master端申請證書。如果master端沒有授予agent端證書,那麼agent端和master端之間的連接配接是不會建立成功的。
此時agent端會持續等待master端授權證書,并會每隔2分鐘去檢查master端是否簽發證書。
我們現在使用puppet agent --server jijilu-test連接配接master端,如下:
# puppet agent --server jijilu-test --test
6.3 master端授權證書
agent端申請證書完畢後,需要我們切換到master端,使用puppet cert指令來對agent端授權證書。
有關puppet cert的使用,我們可以檢視pupper cert的幫助資訊。如下:
# pupper cert
現在我們可以檢視master端有哪些主機在申請證書,如下:
# puppet cert list
現在我們來給agent端授權證書,使用如下指令:
# puppet cert sign 430-test01
注意:
如果實際生産環境用戶端數量比較多的話,我們可以一次性授權所有證書。如下:
# puppet cert sign --all
在master端檢視所有已經通過認證的agent端,如下:
# puppet cert -all
# 現在我們再來看看master端給agent端授權的證書檔案,如下:
# ll /var/lib/puppet/ssl/ca/signed
-rw-r--r-- 1 puppet puppet 1939 Jun 11 11:55 430-test01.pem
-rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 jijilu-test.pem
通過上圖,我們可以看出master端授權用戶端c.ilanni.com的證書檔案是430-test01.pem。
6.4 檢視agent端證書
在master端授權完畢後,我們現在切換到agent端檢視授權的證書檔案,如下:
# ll /var/lib/puppet/ssl/certs
-rw-r--r--. 1 puppet puppet 1939 Jun 11 11:57 430-test01.pem
-rw-r--r--. 1 puppet puppet 1944 Jun 11 11:49 ca.pem
通過上圖,我們可以看出agent端的證書檔案430-test01.pem與master端的證書檔案是一樣的。
6.5 puppet證書問題
在實際的生産環境中,可能會出現已經通過master端認證的agent端主機名被修改或者其他一些誤操作,進而導緻agent端無法與master端進行正常通信。
當遇到這種情況時,我們一般的處理方法是先删除master端和agent端的相關的認證檔案,然後在agent端重新申請證書。
具體操作如下:
agent端,删除/var/lib/puppet/ssl目錄,如下:
# rm -fr /var/lib/puppet/ssl
master端,删除/var/lib/puppet/ssl/ca/signed目錄下的證書檔案,如下:
# rm -fr /var/lib/puppet/ssl/ca/signed/c.ilanni.com.pem
以上操作完畢後,agent端再次申請證書即可。
7 puppet資源
puppet環境搭建完畢後,我們現在開始來介紹puppet資源相關的内容。
7.1 puppet的資源類型及幫助
puppet的資源,我們是可以通過相關指令檢視puppet支援的資源類型。
通過前面的章節,我們知道puppet是支援子指令進行查詢的。如下:
# puppet help ca
檢視puppet支援的資源類型。如下:
# puppet describe --list
也可以通過puppet resource --type指令查詢,如下:
# puppet resource --type
通過上圖,我們可以看到puppet支援使用者user、檔案file、crontab等大部分的資源。
如果想檢視user的資源,我們還是繼續使用puppet describe user指令進行檢視。如下:
# puppet describe user
# 如果我們想檢視user在puppet站點site.pp檔案中的具體使用方法,可以通過如下指令進行檢視:
# puppet resource user
通過上圖,我們可以看到puppet已經給出了user使用的例子,我們隻需要按照這個例子進行操作即可。
注意:
如果puppet describe幫助中沒有該資源在site.pp站點中的使用詳情,我們可以去到puppet resource中進行檢視。
這個隻是以user資源為例,如果想檢視host資源的幫助,我們也可以使用類似的指令,如下:
# puppet resource host
如果你不想在本機進行檢視,那麼也可以去puppet官網進行檢視,如下:
https://docs.puppetlabs.com/references/latest/type.html
7.2 puppet資源配置檔案
puppet的資源配置檔案在服務端的/etc/puppet/manifests目錄下,我們需要在該目錄下建立一個站點檔案site.pp。
我們在該檔案中建立需要同步到agent端的資源,如下:
# cat /etc/puppet/manifests/site.pp
node default{
file { "/tmp/test.txt":
content => "Hello,calvin ,this is puppet test!n"}
}
以上指令表示在puppet資源配置檔案沖建立一個預設節點,使用file資源,在agent端的/tmp/目錄下建立test.txt,内容為:Hello, calvin,this is puppet test!n
注意:
其中的n表示換行。如果不加n的話,檢視該檔案内容時會顯示成這樣:
Hello,calvin,this is puppet test![[email protected] ~]#
同時site.pp檔案建立完畢後,我們要先重新開機下master端,如下:
# /etc/init.d/puppetmaster restart
現在切換到agent端同步該資源,如下:
puppet agent --test --server jijilu-test
通過上圖,我們可以看到agent端已經把master端的資源的同步到本地。
現在我們來檢視,agent端的/tmp目錄下是否有test.txt這個檔案。如下:
# cat /tmp/test.txt
通過上圖,我們可以看到agent端确實已經同步到master端的資源。/tmp目錄下确實有test.txt這個檔案,而且内容也确實和master端的一樣。
到此有關puppet3.7搭建與配置介紹完畢。
8 使用配置示例
8.1 檔案分發
描述:通過puppet服務端可以向被管理機(用戶端)上推送檔案,方法是使用file類型的source屬性
第一步:
# vi /etc/puppet/fileserver.conf
[files]
path /opt/
allow *
# 設定檔案推送到目錄
# 設定準許連接配接到服務端的主機位址
第二步:vi /etc/puppet/manifests/site.pp
File
{ "/opt/rlwrap-0.30.tar.gz":
source=> "puppet://$puppetserver/files/rlwrap-0.30.tar.gz",
}
# 設定伺服器上/opt目錄下的rlwrap-0.30.tar.gz為被傳送檔案
#此處“$puppetserver”是Puppet Server端的名稱,即hostname,在hosts檔案裡指定,生産環境下用内部的DNS上作解析
第三步:
在用戶端執行更新指令
# puppet agent --test --server jijilu-test
Info: Caching catalog for 430-test01
Info: Applying configuration version '1434090440'
Notice: /Stage[main]/Main/File[/opt/rlwrap-0.30.tar.gz]/ensure: defined content as '{md5}03d8bd4996945ea32d3c7d5dc38c956e'
Notice: Finished catalog run in 0.44 seconds
檢視/opt目錄下已經同步這個檔案:
# ll /opt/
total 184
drwxr-xr-x. 2 root root 4096 Jun 22 2012 rh
-rw-r--r--. 1 root root 184037 Jun 12 15:41 rlwrap-0.30.tar.gz
8.2 修改檔案屬性
描述:把/tmp/test.txt檔案的權限改為puppet使用者,并設定權限為666。
第一步:編輯服務端的site.pp
vi /etc/puppet/manifests/site.pp
file
{ "/tmp//tmp/test.txt ": owner => "puppet",
group => "puppet", mode => 666,
}
第二步:在用戶端執行指令
# puppet agent --test --server jijilu-test
Info: Caching catalog for 430-test01
Info: Applying configuration version '1434095252'
Notice: /Stage[main]/Main/File[/tmp/test.txt]/owner: owner changed 'root' to 'puppet'
Notice: /Stage[main]/Main/File[/tmp/test.txt]/group: group changed 'root' to 'puppet'
Notice: /Stage[main]/Main/File[/tmp/test.txt]/mode: mode changed '0644' to '0666'
Notice: Finished catalog run in 0.03 seconds
8.3 執行SHELL指令或shell腳本
描述:通過puppet分發執行shell腳本,在用戶端的opt目錄下建立一目錄shelldir。
第一步:編輯服務端的site.pp
vi /etc/puppet/manifests/site.pp
exec { "exec-mkdir": cwd => "/opt",
command => "sh /opt/lgh.sh",
user => "root",
path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
}
第二步:在用戶端編輯上一步command路徑中指定的shell腳本,例如
vi /opt/lgh.sh
#!/bin/bash
mkdir /opt/shelldir
第三步:在用戶端執行指令
# puppet agent --test --server jijilu-test
Info: Caching catalog for 430-test01
Info: Applying configuration version '1434095394'
Notice: /Stage[main]/Main/Exec[exec-mkdir]/returns: executed successfully
Notice: Finished catalog run in 0.21 seconds
在/opt目錄下檢視shelldir目錄有沒有建立。
8.4 cron計劃任務
描述:接上面的shell程式執行個體,在17:30執行/opt/lgh.sh。
第一步:編輯服務端的site.pp
vi /etc/puppet/manifests/site.pp
cron { "cron-shell":
command => "sh /opt/lgh.sh",
user => "root",
minute => "30",
hour => "17"
}
第二步:在用戶端執行指令
# puppet agent --test --server jijilu-test
Info: Caching catalog for 430-test01
Info: Applying configuration version '1434095710'
Notice: /Stage[main]/Main/Cron[cron-shell]/ensure: created
Notice: Finished catalog run in 0.12 seconds
然後在用戶端使用
# crontab -l檢視效果
# crontab -l
# HEADER: This file was autogenerated at Fri Jun 12 15:55:11 +0800 2015 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
* * * * * /usr/sbin/ntpdate 10.10.1.230 >/dev/null 2>&1
# Puppet Name: cron-shell
30 17 * * * sh /opt/lgh.sh
8.5 服務檢查及狀态修改
描述:可以通過puppet對一些服務進行檢查。puppet是通過service指令操作的。是以,隻能針對在/etc/init.d/目錄下的服務
執行個體:把用戶端的防火牆起來
第一步:編輯服務端的site.pp
vi /etc/puppet/manifests/site.pp
service
{ iptables:
ensure => "running",
}
第二步:在用戶端執行指令
# puppet agent --test --server jijilu-test
Info: Caching catalog for 430-test01
Info: Applying configuration version '1434095840'
Notice: /Stage[main]/Main/Service[iptables]/ensure: ensure changed 'stopped' to 'running'
Info: /Stage[main]/Main/Service[iptables]: Unscheduling refresh on Service[iptables]
Notice: Finished catalog run in 0.20 seconds
# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
轉載于:https://blog.51cto.com/zhengfei/1963077