自動化運維工具puppet(五)

一、Puppet的架構說明

1、Puppet組織結構

通常在安裝好Puppet之後的/etc/puppet錄下運tree 就能看到下的樹結構:

|-- auth.conf #ACL權限控制件
|-- fileserver.conf #件服務配置件
|-- manifests #節點存儲目錄( Puppet會先加載site.pp)
| `-- site.pp #定義Puppet變量和默認配置
|-- modules #模塊配置錄
| `-- nginx #以Nginx爲例
| |-- manifests
| | `-- init.pp #模塊主配置件, 定義類class相關信息。 讀取模塊後先讀取它
| `-- templates
| `-- nginx.conf.erb #模板配置件(erb爲主)
|-- namespaceauth.conf #命名空間配置件( 配置權限)
|-- puppet.conf #Puppet主配置件
`-- tagmail.conf #郵件報告配置件

2、Puppet基本結構

   我們先看下Puppet基本結構, 如下圖所。 Puppet模塊的配置主要是配置件、 應程序及系 統底層相關。 配置完成後發送給報告系統。

wKioL1YT3_2zEh6AAAG5e29Meec276.jpg

3、Puppet是如何作的

接着我們來看下Puppet是如何作的。 簡單來說分4步進。

1) 定義: 使Puppet特定的語定義基礎配置信息。 通常我們把這些信息寫在Modules中。

2) 模擬: 在配 置執之前檢測代碼。 並不真正執。 

3) 執: 按 1) 步定義的配置動部署。 檢測並記錄下所發變化的部分。 

4) 報告: 將期 待的變化與實際發 的變化及任何修改發送給報告系統。 整個作過程如下圖所。

wKiom1YT4AujzQRjAAC9ST71O0M153.jpg


4、Puppet數據 

1) Node節點將Facts和本機信息發送給Master。

2) Master告訴Note節點應該如何配置, 將這些信息寫catalog後傳給Node。

3) Node節點在本機進代碼解析驗證並執, 將結果反饋給Master。

4) Master通過API將數據發給分析具。 報告完全可以通過開放API或與其他系統集成。

整個數據流的向是基於ssl安全協議的, 如下圖所。

wKioL1YT4DaToox5AAFLiQWVBHg127.jpg


5、件結合

 那麼結合數據流, 這些 錄的關係是如何關聯起來的呢? 

1) Puppet通過編譯Manifest中的內容, 將編譯好的代碼存catelog。

2) 在執前先進代碼的驗證, 再執, 完成最開始所定義好的狀態。

代碼編譯過程如下圖所。

wKiom1YT4DvBGyrBAAGWzJ1oKeo098.jpg

6、詳細交互過程

   通過以上的學習, 相信家對Puppet的作原理有了基本的瞭解, 接下來我們將分析Puppet的 Agent 與Master 的詳細交互過程。 通過學習這部分內容, 家可加深對Puppet的理解, 以便在今後的使過程中遇到任何問題都能在腦呈現如下圖所的內容, 進能快速定位故障並解決它。 所有交互過程都是建在簽發證書的前提下執的。 

1) Puppet客戶端Agent將節點名與facts信息發送給Master。

2) Puppet服務端Master通過分類判斷請求的客戶端是誰, 它將要做什麼。 這個判斷是通過site.pp 包含的Node.pp配置件定義的。 

3) Puppet服務端Master將所需要的Class類信息進編譯後存catalog併發送給Puppet客戶端 Agent, 到此完成第次交互。

4) Puppet客戶端Agent對catalog進代碼驗證( 語法檢查及錯誤檢查) 並執。 主要是代碼的驗 證, 並將執過程的信息及結果寫志。

5) Puppet客戶端Agent最終達到最開始所定義的狀態, 並且將結果及任何執數據通過開放API的 形式發送給Puppet服務端Master。

wKioL1YT4GiAQyvlAAIEXNGXKBI650.jpg

