Puppet 很早的時候看過一些,由於咱們當時已經使用CFEngine好久了,看了puppet以後,感受還不如CFEngine好用,因此就撂下一段時間沒管了,最近由於需求驅動打算把puppet系統的學一遍。 node
下面對puppet進行一個簡單的瞭解,puppet一般使用CS服務模型,服務端稱爲master,客戶端稱爲agent,maste在主機上以守護進程運行,它包含了環境所需的全部配置,agent經過SSL和master進行通信,agent既能夠以守護進程運行也能夠手動運行,默認狀況下,agent會每30分鐘和master通信一次,以檢查配置有沒有變化。 shell
puppet使用本身的語言來定義配置項,配置項在puppet中稱爲‘資源’。每一個資源都有一個‘類型’,代表被管理的是什麼樣的資源,軟件包?文件?等等。好包括一個‘標題’,它是資源的名稱。還包括一系列‘屬性‘,它用來講明資源的狀態,每個資源類型都有一系列能夠配置的屬性。資源類型和資源標題組合在一塊兒構成對這個資源的引用。puppet知道不一樣平臺、不一樣操做系統之間的差別,puppet會本身處理這些差別,當agent鏈接到master時,facter會返回agent的相關信息,master根據這些信息處理不一樣平臺的差別。 ubuntu
類型 { 標題: package { ssh: ruby
屬性 => 值, ensure => present, 服務器
} } ssh
puppet會分析你的配置,並計算如何在agent上運行它們,接着puppet會爲每個agent取得相應的資源,並將他們編譯成目錄,而後發送到各個主機,經過puppet agent來應用他們,最後將結果返回給master。 學習
實驗環境:三臺DELL服務器,一臺作服務端,兩臺作客戶端。 測試
系統用的ubuntu12.10 puppet版本是2.7 ui
安裝puppet spa
先在三臺服務器上安裝ruby環境
apt-get install ruby libshadow-ruby1.8安裝服務端
apt-get install puppet puppetmaster facter安裝客戶端
apt-get install puppet facter
由於puppet在運行時要使用DNS域名解析,可是實驗環境又沒有,只能作hosts了,在三臺測試機上作相同的hosts配置
10.1.6.228 Control 10.1.6.216 Compute-2 10.1.6.142 Compute-1
啓動master
service puppetmaster start啓動agent以前先修改/etc/default/puppet文件
#START=no START=yes啓動agent
service puppet start
因爲剛裝好的系統沒有tree命令和sshpass軟件,因此先拿這兩個練練手,給Compute-1安裝。
先讓Compute-1經過請求驗證
agent執行請求
puppet agent --server=Control --no-daemonize --verbose
puppet cert --listmaster上對agent進行簽名
puppet cert --sign Compute-1
兩分鐘後,在agent會看到以下
這表示已經認證經過了,接下來開始在master上編寫配置文件。
在/etc/puppet/manifests目錄建立site.pp和nodes.pp文件
#site.pp import 'nodes.pp' $pupperserver = 'Control' #nodes.pp node 'Compute-1' { include ssh include tree }
修改master的主配文件/etc/puppet/puppet.conf,在[main]中加入自動載入模塊路徑
modulepath=/etc/puppet/modules每一個模塊都須要一個特定的目錄結構和一個init.pp文件
1 建立tree模塊目錄結構
mkdir -p /etc/puppet/modules/tree/{files,manifests,templates} touch /etc/puppet/modules/tree/manifests/init.pp2 編寫init.pp文件
class tree { package { tree: ensure => present, } }tree模塊建立ok
建立ssh模塊
1 建立ssh模塊目錄結構
mkdir -p /etc/puppet/modules/ssh/{files,manifests,templates} touch /etc/puppet/modules/ssh/manifests/init.pp2 編寫init.pp文件
class ssh { package { ssh: ensure => present, } if $operatingsystem == "Ubuntu" { package { sshpass: ensure => present, require => Package["ssh"], } } file { "/tmp/test.py": owner => www-data, group => www-data, source => "puppet://Control/modules/ssh/tmp/test.py", } }3 建立file文件路徑
mkdir -p /etc/puppet/modules/ssh/files/tmp touch /etc/puppet/modules/ssh/files/tmp/test.py
ssh模塊建立ok
開始在Compute-1執行puppet agent
puppet agent --server=Control --verbose --onetime --no-daemonize
經檢查後確認sshpass和tree軟件包都已安裝,/tmp/test.py文件也已存在,以上配置文件的參數在之後的學習中解釋。