內容簡介
Chef作為 DevOps運動的重要工具之一,用于快速實現云端自動化配置管理。全書共16章,
主題涉及Chef配置管理、Ruby及其語法、如何寫Chef recipe,如何用Test Kitchen管理沙盒測試環
境,如何用Chef客戶端管理單個節點,Chef cookbook如何寫和如何用,如何用Chef服務器管理
多個節點,搜索、數據包、角色、開發環境和測試等都有介紹。
本書是一本介紹Chef基礎架構自動化平臺的入門書,有比較強的實操性,很適合剛開始接觸
Chef、配置管理和自動化編程的讀者閱讀和參考。
前言
這是一本什么書
《學習Chef》是一本針對學習Chef基礎架構自動化平臺的入門書籍。這是一本面向
Chef、配置管理和自動化編程初學者的書籍。
通過使用Chef,你將可以對你的基礎架構內應用程序的配置、打包和部署以代碼的形式
表現出來。我們會展示為什么通過代碼來為你的基礎架構建模會很輕松、自然地帶來可
在任何時候重建整個基礎架構的便利,而手動運行命令則不能如此。一旦你理解了這個
用代碼來記錄和建模整個基礎架構的藍圖,就可以在幾分鐘或小時內建立或重建你的整
個應用基礎架構,而不是像手動進行那樣需要幾天、幾周或更長時間來完成。本書為入
門書籍,你并不需要擁有任何Chef、基礎架構自動化或編程的經驗。
首先,我們會展示如何在你的個人開發用電腦上配置Chef的開發環境。你將來會使用此
開發環境來撰寫和測試Chef代碼。俗話說“實踐出真知”,學寫代碼也如此。因此我們
會在本書中盡早引導你開始實踐寫代碼,并在每個新章節介紹一個新的概念和相應的
Chef工具來慢慢引導你前進。我們也會提供動手實例來幫助你加深對概念的理解,實踐
動手寫代碼。
在你讀完本書之后,你將對Chef和基礎架構自動化的基本概念有較好的理解。然后可
以繼續閱讀以下兩本對Chef更深入探討的書籍:Stephen Nelson-Smith寫的Test-Driven
Infrastructure with Chef(第2版)和Jon Cowie寫的Customizing Chef。
誰是此書的讀者群體
本書適合沒有Chef和基礎架構自動化經驗的系統管理員和軟件工程師。讀者需要相對熟
悉命令行的使用及能夠完成基本的系統管理任務。
本書中所有的動手實例都可以在Linux、Mac OS X或Windows上操作。必要的時候,我
們會提供分別針對每個平臺的講解。由于目前并沒有針對Chef的易用的集成開發環境
(IDE),和Chef交互的主要界面是命令行。幸運的是,除了最開始的安裝過程之外,
Chef的命令行界面在各個平臺上幾乎相同,這使我們能夠在本書覆蓋上述三個操作系統
下Chef的使用而不至于過度干擾使用其中任何一個操作系統的讀者。
你不需要擁有自動化編程經歷來閱讀此書,但你至少要寫過shell腳本、批處理文件或
PowerShell腳本。你應該在學習寫Chef代碼之前對寫任何一種腳本相對熟悉。
為什么都是廚房用語
在閱讀此書的時候,你也許會注意到Chef的發明者使用廚房用語來描述基礎架構自動化
工具和概念。Chef軟件公司(發明并維護Chef的公司)的工程師們在早期創建Chef的時
候發現類似菜譜或按照配方單做菜的說法是對一些諸如一個自動化腳本的集合或運行一
份永遠能一致重建一個基礎架構組件的代碼的抽象概念的很好的比喻。如此使用廚房用
語來做比喻,能讓初學者面對其他專業用語相對更容易接受基礎架構自動化的概念。除
此以外,從市場和品牌的角度也讓人更容易記得Chef。
本書采用的約定
本書采用以下排版約定。
斜體(italic)
用于表明新的術語、URL、電子郵件地址、文件名和文件擴展名。
等寬字體(Constant width)
用于程序清單,在正文段落中出現的程序元素(如變量或函數名)、數據庫、數據類
型、環境變量、語句和關鍵字也采用這樣的字體。
等寬粗體(Constant width bold)
用于顯示命令或應該由用戶鍵入的其他文本。
等寬斜體(Constant width italic)
表明這里的文本需要替換為用戶提供的值或其他由上下文確定的值。
提示:這個圖標表示小提示或建議。
說明:這個圖標表示通用的說明。
警告:這個圖標表示警告或需要注意。
示例代碼的使用
補充資料(案例代碼、練習等等) 可在此鏈接下載(英文):http://learningchef.com。
本書的目的是幫助讀者完成工作。通常情況下,可以在你的程序或文檔中使用本書中
給出的代碼。不必聯系我們獲得代碼使用授權,除非你需要使用大量的代碼。例如,
在寫程序的時候引用幾段代碼不需要向我們申請許可。但以光盤方式銷售或重新發行
O’Reilly書中的示例確需要獲得許可。引用本書或引用本書中的示例代碼來回答問題也
不需要申請許可。但是,如果要將本書中的大量范例代碼加入你的產品文檔,則需要申
請許可。
我們欣賞引用時注明出處的做法,但不強求。引用通常包括書名、作者、出版社和
ISBN,例如“Learning Chef by Mischa Taylor and Seth Vargo (O’Reilly). Copyright 2015
Mischa Taylor and Seth Vargo,978-1-491-94493-6”。
如果覺得使用示例代碼的情況不屬于前面列出的合理使用或許可范圍,請通過電子郵件
聯系我們,郵箱地址為permissions@oreilly.com。
Safari® Books Online
說明: Safari Books Online是一個按需定制的數字圖書館,以圖書和視頻的形式提供全球技術領域
和經管領域內知名作者的專業作品。
專業技術人員、軟件開發人員、網頁設計人員、商務人員和創意專家將Safari Books
Online用作自己開展研究、解決問題、學習和完成資格認證培訓的重要來源。
Safari Books Online為組織機構、政府部門、教育和個人提供廣泛、靈活的產品組合
和定價方式。在這里,訂閱者通過一個可以全文檢索的數據庫中就能夠訪問數千種圖
書、培訓視頻和正式出版之前的書稿,這些內容提供商有O’Reilly Media、Prentice Hall
Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit
Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、
IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、
McGraw-Hill、Jones & Bartlett、Course Technology及其他幾百家出版社。歡迎訪問
Safari Books Online,了解更多詳情。
聯系我們
對于本書,如果有任何意見或疑問,請通過以下地址聯系出版商:
美國:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中國:
北京市西城區西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術咨詢(北京)有限公司
本書也有相關的網頁,我們在上面列出了勘誤表、范例以及其他一些信息。網址如下:
http://shop.oreilly.com/product/9781491944936.do(英文版)。
對本書做出評論或者詢問技術問題,請發送E-mail至以下郵箱:bookquestions@oreilly.com。
如果希望獲得關于本書、會議、資源中心和O’Reilly的更多信息,請訪問以下網址:
http://www.oreilly.com。
致謝
來自Mischa:我要感謝所有對本書創作過程中給予反饋的人。感謝我的姐姐和Jane Maris
Sinagub博士給予我的精神支持和鼓勵。
我要真心地感謝所有對本書有所貢獻的人,包括但不限于: Alex Vi n y a r、Alyssa
Nabors、Anthony Stonebarger、Daniel DeLeo、Deluan Quintao、Eric Helgeson、Gene
Harris、Glenna Gorlick、Jason Steele、Jennifer Davis、Jo Rhett、John Keiser、Jennifer
Davis、John Fitzpatrick、Jon Cowie、Julian Dunn、Katherine Daniels、Kelly Setzer、
Kimberly Lanning、Landon Medlock、Lejo Varughese、Mandi Walls、Michael Goetz、
Michael Vitale、Nathen Harvey、Patricia Fernandes、Rhiannon Portwood、Sascha
Bates、Sean Carolan、Serdar Sutay、Shane Robinson、Steve Taylor和Thomas Petchel。
感謝Chef軟件公司把Chef基礎培訓資料授予Creative Commons Attribution Share Alike許
可。 本書中使用了其中的一些圖表和例子。同時感謝Courtney Nash、Brian Anderson和
所有O’Reilly同仁,你們的Atlas寫作系統使整個寫作過程變得愉快。
特別感謝:Mark Burgess做的理論開發讓Chef成為可能,John Keiser提供written in stone
示例,Jennifer Davis對如何組織本書最開始的章節提供了寶貴的反饋,John Fitzpatrick
測試了安裝的示例及提供反饋,Nathen Harvey幫助提供入門資料,Sascha Bates對于
Chef初學者需要從何學起提供了清晰的指導,Adam Jacob和Sean O'Meara給我的關于
Chef配置管理理論的指導,以及Steve Taylor和Mark Andersen給予機會在培訓中試用本
書的內容。
最后,我要感謝我的共同作者Seth Vargo所給予的信任,使我可以一起完成此書。
來自Seth:我想感謝讓本書成為可能的所有人。我尤其要感謝Nathen Harvey、Ramez
Mourad和Jake Vanderdray,因為他們向我介紹了Chef和整個Chef社區。沒有他們的鼓勵
和幫助,我不可能完成此書。
除了要感謝所有Mischa已經提到的人之外,我還要感謝我的團隊Seth Chisamore和
Yvonne Lam一直以來的支持和幫助;感謝我的室友和最好的朋友Joe Frick支持我整晚
都在電腦前敲鍵盤(而放棄其他娛樂活動); 感謝卡耐基·梅隆大學的Larry Heimann
教授和Jeria Quesenberry教授帶給我足以使我能成為一位教育者的經歷和機會; 感謝
Stafford Brunk迫我跳出固有思維;感謝我的父母Richard Stormer、Robbin Stormer、
Robert Vargo和Dara Vargo的大量支持和對我完成此書的持續提醒。
同時要感謝Courtney、Brian、Sonia和整個O’Reilly團隊把整個寫作過程變得完美。我
同時希望特別感謝我的共同作者Mischa Taylor之卓越貢獻和為完成本書而付出的辛勤努
力,沒有你,我不可能做到。
目錄
前言 .1
第1章 配置管理和Chef ...........7
什么是配置管理 ........7
為什么需要配置管理工具來實現IT自動化 ........8
Chef是什么 ...9
為什么企業需要Chef .9
接下來要做什么 ......12
第2章 配置Chef開發環境 ..... 15
安裝一個適合程序員使用的文本編輯器 ..........16
Chef開發工具 ..........17
在Linux下安裝Chef開發工具 ..18
在Windows下安裝Chef開發工具 .........32
小結 41
第3章 Ruby和Chef語法 ....... 43
Ruby概述 ....43
Ruby語法和案例......44
Chef語法和案例 ......54
第4章 如何寫第一個Chef配方單 ........... 61
創建代碼的目錄結構 ...........61
寫下第一個Chef配方單 .......62
驗證第一個Chef配方單 .......63
用配方單指定理想配置 .......65
卸載時,須明確指定不要做什么 ........69
小結 71
第5章 用Test Kitchen管理沙盒測試環境 73
安裝Vagrant和VirtualBox ....75
啟動自己的第一個虛擬機 ...79
YAML概覽 .84
用.kitchen.yml配置Test Kitchen .........86
小結 87
第6章 用Chef客戶端管理節點 .. 89
什么是節點 .89
在一個節點上創建沙盒環境 90
用Test Kitchen在節點上安裝Chef客戶端 .........91
第一次運行Chef客戶端 .......93
Chef客戶端的三種模式 .......95
命令行工具Ohai ......96
訪問節點信息 ..........98
小結 ..........100
第7章 撰寫和使用菜譜 ....... 103
你的第一個菜譜:每日消息 ..103
你的第一個菜譜:每日消息(使用Chef開發包) .....104
Cookbook_file資源簡介 ....106
你的第一個菜譜:每日消息(Chef客戶端) .107
Cookbook_file資源簡介 ....109
第一次運行Chef .... 110
驗證結果 .. 112
剖析Chef運行 ........ 113
菜譜結構 .. 116
必須了解的四個資源 ......... 119
Apache菜譜:手把手教你創建菜譜 .. 119
小結 ..........130
第8章 屬性 133
Motd-Attributes菜譜 ..........134
設定屬性 ..136
屬性優先級基礎 ....138
Include_Recipe ......139
屬性優先級 142
屬性排錯 ..143
小結 ..........146
第9章 用Chef服務器同時管理多個節點 147
手動安裝企業Chef .149
使用菜譜來自動化安裝企業Chef服務器 ........151
冪等性簡介 154
配置企業Chef服務器 .........159
測試連接 ..165
準備一個新節點 ....166
用Chef Solo配置Chef服務器 173
小結 ..........174
第10章 社區以及Chef-Client菜譜 ....... 175
使用社區菜譜 ........175
Chef-Client菜譜 .....177
Knife Cookbook Site插件 ..180
使用Knife Cookbook Site搜索社區菜譜 .........181
通過Knife Cookbook Site管理Chef服務器中的社區菜譜 ...........182
Chef-Client配方單 .184
配置Knife使用生產環境SSL設置 ......186
配置Chef-Client使用生產環境的SSL設置 ......188
小結 ..........196
第11章 Chef Zero .. 197
Test Kitchen和Chef Zero ...197
用Chef-Playground在宿主機器上運行Chef-Zero .......200
小結 ..........205
第12章 搜索 .......... 207
從命令行搜索 ........207
用Knife從命令行搜索 ........208
使用Test Kitchen從配方單中搜索 ..... 211
小結 ..........215
第13章 數據包 ....... 217
在配方單中使用數據包項目的數據創建本地用戶 .....222
驗證用戶 ..226
加密數據包 227
小結 ..........233
第14章 角色 .......... 235
創建一個網頁服務器角色 .236
屬性和角色 238
角色和搜索 239
角色菜譜 ..241
小結 ..........242
第15章 環境 .......... 243
創建一個開發環境 .244
屬性和環境 245
完整實例 ..247
小結 ..........258
第16章 測試 .......... 259
關于測試 ..259
重溫Apache菜譜 ....262
使用Serverspec進行自動化測試 ........266
使用Foodcritic進行自動化測試 .........283
使用ChefSpec進行自動化測試 ..........287
小結 ..........295
第17章 結語 .......... 297
詞匯表 ......298
附錄A 開源Chef服務器 ...... 301
附錄B 托管企業Chef .......... 323
learning_chef-table.indd 9 16/6/28 下午3:32