7、安全與認證

   Puppet通信都採ssl安全加密協議, 以保障所有數據傳輸的安全性, 爲此我們不擔數據的安全 性問題。 通常我們使Puppet管理設備時也有可能建在公司內的基礎之上, 這樣就更加安全了。 當然, 如果你所在的公司沒有屬於的內也沒有關係。 Puppet所採的SSL安全加密協議已經爲我們解決了數據傳輸的安全問題。

  • Puppet Master在啓動後會給簽發證書和key。 我們可以在var/puppet/ssl( 3.1版本 在/var/lib/puppet/ssl/下) 錄下看得到它們。 

  • Puppet Agent 在運puppet apply --test時添加參數( --verbose) 可以在客戶端終端看到申請 證書的詳細過程。 

  • Puppet Master同樣也可以使puppet cert list查看到申請證書的客戶端列表。 使命令puppet cert signagent_name來簽發證書。

  • Puppet Agent就可以收到notice: Finished等相關字樣。 如果Master直不簽發證書, 客戶端會每2分鐘請求次。


二、Puppet核配置件詳解

1、主配置件puppet.conf

   主配置件puppet.conf主要於設置相關的參數, 認證件, 件系統配置件, 插件配置等。 Puppet版本不同, 配置選項命令式也有所不同。 Puppet2.6以前的命名式還以〔 puppetmaster〕 , 〔 puppetagent〕 爲主。 Puppet 2.6以後都以〔 main〕 , 〔 master〕 , 〔 agent〕 爲主。 爲了防讀者混 淆, 建議都採Puppet 2.6以上版本。 本書都以Puppet 2.6以上版本爲主。

先看如何成Puppet配置件puppet.conf:

puppetd --genconfig> /etc/puppet/puppet.conf
puppetmasterd--genconfig> /etc/puppet/puppet.conf

以上命令會覆蓋原件。

在本地查看配置參考冊:

puppet doc --reference configuration

如果不知道配置件在哪個錄下, 可以使以下命令查看:

puppet agent --configprint confdir

默認錄是/etc/puppet。

由於puppet.conf配置件內容較多, 下筆者將列舉核配置、 常配置選項( 不區分Master與Agent) :

[main] #通配置選項
vardir = /var/lib/puppet
confdir = /etc/puppet
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
fileserverconfig = /etc/puppet/fileserver.conf
manifestdir = /etc/puppet/manifests #可不指定默認讀取此錄
manifest = /etc/puppet/manifests/site.pp #主機件默認讀取
modulepath = /etc/puppet/modules:/usr/share/puppet/modules
authconfig = /etc/puppet/namespaceauth.conf
#如果開啓Listen爲true需要配置此件
pluginsync = true #插件同步配置對facter定義有效
reportdir = /var/lib/puppet/reports
#報告件成目錄, 目錄以主機名命令開頭
reports = log, foreman #報告的式與類型
# environment = production 運環境配置, 默認爲產環境
[agent] #客戶端配置選項
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
runinterval = 1800 #客戶端默認探測時間, 可按需求修改
listen = true #是否監聽, 執puppet kick時需要配置
report = true #客戶端的報告系統配置, 不同於Master
#此項的主要的是將報告發送Master, 主要於客戶端puppet.conf配置
report_port = 8140 #監聽端, 如果服務器配置有防牆, 需開放此端
report_server = server #默認不填, 此時以下的$server變量值爲準
server = server.domain.com
[master] #服務端配置選項
certname = server.domain.com #也可以不定義, 以主機名爲準
reports = store, http, tagmail, log
reporturl = http://server.domain.com:3000/reports/upload
#報告發送地址, 可配置在dashboard或foreman配置件中
autosign = /etc/puppet/autosign.conf #動認證配置件
  • PuppetMaster服務器端主配置件: puppet.conf。 

[main] #全局配置
#vardir來存放緩存數據、 配置、 客戶端傳回的報告及件備份
vardir = /var/lib/puppet
# Puppet志件配置錄默認爲'$vardir/log'
logdir = /var/log/puppet
#PID件目錄, 默認爲'$vardir/run'
rundir = /var/run/puppet
#SSL簽發認證件目錄, 默認爲 '$confdir/ssl'
ssldir = $vardir/ssl
[master] #服務器端配置
pluginsync = true #開啓插件同步
reports = log, foreman #報告發送log和foreman
environment = production #指定運環境爲產環境
certname = server.domain.com #配置主機名爲server.domain.com
  • Puppet Agent客戶端主配置件: puppet.conf 

