2017年1月10日 星期二

【DevOps】Puppet 自動化部署 – 設定第一個自動佈署工作(manifests)

在 Puppet 中必須撰寫 manifests 去佈署你的 Agent 伺服器,顧名思義 manifests 是每一個 node 的佈署清單,要做什麼事情都在 manifests 這邊撰寫,可以參考下圖架構關係

 

 



 

Master 和 Agent 之間取得佈署清單流程:

  1. Agent 傳送 catalog 內容包含 nodename (節點名稱) 和 facts (由 facter 所獲取的系統參數)

  2. Master 從 catalog 提供的資訊將 manifests 編譯重新打包 catalog

  3. 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)

1 則留言: