Puppet 4 自動化部署 – 利用 module 更簡化 manifest 的設定檔

2017-01-30 Puppet

之前介紹用 manifests 佈署,但是只是要安裝一個 nginx 就要寫那麼多行,如果是更複雜的設定那這個 node 的設定檔就會寫得很長,如此可見有 n 台 node 的時候這個 manifests 將會非常可觀,不過小弟說過 Puppet 幾乎無所不能的彈性,所以 …

 

Puppet 是一個有模組概念的工具,利用已經編寫好的 module 在 manifests 就不需要在打上落落長的設定檔,底下我會示範如何安裝 module、編寫模組 module,然後利用 module 來寫 manifests 看出差異

 

 

安裝 Puppet module 

如果你不想自己寫 module 的話,你可以直接用 Puppet module 直接安裝已經有人寫好的 module,以 apache 為例:

Step.1 先搜尋存在於 Puppet 有 apache 關鍵字的 module

 

沒意外你會搜出一堆跟山一樣的 apache,因為 Puppet 在國外是非常盛行的,早有一堆人寫好工具了。

 

要如何挑選 Module

挑選 Module 有幾個重點:

  • Puppet 支援版本:Puppet 3 和 4 的寫法有蠻多的差異,所以選擇之前記得看看是否支援你目前安裝的 Puppet 版本。
  • 支援的 node OS 版本。
  • 是否適合你需要的設定需求。

 

以官方的 puppetlabs-apache 為例,可以到 puppetforge 去查看:

Latest version is compatible with:

  • Puppet Enterprise 2016.4.x, 2016.2.x, 2016.1.x, 2015.3.x, 2015.2.x, 3.8.x, 3.7.x, 3.3.x, 3.2.x, 3.1.x
  • Puppet >= 3.0.0 < 5.0.0
  • RedHat, Ubuntu, Debian, SLES, Scientific, CentOS, OracleLinux

 

再來就是要查看 README 的設定方式,在 Puppet 裡面選擇 module 和你在挑選套件一樣,可以選擇擁有穩定支援的 puppetlabs 官方、也可以選擇其他第三方寫 module,最重要的是能符合你的需求,從中學習人家在 module 如何寫的好,並且建議要有辦法維護才是重點,如果你不想維護的話那就選定 puppetlabs,或是有商業支援的 example42 吧。

 

Step.2 安裝 puppetlabs module

用 puppet 安裝 module 的好處是他可以幫你把作者 module 需要的相依性工具安裝起來,如很常見的 puppetlabs-concatpuppetlabs-stdlib

 

在 Puppet 4 中 module 安裝的路徑位於 /etc/puppetlabs/code/environments/production/modules,再來直接看用 module 佈署 manifest

 

編寫 puppet module 

對於 Puppet module,小弟是比較喜歡自行撰寫,以 puppetlabs-apache 來說,裡面寫了太多我不需要的 OS type 和設定,先不論 puppetlabs-apache 的寫的有多好,若是遇到自己公司需要的特殊調整,要維護別人的 source code 我是比較不喜歡的,puppet module 的撰寫並不難,有一點點的程式 or script 基礎就能夠上手。

 

要寫 puppet module 自學可以先從下載別人的 module 來學習,在 github 也有很多的 open source 可以學習,但老話一句 “注意 Puppet 版本

 

Step.1 建立 apache module,參考以下檔案結構

 

Step.2 建立 manifests 的第一隻 init.pp

在 init.pp 中,把一些變數先在 init.pp 這邊做宣告,然後把參數都 ::apache::params 給了 params.pp 這邊做設定,然後把變數從 params 繼承過來;

include package 和 service 之後用 -> 來表示要執行的順序為先 package 後 service

還可以用 before, require, notify 等來表達順序和觸發服務重啟。

 

Step.4 宣告變數值的 params.pp

params 通常不做任何事情,這邊都是宣告變數值使用,這邊也常寫 case 來定義每個 OS 的特殊值。

 

Step.5 安裝的 package.pp

變數一樣從 params 繼承過來,直接用 resourcepackage 來寫。

 

Step.6 關於服務的 service.pp

在 params 宣告啟動的服務是 apache 並且為 running !!

這樣就寫完一個簡單的 apache 的安裝 module。

 

測試模組

Puppet 有提供 apply 來測試你的 module 是否能夠執行成功

出現 applied catalog .. 通常測試成功了!

 

 

用 module 佈署 manifest

寫完 module 後,要直接應用在 manifest 佈署 node

只要三行、三行、三行 !! 就完成佈署安裝 apache 了,當然如果你還需要加入設定的話,你的 module 就更不只只有寫這樣了 ..

 

小弟也有在寫 puppet 的 module,之後也都會 open source 出來,如果有興趣可以持續關注 …

 

 

 

參考資料:

Module fundamentals

Syntax: Relationship metaparameters

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