Chef Vagrant Kitchen多主機自動化部署

這次去參加Rails Pacific,在第一天的Wordshop發現一個好的東西 先介紹一下Vagrant

Vagrant

Vagrant是可以自動建制虛擬機的工具,夠過指令就可以在VisualBox上面自動置虛擬機器,只要指定你要的作業系統版本,下個指令就可以自動安裝

https://www.vagrantup.com/

chef

Chef可以將我們要部署機器的過程轉換成指令的方式(code),讓我們可以自動化的部署和管理我們的機器,讓我們的機器變成可以版本控制,可以測試,和可以重複使用我們先前建置的程式碼

https://downloads.getchef.com/chef-dk/mac

kitchen

可以整合Vagrant和chef http://kitchen.ci/

下面介紹kitchen的使用方法

kitchen init

接下來會產生.kitchen.yml的檔案如下:


driver: name: vagrant

provisioner: name: chef_solo

platforms: – name: ubuntu-14.04 – name: centos-6.4

suites: – name: default run_list: attributes: `\
可以在platforms上面指定我們要安裝的作業系統版本 例如上面我們指定要使用ubuntu-14.04和centos-6.4

先以打上 kitchen list 看看有那些作業系統版本可以安裝 螢幕快照 2014-10-01 下午5.32.13.png

根據我們之前的設定發現有ubuntu和centos可以安裝

接下來執行

kitchen create default-ubuntu-1404
kitchen create default-centos-64`

就會自動下載這兩個作業系統會透過Vagrant自動安裝到VisualBox上面 非常方便吧!

打開VisualBox,發現已經幫我們自動安裝好ubuntu和centos了 螢幕快照 2014-10-01 下午7.02.04.png

要登入ubuntu的話只要執行

kitchen login default-ubuntu-1404

或是

kitchen login ubuntu

就可以登入系統了

kitchen支援

kitchen driver discover

可以列出kitchen所支援的套件

螢幕快照 2014-10-01 下午5.57.53.png

可以看出kitchen還有支援azure,digitalocean,ec2,gce,backspace,openstack和docker

cookbook

接下來要介紹chef’s cookbook,可以把cookbook當作是我們安裝的這檯機器裡面需要什麼樣的原件

在原來的資料夾裡面新增

touch matadata.rb

內容填上 name "app-ok"
version "0.1.0"
再來是建立一個預設的recipe(食譜)

mkdir recipes touch recipes/default.rb

recipe寫法可以參考 http://docs.getchef.com/chef/dsl_recipe.html

chef的recipe可以使用的資源包含:

  1. directory,file,user.group – 創建使用者資料
  2. pakage – system pakage
  3. bash – 用來執行shell script
  4. cron – 更新crontab

更多recipe資源的資料可以參考 http://docs.getchef.com/chef/resources.html

例如:

在 recipes/default.rb 新增 package 'git'
package 'ruby'
然後在 .kitchen.yml 新增我們要跑的run list, 如下: `\


driver: name: vagrant

provisioner: name: chef_solo

platforms: – name: ubuntu-14.04 – name: centos-6.4

suites: – name: default run_list: app-ok::default attributes: `\ 然後執行

kitchen converge

就會自動安裝好git和ruby在ubuntu和centos上面了