[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
pluginsync = true
[agent] #客戶端配置
#關聯與檢索配置件錄, 默認爲 '$confdir/classes.txt', 也可以使 (--loadclasses)參數指定 
classfile = $vardir/classes.txt
#本地緩存配置錄, 默認爲'$confdir/localconfig'
localconfig = $vardir/localconfig
runinterval = 1800 #檢測時1800秒, 30分鐘
listen = true #監聽進程
report = true #發送報告
server = puppet.domain.com #指定Master地址

2、主機配置件site.pp

   site.pp的的主要是告訴Puppet去哪尋找並載所有主機相關的配置, 默認存放 在/etc/puppet/manifests錄中。 通常我們在會此件中定義些全局變量。 

注意 :“清單”( Manifests) 是Puppet中的術語, 指的是包含配置信息的件。 清單件的後綴是.pp。 

成Puppet主機配置件site.pp:

puppet apply --genmanifest> /etc/puppet/manifests/site.pp

通常不使以上命令成的site.pp配置, 主要填寫的內容爲:

# site.pp - all agent configure
Exec { path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
#設置環境變量
$fileserver = "puppet.domain.com" #指定全局fileserver變量
$ntpserver = "ntp.domain.com" #指定ntpserver變量
#建議讀者動配置以上內容
Package { provider => "yum" } #指定軟件包的安裝法爲yum
#可以直接寫節點配置件, 在所有Agent上創建其內容爲"Hello World"的
#/tmp/temp1.txt件
#node default {
# file { "/tmp/temp1.txt": content => "Hello World!"; }
# }
import "modules.pp" #加載模塊配置件, 可以不配置
import "nodes/*.pp" #加載主機信息, 可以使通配符, 也可以定義多組錄
import "test.domain.com.pp" #加載測試主機

3、認證與安全配置件

   Namespaceauth.conf件的的是: 可以指定允許誰訪問每個名稱空間。 要創建 Namespaceauth.conf件必須添加對每個名稱空間的訪問權限。 以下就是針對不同名稱空間的權限配置, 通常不做的變動。 

以下是配置的內容:

[fileserver]
allow *.domain.com
[puppetmaster]
allow *.domain.com
[puppetrunner]
allow culain.domain.com
[puppetbucket]
allow *.domain.com
[puppetreports]
allow *.domain.com
[resource]
allow server.domain.com

注意 :當puppet.conf配置Listen=true時必須要配置此件, 否則Puppet啓動時會報出"Will not start without authorization file /etc/puppet/namespaceauth.conf"的錯誤提。 

auth.conf認證配置件是Puppet中的ACL, 主要應於Puppet's REST API。 例如客戶端請求

https://yourpuppetmaster:8140/{environment}/{resource}/{key}時, 服務器可以根據資源定義訪問權限。

其配置參考如下:

# 以auth.conf爲例
path /
auth any
environment override
allow magpie.example.com
path /certificate_status
auth any
environment production
allow magpie.example.com
path /facts
method save
auth any
allow magpie.example.com
path /facts
auth yes
method find, search
allow magpie.example.com, dashboard.example.com

其語法規則如下:

path [~] {/path/to/resource|regex} #目錄配置
[environment {list of environments}] #環境配置
[method {list of methods}] #法命令配置
[auth[enthicated] {yes|no|on|off|any}] #授權配置
[allow {hostname|certname|*}] #允許配置
我們再來看auth.conf的配置件:
path /facts
auth yes
method find, search
allow magpie.example.com, dashboard.example.com
#現在就不難理解這段配置的意思了。 允許主機名爲"magpie.example.com"和"dashboard.example.comd的兩臺客戶端在facts目錄進find和search操作

4、客戶端動認證配置

   autosign.conf允許配置件中的客戶端動進簽名驗證, 省去交互的過程。 這對動化配置 來說省去了很多作。 

配置件參考如下:

#允許單客戶端或者域名匹配, 主機名匹配
rebuilt.example.com
*.scratch.example.com
*.local

   同時Puppet客戶端的證書也可以採提前在master上成的法, 將成的證書件拷貝到客戶端 對應錄下實現動認證的配置。 

動成證書命令爲:

puppet cert generate client.domain.com

這時將在本地成client.domain.com客戶端證書件, 件及其所在錄爲:

/var/lib/puppet/ssl/private_keys/client.domain.com.pem
/var/lib/puppet/ssl/certs/client.domain.com.pem
/var/lib/puppet/ssl/certs/ca.pem

將這些件複製到客戶端相同的錄下即可。

5、報告系統配置

   tagmail.conf 將配置的報告內容按要求發送給誰。 要使此項功能, 需要在Puppet Master端配置: reports =tagmail, 需要在Puppet Agent端配置report =true, 同時也可以配置smtp由誰來發送。 在Puppet Master端配置reportform爲smtpserver or sendmail即可。 默認由本機sendmail發送。 

all: [email protected]
webserver, !mailserver: [email protected]
emerg, crit: [email protected][email protected][email protected]

#志的級別可以是: debug、 info、 notice、 warning、 err、 alert、 emerg、 crit或者 verbose 也可以是個類的名字class names, 個標籤名tags

6、件系統配置件

   fi leserver.conf是項安全配置, 結合puppet.confauth.conf起使。 針對那個錄, 哪些客戶端 允許訪問, 哪些禁訪問。 fileserver.conf的使常靈活, 後續將在第16章節來講解它的優化及配置。 

# 配置法
[mount_point]
path /path/to/files
allow *.example.com
deny *.wireless.example.com
#舉例: 允許通配主機爲"*.domain.com"的主機獲取/etc/puppet/files目錄下 的件。 以下爲其配置法
[files]
path /etc/puppet/files
allow *.domain.com


三、Puppet運環境

   在運維管理, 每個公司都有着的上線流程, 通常都較嚴格。 但般都分爲三個步驟: 開 發環境, 測試環境, 產環境。 如果沒有經過嚴格的測試就將應或代碼程序部署到產上是常可怕的。 這也是筆者爲什麼單獨拿章來講解Puppet運環境的原因。 由於Puppet持配置多種環境, 並可以針對系統應進有效的測試, 因此使Puppet可以很好地解決測試程序部署在產環境所帶來的未知問題。 

運維上線的3種環境如下圖所:

wKiom1YT4GyjOGfMAABbWKArsBs867.jpg

1、服務器端配置

   配置多種環境需要修改Puppet Master服務器端的Puppet.conf, 增加環境配置{ environment} 選項 並向環境指定特別的變量配置, 同時可以根據需要決定是否修改auth.conf 配置。 

   我們可以修改puppet.conf增加三種環境的配置, 同時也可以只指定種環境。 在配置環境時我們 還可以配置site.pp的位置、 模塊錄及件錄, 以區分不同的環境應。  Puppet默認以production產環境運。 

在如下步驟中, 我們將創建3個環境: development、 testing和production。

1) 修改puppet.conf, 增加3種配置環境, 指定不同的模塊錄及件系統錄。

$ sudo vim /etc/puppet/puppet.conf
[master]
environment = development,testing,production
[development]
manifest = /etc/puppet/manifests/development/site.pp #指定site.pp位置
modulepath = /etc/puppet/modules/development#指定模塊錄
fileserverconfig = /etc/puppet/fileserver.conf.development
[testing]
manifest = /etc/puppet/manifests/testing/site.pp
modulepath = /etc/puppet/modules/testing
fileserverconfig= /etc/puppet/fileserver.conf.testing
[production]
manifest = /etc/puppet/manifests/production/site.pp
modulepath = /etc/puppet/modules/production
fileserverconfig = /etc/puppet/fileserver.conf.production

   如以上代碼所, 在Puppet配置中每個環境的配置段都定義了3個配置項: manifest、 modulepath和 fileserverconfig。modulepath定義了每個環境將要應的模塊的路徑, manifest定義了應到對應環境的site.pp件的路徑, fileserverconfig定義了應到對應環境時fileserver件的路徑。 這3個選項就可以讓每個環境具有不同的模塊與配置。 

2) 如果需要爲每個環境設置不同的訪問權限, 則需要修改Auth.conf配置件。 如下代碼所, 配 置testing環境針對主機localhost與agent.example.com具有的所有權限。 

