# 一些背景
### Chef是什么?
Automation for Web-Scale IT.Chef delivers fast, scalable, flexible IT automation.
簡單來說Chef就是IT自動化工具。它對服務器的環境(軟件、依賴庫、網絡等)進行抽象,以特有的配置語法(Ruby語言,Chef是由Ruby開發的)對其進行管理,可以自動的進行服務器環境的初始化工作。
### 為什么會有Chef
想象一下,當我們需要搭建一個站點,需要安裝服務器, 一臺服務器沒啥,花點時間就能裝好。隨著網站的發展,需要多加幾臺服務器, 也沒啥,再多花點時間,但是,要做集群的話,要保證幾臺服務器的環境是完全一樣的,所以很多人用shell寫了自動安裝腳本。但是寫過shell腳本的人,都知道有多痛苦了。 隨著站點的發展,可能要維護上百臺服務器,這個時候如果還用shell腳本、人工安裝的方式初始化服務器環境,那工作量簡直不可想象。
在Chef出現之前,已經有CFEngine、Puppet等自動化運維等工具了。從2008年開始,互聯網時代逐漸進入了云時代,運維工程師面臨的問題是,從以前的幾臺、幾百臺服務器發展到幾千、幾萬、幾十萬臺服務器,所以,使用一個可預見、可測試的基礎架構是非常重要的,而CFengine、Puppet提供的方案,卻是缺乏這種可預見性并且也無法完全測試。
而Chef將用戶寫的系統管理腳本稱作“菜譜”(recipe),允許用戶定義服務器角色(例如網頁服務器、數據庫服務器),用戶可以把“菜譜”按需加入角色,Chef以用戶規定的順序來執行菜譜中定義的任務,默認情況下,如果出現問題導致任務無法完成,Chef報錯并退出運行。這樣工程師可以更容易地了解到腳本有錯誤,加以修改、測試,節省生產時間,提高效率 (然而也可以配置Chef作為一個daemon來運行,來達到convergence的效果)。
此外,Chef使用基于Ruby的DSL(Domain Specific Language)來作為“菜譜”腳本中的語言,對于更加傾向于運維的工程師,這種DSL通俗易懂,而對于更加傾向于軟件開發的工程師,則可以使用Ruby來擴展“菜譜”的功能。同時,Chef可以作為程序庫被包含在軟件項目中,真正鼓勵和讓開發者能在設計、開發階段考慮部屬、擴張(scale)、維護和計劃容量(capacity planning),并將系統配置級別的代碼融入內部網絡服務的代碼中。
通過Chef的“菜譜”,工程師們可以將整個的基礎架構用簡單易懂的代碼來記錄和保存。如果使用的數據中心或間接的云服務商數據中心在霎那間被龍卷風毀滅,Chef可以迅速通過這些“菜譜”和角色來讓你建立一個全新的基礎架構,最小化生產環境下的服務停頓時間。
并且,使用Chef配置的基礎架構是100%可預見、可測試的。
打個比方,Chef就像一個制作玩具的工廠,它可以把一些原材料做成漂亮的玩具, 它有一些模板,你把原材料放進去,選擇一個模板(比如怪物史萊克),它就會制造出這個玩具 服務器的配置也是這樣,一臺還沒有配置的服務器,你給它指定一個模板(role或recipe), Chef就會把它配置成你想要的線上服務器
這個只是Chef的一方面,因為可以安裝好系統后執行一個腳本也達到同樣的目的,Chef還有另一方面 是腳本達不到的,那就是Chef對經過的配置的服務器有遠程控制的能力,它可以隨時對系統進行進一步的配置或修改 就像前面的玩具工廠可以隨時改變它的玩具的顏色,大小(好像現實中不太可能) 你也可以通過手動的方式達到目的, 但是當服務器比較多的時候,可能手動的方法就不是那么歡樂了。Chef提供了更方便統一的方法。
- 序
- Chapter 1: 初識Chef
- 一些背景
- Chef vs Puppet
- Chapter 2: Chef應用
- Chef架構
- Chef能做什么
- Chef組件
- Chef環境安裝
- chef-server
- opscode-chef
- chef-solo
- Chef實戰
- 實戰前的必修理論
- 使用Chef
- Chapter 3: Ruby基礎
- 對象與方法
- 標識符
- 類與模塊
- 數據類型
- 真與假
- 控制語句
- 代碼塊
- Chapter 4: Chef源碼架構
- Rubygems與gem
- bundler
- Chef源碼組織
- Chapter 5: Rails基礎
- Rails是什么
- MVC架構
- Restful
- Rails組成與項目結構
- Chapter 6: Chef Server WebUI
- Chef Server Webui組織結構
- Chef Rest API
- 參考