Puppet是集中配置管理系統,能夠說使咱們Ansible的升級版,當咱們的服務器集羣過於大時,Ansible就可能力不從心了,咱們知道Ansible是基於ssh的鏈接,而咱們的Puppet則是經過https xmlrpc連接,安全係數明顯上了一個層次。
Puppet的工做模式,是經過對Puppetmasterd進行更改,client每隔半個小時取一次數據,無論對數據的處理成功與否,都要返回一個報告,通知到master,Puppet有兩種工做模型,一種是單機模型,一種是master/agent模型,看名字都知道一種是在本地本身玩本身的,一種是管理從的,咱們今天就先來玩一下單機模型。
單機模型甚至都不用開啓Puppet服務,直接可使用命令,固然了命令的格式很長,可是Puppet提供很好的幫助文檔來幫助咱們對該命令的使用,咱們可使用Puppet help查看具體語法和相關選項。
語法:puppet <subcommand> [options] <action> [options]
<subcommand>中有幾個是咱們經常使用的選項,好比:linux
apply:本地使用puppet,也就是單機模型的必需選項
agent:咱們下章的master/agent模型使用的必需選項
cert:Puppet的證書相關,既然使用的https xmlrpc來通訊,自帶了CA和cert
describe:這個選項特別重要,資源,是咱們在進行控制時可使用的相似Ansible的一些模塊,咱們可使用puppet describe --help來查看都支持哪些資源
device:網絡設備遠程管理
doc:文檔相關
facts:系統變量相關,Puppet還能夠調用系統變量,不過無論是定義仍是調用,都要使用$
nginx
通常來講,咱們接觸過Ansible以後,再來瞅Puppet,會簡單的多,咱們Puppet也是編寫一些相似劇本同樣的資源清單,來調用資源進行管理,那麼咱們可用的資源都有什麼呢?
咱們使用puppet describe --list查看全部的清單列表,咱們介紹幾種經常使用的:安全
cron:計劃任務相關的,相似於Ansible的cron模塊
exec:執行外部命令
file:文件相關
group:用戶組相關
host:主機相關
mount:掛載相關
notify:通知機制
package:安裝包相關,相似於Ansible的yum,不過package能夠指定以什麼方式安裝
service:服務相關的
yumrepo:yum倉庫先關
...
服務器
有不少的資源,咱們何時用,何時查,不過死記硬背,固然咱們知道了資源名,怎麼用啊,我具體分爲三步:網絡
1 puppet describe --list:查看都有什麼資源
2 puppet describe file -m -s:查看file的簡短的providers和元參數,使用這個查出選項
3 puppet describe file -p:查看file的一些providers,使用這個看選項參數app
舉個例子,咱們想安裝一個nginx服務,安裝後啓動,開機自啓動。
首先咱們先要定義一個以.pp結尾的文件,puppet的資源清單就是這麼定義的,好比爲install.pp,內容以下:運維
package{'nginx':
name => "nginx", #name指定安裝包爲nginx
ensure => installed, #安裝方式爲默認yum安裝
}sshservice{'nginx':
ensure => running, #服務名稱爲nginx的啓動
enable => true, #開機啓動爲true
}ide
有個可能看出來了,這個格式是怎麼回事?爲何有的有name,有的沒有name,service沒有name會不會不知道啓動哪一個服務,你這些參數怎麼查到的?工具
首先格式:
type {'title':
attribute1 => value1,
atrribute2 => value2,
……
}
注意:type必須使用小寫字符;title是一個字符串,在同一類型中必須唯一,資源清單通常以.pp結尾;
其次是name沒有定義的問題,資源屬性中有一個爲namever的屬性,當你不定義時,會自動引用title的名稱爲name。
最後是關於這些資源的查詢與用法,好比咱們先用的是package,因此咱們能夠這樣查詢,puppet describe package -m -s,查看簡短的介紹
屬性是能夠了,那麼怎麼用呢?有什麼選項呢?咱們可使用puppet describe package -p查看具體屬性怎麼用,那麼既然package能夠查的到那咱們的service也是妥妥的可使用了。
咱們配置好以後,可使用puppet apply -v --noop install.pp來試運行一下,若是沒有報錯,去掉--noop再運行,能夠提升正確率哦,其中有些經常使用選項,我來和你們介紹一下:
-v:詳細輸出
-d:debug模式,輸出極爲詳細
--noop:調試模式,試運行,能夠提早排錯
-l PATH:輸出結果到指定文件中
資源間有的還存在一些依賴關係,好比咱們直接啓動服務,而服務沒有安裝完成怎麼辦?因此資源間的次序可使用一些屬性before、require、notify和subscribe來定義,咱們有多種方法,定義這種依賴關係:
1 在package下加入一行before => Service['nginx'] 2 在service下加入一行require => Package['nginx'], 3 package的}後面加入->也能夠實現一依賴關係 4 在因此資源定義的下面,本身一行 Package['nginx'] -> Service['nginx']