path /
auth any
environment testing#針對不同環境的權限配置
allow localhost, agent.example.com

3) 修改配置後需要重啓Puppet服務以啓新的配置。 部分系統使init腳本來完成這任務, 代 碼如下: 

/etc/init.d/puppetmaster restart

2、客戶端配置

   在Puppet Master服務器配置好環境後, 我們可以在客戶端進指定。 通常有兩種做法, 是修改 Puppet配置件, 是在運時增加環境參數。 如果希望此節點長期以某種環境運, 建議將環境配置寫配置件。 我們來看下這兩種配置法。 

1) 修改Puppet agent配置件puppet.conf, 指定運環境爲測試環境。 代碼如下:

$ sudo vim /etc/puppet/puppet.conf
[agent]
environment = testing

2) 在命令使運環境, 使environment命令參數即可。 代碼如下:

$ puppet agent --test --noop --environment [development,testing, production]

3、如何運環境配置

   我們在Puppet中已經配置好了各環境, 要如何運呢? 這個時候就需要強的版本控制軟件。 通過 版本控制軟件配置不同的分來實現不同環境配置的管理, 客戶端採在命令下應多種環境的法 執。本章以Git操作創建Testing分的式講解Puppet多環境的應法。 實現原理如下圖所。

wKioL1YT4JWxnT_EAAC3RbwKtxU311.jpg

