DevOps: 快速的佈署測試與上線環境 (Docker + Puppet + Vagrant)

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 版本

現在的做法可能是:

  1. SSH 登入到每一台機器
  2. adduser or useradd 指令,取決於 centOS or Ubuntu 而定
  3. 新增使用者前,檢查使用者是否已經存在
  4. 編輯修改 hosts
  5. apt-get update or yum install,取決於 CentOS or Ubuntu而定
  6. 驗證並且記錄相關的修改至文件上

這個過程繁瑣,而且容易出錯。修改的相關紀錄也容易遺漏。

比較進階的系統管理者可能會使用 Shell script or Python 程式的方式處理,但是程式要額外處理 CentOS 與 Ubuntu 的差異性。

而且 Script 並不容易文件化相關系統的修改。

那麼,有沒有一種工具,是可以自動處理 OS 的差異,Script 語法簡潔,僅需要描述需要的結果,

並且該Script是可以直接用來當成系統修改的文件,進一步做到Configuration Management.

因此,Puppet or Chef 這兩個工具就這樣誕生了。

如圖,新增使用者為例子,傳統的方式(紅色)與使用puppet (綠色)的對照。

Puppet 僅需要很簡便的語法,就可以完成新增使用者。

puppet compare

 

 

Vagrant

Vagrant 解決什麼問題呢?

想像一個情境。當我們需要建立一個 Ubuntu 的VM的時候,我們會如何做?

  1. 到 http://virtualboxes.org/images/ 找到對應 ubuntu版本的 Image,
  2. 下載該 Image
  3. 利用 VirtualBox 開啟該 Image,
  4. 設定安裝該 Image
  5. 開機

這個過程需要很多人的介入與設定,有沒有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的參考。

 

 

 

Leave a Reply

Your email address will not be published.