Chef 自動化部署工具

Chef Workflow

Chef 是一套透過 Ruby 程式語言撰寫幫助你自動化部署 Server Infrastructure 的 DevOps 工具,讓你可以把 Infrastructure as code,實現 Infrastructure 可維護、可版本控制、可測試化。

使用情境,舉例來說:

一般如果你需要部署一個 Express+ Mongdb 的後端 Server,你可能需要

  1. ssh 到你的遠端 Server
  2. 更新套件資訊
  3. 安裝 NodeJS
  4. 安裝 Mongodb
  5. 安裝 npm 相依套件
  6. git clone ..等

有了 Chef,你可以把上述流程自動化,Chef 顧名思義就像一位大廚一樣,提供了以下的功能:

  1. 讓你透過 Ruby 以 Chef Code 的規範撰寫你需要的流程 / 套件 (recipe、cookbooks)。
  2. 可以在 Chef Supermarket 尋找與直接套用別人已經寫好的一些食譜。
  3. 版本控制你寫好的食譜。
  4. 在本地端虛擬環境(kitchen)測試你所定義的所有套件或流程是否能順利執行與安裝。
  5. 直接透過 Chef 遠端部署管理(knife)多台伺服器。

可能會有點抽象,可以實際來看看 Chef 怎麼使用。

以下是官方教學中的一些範例。

首先,如果要自動化部署 apache,以 Chef 的方式就可以撰寫像以下的檔案(recipe)告訴 Chef 你想要做什麼:

# 每日更新將 apt 到最新版本
apt_update 'Update the apt cache daily' do
frequency 86_400
action :periodic
end
# 安裝 apache2
package 'apache2'
# 啟用 apache2
service 'apache2' do
supports :status => true
action [:enable, :start]
end
# 將檔案 'index.html.erb' 覆蓋至 '/var/www/html/index.html'
template '/var/www/html/index.html' do
source 'index.html.erb'
end

而當你有多個 task 需要自動化的時候,你可以透過 chef generate 指令產生一個目錄 cookbooks,裡面可以有多個像上面 recipes 的檔案(安裝 node.js、mongdb…等),模組化整個 Chef code,並提供資料分離、test、spec…功能。

然後你可以透過 knife 與遠端互動,上傳你的 cookbook 到 Chef Server 或自己架的 Server。

knife cookbook upload learn_chef_apache2

或是直接透過 knife 指令部署到遠端的 Server。

knife bootstrap ADDRESS — ssh-user USER — sudo — identity-file IDENTITY_FILE — node-name node1-ubuntu — run-list ‘recipe[learn_chef_apache2]’

而在部署之前,當然也最好先確定一切都沒問題,Chef 提供 kitchen 讓你在本地端建立 VM 直接測試。

kitchen 用一份 yml 檔案來管理測試環境設定。

---
driver:
name: vagrant

provisioner:
name: chef_zero

platforms:
- name: ubuntu-14.04

suites:
- name: default
run_list:
- recipe[motd_ubuntu::default]
attributes:

最後,Chef 也有許多開放的食譜在 Supermarket 上讓你不用自己撰寫那麼多 Chef Code,直接套用與設定所需要的功能即可。

depends 'apt', '~> 4.0'       # 提供自動更新 apt 的設定
depends 'firewall', '~> 2.4' # 可以提供防火牆設定
depends 'httpd', '~> 0.4' # 提供 apache 安裝與設定
depends 'mysql', '~> 7.0' # 提供 mysql 安裝與使用的設定

如果有興趣實際看看官方 Learn Chef 的教學吧:

https://learn.chef.io/

— —

P.S:

  1. Chef 與 AWS 高度整合,還有許多其他可以用的功能。
  2. 以上介紹免費版本常用的功能,另外 Chef 付費版本有提供 Chef Automate 讓你與其他人協作互動。