4、術語回顧

  • 資源( Resource) : 是Puppet最基礎的元素。 資源可以是件、 服務、 軟件包、 定義腳本等。 我們編寫的程序也可以稱爲資源。 資源多了就需要將其組織起來, 這就要使Puppet, 因爲其主要的特就是處理資源與資源之間的依賴與關係。

  • 屬性( Attribute) : 資源需要定義相關的屬性值, 否則毫意義。 通過屬性的定義才知道資源在做什麼。

  • 類( Class) : 將多個資源組織起來進重新定義。 在其他程序語中我們會將多個資源定義成個類或封裝成個函數, 在Puppet中也是採同樣的思想, 只不過是採Class和Define的法來進組織的。

  • 模塊( Module) : 多個類的合集。 Puppet與其他程序語類似, 在類較多時, 通常會將這些類封裝成個模塊, 因此在Puppet中同樣也有模塊的概念。

  • 變量( Variabls) : Puppet與其他程序語類似, 同樣持變量。 通常我們使Facter收集本地信息並以變量形式傳遞Puppet, 或者定義變量。

  • 參數( Parameter) : 又稱參變量, 通常我們把傳遞給變量的數值稱爲參數, 傳遞的過程稱爲傳參。

  • 節點( Node) : Puppet每個客戶端, 即主機( Host) 。 主機可以歸併主機組( Hostgroup) 。 Puppet在管理主機時要求與計算機配置的主機名( hostname) 保持致, 並建議採DNS來管理主機名, 否則需要維護量的host指定主機名與主機IP地址。


四、Puppet命令詳解

   Puppet提供量的命令來幫助我們進有效的管理。 Puppet中所有命令都可以使puppet help命令 查看。 先來看下Puppet都有哪些命令, 以及每個命令的功能是什麼。

puppet help
agent #客戶端進程, 負責從Master獲取數據
apply #運本地 manifests
ca #本地證書的管理
catalog #編譯、 保存、 查看Puppet代碼, 或轉換成Catalogs
cert #證書頒發, 於簽署證書
certificate #提供訪問CA證書的管理
certificate_request #管理證書請求
certificate_revocation_list #管理撤銷證書的列表
config #配置選項
describe #資源幫助
device #管理遠程絡設備
doc #成Puppet檔
facts #系統信息檢查
file #在filebucket中檢索和存儲件
filebucket #在filebucket中檢索和存儲件
help #查看幫助
inspect #發送report報告
instrumentation_data #管理監聽的數據
instrumentation_listener #管理監聽狀態
instrumentation_probe #管理監聽探測
key #創建、 保存、 刪除證書密鑰
kick #遠程控制Agent, 遠程觸發puppet agent命令
man #查看冊
master #服務端進程
module #從Puppet Forge創建、 安裝、 查詢模塊
node #管理節點
parser #解析器管理
plugin #插件管理
queue #隊列進程
report #創建、 查看報告
resource #查看資源幫助
resource_type #查看類、 默認資源類型與節點信息
secret_agent #模擬Agent
status #查看Puppet 狀態

   我們常的Puppet命令不是很多, 按照功能的不同可以分爲如下圖所的類。 本節將對實 命令進介紹說明, 並對常命令進深詳細講解。

wKiom1YT4JWyodmLAADg4WoGbXY101.jpg

1、puppet master

   puppet master默認是以Ruby內建的WEBRick在後臺運的守護進程, 同樣也可以採最常的 Web服務器Apache和Nginx替換WEBRick以提升性能。 在多數的安裝過程中, 你會安裝臺Master主服務器來管理所有Agent客戶端。 puppet master的主要功能是編譯配置件、 件、 模板、 節點的定義插件。 我們可以使puppet help master查看相應的幫助信息。 

