DevOps: 快速的佈署測試與上線環境
這篇文章主要說明如何可以快速的佈署開發所需的環境。系統上線之後的環境修改,如何可以更有效率的管理。
同時也介紹幾種業界使用的工具, Docker, Vagrant, Puppet , Chef, chocolately
Docker
Docker 解決什麼問題?
想像我們有網站伺服器、資料庫伺服器等。
為了兩個環境不互相影響,我們會用兩個 Virtual Machine 建立, VM 1 為網站伺服器,VM2 為資料庫伺服器。
另外,測試環境也同樣會這樣建立。兩個 Virtual Machine 建立, VM 1 為網站伺服器,VM2 為資料庫伺服器。
開發環境也是同樣這樣建立。兩個 Virtual Machine 建立, VM 1 為網站伺服器,VM2 為資料庫伺服器。
問題來了,測試、開發、上線環境都需要這樣建立,有沒有比較快的方式呢?
我們可能建立完一個環境之後,將該好幾G Mb檔案大小的 VM複製。複製完後,再對該系統環境做一些小修改。
這是目前使用 VM 的情境。
Docker 出現之後
就再也不用複製好幾 G 的檔案,同時在一個VM內,就可以執行container 1 網站伺服器,container 2 資料庫伺服器。
Container 1 與 Container 2相互獨立不影響,每一個 Container 檔案都很小。運作起來就好像獨立的 VM 一般。
由於檔案小,又可以保有獨立的環境運作,因此在DevOps環境佈署上,Docker 成為一個火紅的話題。
Puppet/Chef
另外有兩個工具,在 DevOps 佈署一定要認識
Puppet/Chef解決的問題
想像一個情境,當一位系統管理員需要將下列系統修改上線到十台機器(CentOS + Ubuntu),應該如何執行
- 新增使用者
- 新增 hosts
- 更新 apache 版本
現在的做法可能是:
- SSH 登入到每一台機器
- adduser or useradd 指令,取決於 centOS or Ubuntu 而定
- 新增使用者前,檢查使用者是否已經存在
- 編輯修改 hosts
- apt-get update or yum install,取決於 CentOS or Ubuntu而定
- 驗證並且記錄相關的修改至文件上
這個過程繁瑣,而且容易出錯。修改的相關紀錄也容易遺漏。
比較進階的系統管理者可能會使用 Shell script or Python 程式的方式處理,但是程式要額外處理 CentOS 與 Ubuntu 的差異性。
而且 Script 並不容易文件化相關系統的修改。
那麼,有沒有一種工具,是可以自動處理 OS 的差異,Script 語法簡潔,僅需要描述需要的結果,
並且該Script是可以直接用來當成系統修改的文件,進一步做到Configuration Management.
因此,Puppet or Chef 這兩個工具就這樣誕生了。
如圖,新增使用者為例子,傳統的方式(紅色)與使用puppet (綠色)的對照。
Puppet 僅需要很簡便的語法,就可以完成新增使用者。
Vagrant
Vagrant 解決什麼問題呢?
想像一個情境。當我們需要建立一個 Ubuntu 的VM的時候,我們會如何做?
- 到 http://virtualboxes.org/images/ 找到對應 ubuntu版本的 Image,
- 下載該 Image
- 利用 VirtualBox 開啟該 Image,
- 設定安裝該 Image
- 開機
這個過程需要很多人的介入與設定,有沒有command 的指令,讓我們只要下幾個指令就可以完成呢?
所以,Vagrant 就誕生。上述的動作。Vagrant 只要三個指令就可以完成
1.Vagrant box add precise64 http://files.vagrantup.com/precise32.box –force | 下載 VM Image |
2. Vagrant init | Import 至 VirtualBox環境初始值設定
Vagrantfile 記錄環境設定 |
3 Vagrant up | 開機 |
Vagrant 與Docker 最大不同的地方是:
Vagrant 所提供的環境是 “完整”的VM Image。
Docker 所提供的環境是 “最小化”的VM環境,Docker 的環境(稱為Container),執行在一個共用的VM環境中。
整個過程如下圖所示:
Vagrant + Puppet 的結合
Vagrant 與 puppet 的結合就加完善。
因為多半情況下,剛下載完的VM開機之後,我們會更新許多套件、安裝 MySQL or apache 等。
準備VM到開機可以透過 Vagrant 完成。
更新套件 or 安裝MySQL 應用程式等動作,就可以透過 puppet 完成。
小結
工具 | 解決的問題 | |
Docker | 讓一個VM可以同時獨立執行許多應用程式或是環境 (container)每個 container 可獨立執行,container 不像VM檔案那麼大,container不包含整個作業系統,
因此container檔案很小,可以更容易的佈署 |
|
Vagrant | 用指令模式就可以下載,並且設定VM Image 至 VirtualBox or VM Player。另外,透過 puppet 可以設定開機後需要執行的動作。 | |
Puppet or Chef | 簡化系統修改或是管理所需要的動作。例如:新增使用者、更改版本、安裝Apache等動作。由於該語言簡潔為描述性的語言,因此寫完的腳本可以直接當作是系統修改的文件。進一步做為Configuration Management的參考。 | |