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 讓你與其他人協作互動。
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.