Master 和 Agent 之間取得佈署清單流程:
- Agent 傳送 catalog 內容包含 nodename (節點名稱) 和 facts (由 facter 所獲取的系統參數)
- Master 從 catalog 提供的資訊將 manifests 編譯重新打包 catalog。
- Agent 收到 catalog 後執行佈署工作,並且回應 Report 給 Master 執行結果。
Master 和 Agent 提交的關係有很多種:
- 由 Master 設定的 puppet kick 觸發更新
- 由 Agent 設定的 runinterval 觸發更新
- MCollective 的 MQ (Message Queue) 更新
- etc
實際運用關係到你的環境有多少台 Server 需要佈署,據說用 1 台Puppet + Hadoop,能夠支撐近千台的 Agent !?,不過如果你的環境有這麼多的 Agent 節點,那你的 Puppet 如果只使用一台心臟也太大顆。
在 manifests 佈署計畫裡,僅需要在 Master 上撰寫,當 manifests 寫好後並不需要重啟 Puppet service 立即生效,這時候 Puppet environment 就相對重要了。
目標:
- agent01.puppet.com 這台伺服器必須安裝 chrony 校時。
- agent02.puppet.com 這台伺服器必須安裝 httpd。
建立第一個 manifests - chrony
在建立 manifests 前或許你可以先查看有哪些 resource 能夠使用,在這邊簡單利用 package + service 去安裝 chrony
node 'agent01.puppet.com' {
package { 'chrony':
name => 'chrony'
ensure => present,
}
service { 'chrony':
name => 'chrony'
ensure => running,
enable => true,
}
}
- node 定義為你的 agent 目標
- package 安裝套件
- 第一個 package title: 定義 package 名稱,通常設定為 package name,但實際安裝 package name 建議使用 name 定義。
- name:則為你要安裝的套件名稱,如果你有多 OS 就一定要用 name 去設定 package name,否則預設將採用 package title name。
- ensure:進行的動作為 present (同 installed )
- service 同 package,但 ensure 狀態為 running,因為我們希望安裝好後為服務是啟動的。
在這邊我範例寫的是 Ubuntu 的 chrony,如果你是 CentOS/Redhat 系列,service 請用 "chronyd"
**如果有多 OS 環境小弟建議可以採用 case or if 判斷式去寫你的 manifests/modules。
第二個 manifests 範例 - apache
在第二個範例除了安裝 apache 以外還要用 file 建立一個測試檔案
node 'agent02.puppet.com' {
package { 'apache':
name => 'apache2'
ensure => present,
} ->
file { ['/var/www/html','/var/www/html/agent02.puppet.com']:
ensure => 'directory',
owner => 'www-data',
group => 'www-data',
mode => '700',
} ->
file { '/var/www/html/agent02.puppet.com/index.html':
content => "This puppet testing from $fqdn",
owner => 'www-data',
group => 'www-data',
mode => '0400',
} ->
service { 'apache':
name => 'apache2'
ensure => running,
enable => true,
}
}
在這邊使用了 -> 這個符號代表執行的順序是:
package -> 建立目錄 agent02.puppet.com -> 建立 index.html 檔案 -> 啟動 apache 服務。
file 則是可以拿來建立"目錄"或"檔案",當中目錄又可以指定多個目錄來表達你想要的目錄結構。
$fqdn 則是用了從 agent 那邊 facter 來的 facts 資訊。
Puppet agnet 驗證
寫好 manifests 之後就要讓 agent 更新,由於是在測試階段,所以直接使用 puppet agent -t 進行測試更新
# in agent
$ puppet agent -t
..
..
Notice: Applied catalog in 0.07 seconds
**如果僅是想測試 manifests 而不想執行佈署可以使用 --noop
最後你收到的訊息應該是 Applied catalog,表示執行完成,可以檢測安裝的 apache or chrony,如果出現錯誤代表 manifests 寫的有誤。
參考資料:
Image from people.cs.ksu.edu
Orignal From: 【DevOps】Puppet 自動化部署 – 設定第一個自動佈署工作(manifests)
Nice informative post...Thanks for sharing.. DevOps Online Training in Hyderabad
回覆刪除