puppet master法爲:

puppet master [-D|--daemonize|--no-daemonize] [-d|--debug] [-h|--help]
[-l|--logdest <file>|console|syslog] [-v|--verbose] [-V|--version]
[--compile <node-name>]
puppet master命令的參數詳解如下:
* --daemonize: #-D發送到後臺守護進程, 默認選項
* --no-daemonize: #不發送到後臺守護進程
* --debug: #-d啓完整的調試模式
* --help: #-h查看幫助
* --logdest: #-l志送髮式, 默認採syslog配置
* --verbose: #-v顯詳細信息
* --version: #-V打印Puppet版本
* --compile: #以JSON的式輸出編譯的catalog

提 :在命令中, -d是--debug簡寫。 

通常我們還會使--genconfig輸出默認配置件, 代碼如下:

$ sudo puppet master --genconfig>puppet.conf

puppet master命令最常見的法就是讓Puppet以不啓後臺守護進程的式運, 於調試Puppet

代碼, 法如下:

$ sudo puppet master --no-daemonize --verbose

2、puppet agent

   puppet agent在每個節點以守護進程式運, 通常每30分鐘向Master請求次, 以確認新的信息 並詢問是否有變更, 然後負責運編譯好的Catalog代碼。 如果在節點配置件( puppet.conf) 中定義了Pluginsync, Agent同樣負責拉取定義Facts並處理。 Puppet Agent還可以以Cron式執。

puppet agent命令法爲:
puppet agent [--certname <name>] [-D|--daemonize|--no-daemonize]
[-d|--debug] [--detailed-exitcodes] [--digest <digest>] [--disable [message]] [--enable]
[--fingerprint] [-h|--help] [-l|--logdest syslog|<file>|console]
[--no-client] [--noop] [-o|--onetime] [-t|--test]
[-v|--verbose] [-V|--version] [-w|--waitforcert <seconds>]
puppet agent命令的參數詳解如下:
* --certname: #指定客戶端certname( 唯ID) , 通常以域名命名
* --daemonize: #-D發送到後臺守護進程, 默認選項
* --no-daemonize: #不發送到後臺守護進程
* --debug: #-d啓完整的調試模式
* --detailed-exitcodes: #提供詳細的退出代碼
* --digest: #指定證書指紋算法, 默認爲MD5算法
* --disable: #禁, 禁puppet agent在此節點執
* --enable: #啓, 重新允許執puppet agent
* --fingerprint: #顯當前證書的指紋
* --logdest: #-l 志送髮式, 默認採syslog配置
* --no-client: #不要創建客戶端配置件, 當listen=true時纔有意義
* --noop: #使'noop'模式, Puppet運Catelog, 但不執配置
* --onetime: #-o 運次, 配合--no-daemonize使
* --serve: #啓動另類型的服務
* --test: #-t 測試, 常選擇
* --verbose: #-v 顯詳細信息
* --version: #-V 打印Puppet版本
* --waitforcert: #-w 當Master未簽署此節點證書時, puppet agent將等待簽署, 並默認每2分鐘重新連接Master以確認是否完成簽署

   puppet agent最常見的法是使"--noop"參數, 此法可以於檢測Puppet配置, 運catalog但不 執配置, 相當於試運模式。

3、puppet apply

   puppet apply是Puppet運命令, 主要在檢測manifests時或在沒有絡連接的情況下使。 不同於 puppet agent, puppet apply在運時不會連接Master。 

