如何快速的佈署開發環境 — Vagrant + Puppet/Chef

如何快速的佈署開發環境 —  Vagrant + Puppet/Chef

這篇文章主要說明雲端開發環境佈署所面臨的問題與挑戰,

針對這些問題與挑戰,說明幾個業界比較普遍使用的工具

虛擬環境佈署與設定Vagrant,

環境設定的 configuration Management (Puppet or Chef)

問題與挑戰

想想下列幾個情境,想想目前是如何處理?

“回報的問題在我的機器並沒有發生”

“新人報到,新機器需要許多開發環境設定與工具”

最簡單的方法,我們可能會用 Virtual Machine

直接將整個 Virtual Machine Image 拷貝就解決! 沒錯,這是一個方式。

問題是如果開發過程中有許多設定值的修改,或是額外的套件安裝,

那麼是不是就要定期的拷貝並且分享這個 Virtual Machine Image ,

通常來說這樣的VM Image 檔案動輒好幾 G,

而且,每次的 Image 變動,除非有另外的文件說明,

不然很難知道這些 Image 設定的差異到底是什麼.

所以, vagrant , puppet, chef 的誕生就是希望解決這些問題

Vagrant

首先先介紹 Vagrant。這是什麼呢?

簡單來說可以把這個工具想成是 VirtualBox 的 command line 模式。

例如,當我們需要一個虛擬機器的時候,比較 VirtualBox 與使用 Vagrant 的做法差異

VirtualBox Vagrant
OS Image 使用瀏覽器至特定網站,或是自行下載相關的 OS Image 執行 Vagrant  給予 OS Image BOX 網址參數,自動下載
匯入VirtualBox 接著用 VirtualBox 匯入該 OS Image (ova or .ios )等方式。 無須其他動作

上述步驟執行完之後,vagrant 自動會將該 OS image 匯入 VirtualBox 中。

開機 使用 VirtualBox的管理介面啟動 下指令完成開機

vagrant  up

開機完成後操作 直接在 VirtualBox  視窗 透過 SSH
開機後需要執行的 script 另外,自行設定撰寫 可利用 puppet or chef 在vagrant up開機時指定。

 

開機後..

當然,除了Vagrant 把 VirtualBox 的操作 command line 化之外,

也可以讓虛擬機器在啟動的時候,寫入需要的設定檔與安裝動作。

Puppet 與 Chef 就好比是Windows中的 Autoexec.bat。

可以在利用 vagrant 開機虛擬機器的時候設定與安裝許多所需要的環境。例如:

  • 新增使用者
  • 設定 ip address
  • 安裝 MySQL
  • 設定 mySQL.ini
  • 安裝 apache 並且設定 Apache configuration

開機後要完成的這些動作,專有名詞就稱為 “Provision”

目前提供這樣 provision 的工具比較普遍的就是 puppet 或是 chef

而透過 puppet 完成的 scripts 又稱為 “manifests”

如此一來,利用 Vagrant + puppet/Chef 之後,

未來要佈署環境,就可以自動的透過一些簡單的指令完成。

FAQ

Shell Script 差異處?

那使用 puppet or Chef 與 Linux Shell Script 有什麼不同? Shell script 一樣可以在開機後完成一些設定與應用程式的安裝。

  • puppet or chef 跨平台。CentOS 與 Ubuntu 都可以處理。舉個簡單例子,要啟動 apache service時,會因為 Linux 版本有所差異。”httpd” or “apache”。使用 puppet or chef 就無需理會這樣的差異。讓 puppet or chef 的 scripts 更容易被使用。
  • puppet 為更高階描述性的語言。僅描述所需要的環境與設定。例如: “確認 apache 已安裝”。相反的,Linux shell script 是程式語言,維護工作也會比較大。

 

如果我不需要佈署300台機器,使用 puppet 好處在哪?

如果我只有 3 台伺服器的設定,那麼使用 puppet 有什麼好處嗎?

因為 puppet script 就是系統修改的文件記錄。文件就是 puppet script。

因此,最大的好處是可以針對系統的Change list做版本控管,舉幾個情境說明。

現有方式

不使用 puppet

使用puppet
修改系統設定 每個動作必須確實透過文件記錄

須避免人為疏失

puppet script (manifest)就是文件

文件就是 puppet script

Change History

rollback

參考文件 puppet script
系統需要重建 參考之前的 SOP 一步一步重建 重新執行 puppet script 即可
工作模式 使用者 A改 IP=>更新文件。

使用者 B安裝 mySQL=>更新文件

文件很重要!

使用者A改IP =>透過 puppet 執行

使用者 B安裝 mySQL=>透過 puppet 執行

puppet script 就是系統修改文件記錄

Puppet 可以用在 Windows嗎?

可以的! puppet script 可以針對 windows檔案、服務等進行一些基本的操作。

但是,對於應用程式安裝的部分,筆者認為還是會取決於該應用程式是否有提供指令模式 slient installation。

Puppet 與 Chef 的差異?

這兩者都是提供同樣的功能。只是語法上有些不同。Puppet 與 Chef 都是提供 VM “provision”的功能。

“provision”就是告訴系統,開機完之後需要執行哪些動作。例如,新增使用者、增加工作排程、安裝Apache、安裝新的套件等。

有Puppet 與沒有 Puppet的差異 –  新增使用者為例

如果我們想要新增使用者 ‘Tony’ 在五台 Linux 機器上,要怎麼處理呢?

傳統需要利用CentOS “useradd”這個指令,Ubuntu 則是 “adduser”。並且登入五台。

透過 puppet 的script 只需要撰寫,下列的描述即可。

puppet 自然會去驗證該作業系統為何, Tony這個帳號是否存在,不存在的話新增。

如果是用 shell script 寫,就必須額外做這些判斷,程式相對比較複雜。

puppet script 就十分簡潔。只要描述需要什麼即可。

 User { ‘Tony’ :

ensure => present,

}

puppet AddUser

 

小結

這篇文章主要介紹環境佈署的時候會遭遇的困難。並且介紹幾個工具。

由於雲端環境與虛擬化伺服器使用的普遍,這樣的工具也被業界廣泛的使用。

Vagrant 主要提供 VirtualBox 一個 command line 的指令。

但是,最主要的功能還是在於 Vagrant 在啟動虛擬機器之後,可以直接執行 puppet or chef.

執行 puppet or chef 所要完成的動作不外乎是系統設定與環境安裝,讓該虛擬環境可以在很短的時間內就安裝設定完成。

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *