讓 Puppet 進 Git 版控

為什麼要用 Git

Puppet 有個很大的特點是 Infrastructure as code,既然是 Code 就能進版控管理,這樣你所有的 Config 就不是單純的寫設定檔,你還能享有所有程式開發在 Git 的好處,例如:

  • 修改歷程被記錄,不用擔心找不到修改設定的人是誰。
  • 可被測試,既然是 Code 就可以進 CI 跑 Test case。
  • 可同時管理多環境,因為你可以有 branch 的概念。
  • 不用人人都是 admin,你可以用 Pull request 的管理方法來限制某些人才能佈署環境
  • 環境一致性,你可以輕易的複製環境,deploy 到另一個環境。
  • 不用擔心多台主機 sync 的問題,因為你的 CI / CD 可以做到 Rolling update 或 Blue/Green deployment。

怎麼用 Git 管理 Puppet

阿不是就把 Puppet 設定檔都丟上 Git 嗎 ?

事實是這樣沒錯 .. XDD

會寫 Puppet 是一個重點,另一個重點是怎麼讓你的 Project 讓人看的懂,通常一間好的公司 Infrastructure 的管理者至少會 N+1 人,這時候你就會面臨到多人管理的議題,一個好的 skeleton 和 flow 都會增加維護者的工作效率。

在現行的 Puppet 版本(5)中,最好的入口點是 /etc/puppetlabs/code,這一層位置包含了 environments、modules 和 hiera-data,當然你也可以規劃好自己的架構,然後 CD 才把檔案丟到相對的位置。

如果還是對怎麼用 Git 管理 Puppet 沒有頭緒的話,可以參考我正在使用的 Puppet skeleton。

puppet
├── .fixtures.yml     # Test case dependencies module.
├── .librarian        # librarian config.
├── Gemfile           # Puppet dependencies packages.
├── Makefile          # Build automating ci, install, module .. etc.
├── Puppetfile        # Puppet dependencies modules.
├── README.md         # readme file.
├── Rakefile          # Build automating tasks.
├── appspec.yml       # Codedeploy deploy manage.
├── autosign.conf     # Puppet trust domain.
├── data              # Global Hiera data dir.
├── environments      # dev/staging/production node manage.
├── hiera.yaml        # Global Hiera root file.
├── packer            # Packer manage.
├── private           # Private module.
├── profile           # Profile moudle.
├── role              # Role module (include multiple profile)
├── scripts           # Codedeploy script
└── spec              # Test case.

在這個 skeleton 下有幾個管理重點:

  • Role and Profile pattern
  • Private module 另外拉到第一層
  • 用 Puppetfile 管理 modules
  • environments 管理所有環境 (dev、staging、production)
  • Test case。
  • Packer 用於 deploy 其他環境,如 Docker、AWS。
  • make 自動化工具

這個 skeleton 會按照你的需求跟環境有所增長,不一定適合所有人,但可以給還沒有讓 Puppet 進 Git 管理的人一個方向。

results matching ""

    No results matching ""