puppet apply的法爲:
puppet apply [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
[-e|--execute] [--detailed-exitcodes] [-l|--logdest <file>] [--noop][--catalog <catalog>] <file>
puppet apply命令參數詳解如下:
* --debug: #啓完整的調試模式
* --detailed-exitcodes: #提供詳細的退出代碼
* --help: #幫助
* --loadclasses: #加載任何已保存類
* --logdest: #志送髮式, 默認採syslog配置
* --noop: #使'noop'模式, Puppet運Catalog, 但Catalog並不效
* --execute: #執命令中指定的Puppet代碼
* --verbose: #顯詳細信息
* --catalog: #運puppet master採--compile輸出JSON代碼

puppet apply的法較多, 常見的法可參考如下實例。

實例 將輸出信息輸出到志件, 代碼如下:

$ puppet apply -l /tmp/init.log init.pp
$ more /tmp/init.log
Wed Nov 14 08:29:18 +0800 2012 Puppet (notice): Finished catalog run in 0.04 seconds

實例 在客戶端運命令, 加載個類。 我們先創建個test類, 這個類的作是在/tmp中創建 個內容爲"Hello World!"的主機名件。 配置代碼如下: 

$ sudo mkdir -p /etc/puppet/modules/test/manifests
$ vim /etc/puppet/modules/test/manifests/init.pp
class test {
file { "/tmp/$hostname.txt": content => "Hello World!"; }
}

執命令後可以看到如下效果:

$ sudo puppet apply -e "include test" --noop
/Stage[main]/Test/File[/tmp/puppet.txt]/ensure: current_value absent, should be file (noop)
Class[Test]: Would have triggered 'refresh' from 1 events
Stage[main]: Would have triggered 'refresh' from 1 events
Finished catalog run in 0.04 seconds

去掉noop參數後可以看到執成功, 件已經被創建, 具體如下:

$ more /tmp/puppet.txt
Hello World!

實例三 使apply運master編譯好的JSON件。 需要在服務端使compile參數成JSON件 再傳客戶端執。 

1) 先修改test類的內容, 將"Hello World!"修改爲"Testing JSON!":

$ vim /etc/puppet/modules/test/manifests/init.pp
class test {
file { "/tmp/$hostname.txt": content => "Testing JSON!"; }
}

2) 使compile參數成JSON件, 代碼如下:

$ puppet master --compile agent.domain.com>agent.domain.com.json

3) 將成的agent.domain.com.json件複製到客戶端, 使apply命令運:

$ puppet apply --catalog agent.domain.com.json
/Stage[main]/Test/File[/tmp/agent.txt]/content: content changed '{md5}ed076287532e86365e841e92bfc50d8c' to '{md5}e93a2e71f065e0326a393570ec246d4e'
Finished catalog run in 0.05 seconds

通過以上三個步驟後可以看到件發了變化, 在前代碼中也看到件的MD5發了改變, 具 體如下: 

$ more /tmp/agent.txt
Testing JSON!

   如果需要在manifests中需要調客戶端的fact時, 要在客戶端先執次puppet命令, 將所有的 Fact信息上傳Master並緩存, puppet master --compile host會使本地緩存的Fact信息。 成的Catalog靜態JSON件不再發變化, 且fact變量也是固定的, 不再隨客戶端的環境變化變化。

4、puppet cert

puppet cert於管理本地證書、 查看未簽名證書、 簽署證書、 廢除證書、 清除證書。
puppet cert <action> [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
[--digest <digest>] [<host>]
puppet cert最常的操作有:
* clean #清除, 於清除證書
* fingerprint #打印證書指紋
* generate #成客戶端證書
* list #查看認證客戶列表
* print #打印主機證書的全信息
* revoke #廢除已認證的主機
* sign #簽署認證
* verify #驗證本地指定的認證
puppet cert命令參數詳解如下:
* --all #執所有操作, 包括'sign','clean','list','fingerprint'
* --digest #設置證書指紋加密的式, 取決於openssl版本
* --debug #啓完整的調試模式
* --help #查看幫助
* --verbose #顯詳細信息
* --version #顯版本

puppet cert最常見法是查看未簽署的客戶端和頒發認證。

1) 查看請求認證的客戶端列表, 代碼如下:

$ sudo puppet cert list
agent.domain.com

2) 爲主機agent.domain.com簽署認證, 代碼如下:

$ sudo puppet cert sign agent.domain.com

3) 列出所有簽名和未簽名的證書, 代碼如下:

$ sudo puppet cert list --all
+ agent.example.com #符號+表已經簽署過認證
agent2.example.com

4) 給所有未簽署簽名認證的請求頒發認證, 值得注意的是這不需要再指定節點名, 代碼如下:

$ sudo puppet cert sign --all

5) 查看所有已簽署認證的客戶端列表, 代碼如下:

$ puppet cert list --all

5、puppet kick

   puppet kick於連接到Agent客戶端讓它主動運puppet agent--test命令, 類似於主動觸發配置。 puppet kick的最常見法是指定個類主機或組主機。 也可以通過"LDAP"查找所有匹配的主機, 然後連接到每個主機, 並觸發所有對象使指定的標記執puppet命令。 當然我們也可以指定匹配主機只 運帶"tag"標記的類 。 

