linux運維學習之自動化運維工具Puppet

  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>中有幾個是我們常用的選項,比如:

    apply:本地使用puppet,也就是單機模型的必需選項
    agent:我們下章的master/agent模型使用的必需選項
    cert:Puppet的證書相關,既然使用的https xmlrpc來通信,自帶了CA和cert
    describe:這個選項特別重要,資源,是我們在進行控制時可以使用的類似Ansible的一些模塊,我們可以使用puppet describe --help來查看都支持哪些資源
    device:網絡設備遠程管理
    doc:文檔相關
    facts:系統變量相關,Puppet還可以調用系統變量,不過不管是定義還是調用,都要使用$
    

  一般來說,我們接觸過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,使用這個看選項參數

  舉個例子,我們想安裝一個nginx服務,安裝後啓動,開機自啓動。
  首先我們先要定義一個以.pp結尾的文件,puppet的資源清單就是這麼定義的,比如爲install.pp,內容如下:

package{'nginx':
  name => "nginx",  #name指定安裝包爲nginx
  ensure => installed,  #安裝方式爲默認yum安裝
}

service{'nginx':
  ensure => running,  #服務名稱爲nginx的啓動
  enable => true,  #開機啓動爲true
}

  有個可能看出來了,這個格式是怎麼回事?爲什麼有的有name,有的沒有name,service沒有name會不會不知道啓動哪個服務,你這些參數怎麼查到的?

  首先格式:

type {'title':
  attribute1 => value1,
  atrribute2 => value2,
……
}
注意:type必須使用小寫字符;title是一個字符串,在同一類型中必須惟一,資源清單一般以.pp結尾;

  其次是name沒有定義的問題,資源屬性中有一個爲namever的屬性,當你不定義時,會自動引用title的名稱爲name。

  最後是關於這些資源的查詢與用法,比如我們先用的是package,所以我們可以這樣查詢,puppet describe package -m -s,查看簡短的介紹

linux運維學習之自動化運維工具Puppet

  屬性是可以了,那麼怎麼用呢?有什麼選項呢?我們可以使用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']

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