要使puppet kick需要做如下配置:

1) 設置Puppet Agent所有節點的/etc/puppet/puppet.conf在〔 agent〕 字段增加"listen=true"。

2) 設置Puppet Agent所有節點防牆, 允許8139端。

3) 設置Puppet Agent所有節點/etc/puppet/auth.conf插如下配置:

# Allow puppet kick access
path /run
method save
auth any
allow puppet-master.domain.com

puppet kick命令的使法如下:

puppet kick [-a|--all] [-c|--class <class>] [-d|--debug] [-f|--foreground]
[-h|--help] [--host <host>] [--no-fqdn] [--ignoreschedules]
[-t|--tag <tag>] [--test] [-p|--ping] <host> [<host> […]]
puppet kick命令的參數詳解如下:
* --all: #指定所有主機, 常選項
* --class: #指定類
* --debug: #啓完整的調試模式
* --foreground: #直到主機運時才返回, 默認是false
* --help: #查看幫助
* --host: #指定主機, 常選項
* --ignoreschedules: #客戶端忽略計劃任務, 但會影響效率, 默認爲false 此參數前存在失效的Bug 
* --parallel: #併發連接, 提效率, 但會導致Master壓增
* --tag: #指定標籤
* --test: #測試
* --ping: #對目標主機做ICMP echo, 跳過不響應的主機

注意 :all/class/test參數需要在LDAP環境下纔可以使。 

   在緊急情況下我們需要指定客戶端或所有客戶端主動向Master請求更新。 爲了避免量客戶端同時 發起請求, 可以分批指定, 或者只指定特定的資源進更新。 

1) 指定主機名進puppet kick操作, 代碼如下:

$ sudo puppet kick -p 10 host1 host2

2) 指定所有主機名進puppet kick操作, 代碼如下:

$ sudo puppet kick -p 10 --all

3) 指定標籤時要使tag參數, 且需要在配置資源的時候配置tags參數, 代碼如下:

$ vim init.pp
class test {
file { "/tmp/$hostname.txt":
content => "Testing JSON!",
tags => "tagkick",
}
}

在執puppet kick時使如下命令:

$ sudo puppet kick -p 10 –t tagkick host1 host2

注意 :tag參數與test不能同時使。

6、puppet describe

puppet describe提供Puppet資源的類型、 providers和metaparameters的幫助。

puppet describe命令使法如下:

puppet describe [-h|--help] [-s|--short] [-p|--providers] [-l|--list] [-m|--meta
puppet describe命令參數詳解如下:
* --help: #查看幫助
* --providers: #列出類型詳細說明
* --list: #列出所有類型
* --meta: #列出所有metaparameters
* --short: #僅列出參數, 不顯細節

puppet describe命令的常見法如下。

1) 查看所有的資源類型, 代碼如下:

$ puppet describe ––list

2) 列出File資源的providers, 代碼如下:

$ puppet describe file ––providers

3) 要顯戶資源的信息不是詳細信息, 可使如下命令:

$ puppet describe user -s -m

7、puppet resource

puppet resource於提供個簡單的具, 將系統資源轉換成Puppet代碼。

puppet resource命令的法如下:

puppet resource [-h|--help] [-d|--debug] [-v|--verbose] [-e|--edit]
[-H|--host <host>] [-p|--param <parameter>] [-t|--types] <type>
[<name>] [<attribute>=<value> …]
puppet resource命令參數詳解如下:
* --debug: #啓完整的調試模式
* --edit: #將查詢結果寫件
* --host: #指定要查詢的主機
* --help: #顯幫助
* --param: #添加更多參數進查詢
* --types: #顯所有類型信息
* --verbose: #打印詳細信息

puppet resource命令的常見法如下:

1) 採puppet resource將本地戶liuyu的相關信息轉換成Puppet代碼, 代碼如下:

$ sudo puppet resource user liuyu
user { 'liuyu':
ensure => 'present',
gid => '527',
home => '/usr/home/liuyu',
password => '*',
password_max_age => '99999',
password_min_age => '0',
shell => '/bin/bash',
uid => '527',
}

2) 將本地Puppet安裝包信息轉換成Puppet代碼, 代碼如下:

$ sudo puppet resource package puppet
package { 'puppet':
ensure => '3.0.1-1.el6',
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章