Puppet實戰
Puppet實戰
作者:劉 宇出版社:機械工業出版社
出版年:2013-12
頁數:376
定價:69.00元
ISBN:9787111445180
http://wenku.it168.com/d_001331585.shtml
內容簡介:
Puppet領域的經典之作,資深運維專家多年一線經驗結晶,51CTO技術社群強烈推薦,新浪研發中心平臺架構部高階總監童劍、資深運維專家田逸、中國最大開源社群ChinaUnix創始人之一南非蜘蛛、OpenStack基金會董事程輝等業界資深專家聯袂推薦。本書詳細講解了Puppet的功能和使用方法,深入剖析了Puppet的工作原理,系統總結了Puppet的使用技巧,包含大量來自一線的實戰案例和最佳實踐。
全書一共20章,共分為四部分:準備篇(第1~4章)介紹了Puppet用途、組織結構、工作原理、核心配置檔案、各種平臺下的安裝與配置,以及它的執行環境,是使用Puppet前必須做好的準備工作;基礎篇(第5~10章)詳細講解了Puppet的理論知識和功能使用,Puppet的語法與命令、資源、模組、類、模板、節點管理,以及Facter、陣列、函式、變數和標籤;實戰篇(第11~13章)透過幾個經典案例,包括大規模Nginx叢集的部署方案、分散式監控系統部署方案、OpenStack快速部署方案等,使讀者能快速將Puppet運用到實踐中;進階篇(第14~20章)綜合講解了Puppet的擴充套件模式、版本控制、報告系統、控制檯、擴充套件工具及MCollective,讓讀者瞭解一個完整的Puppet生產流程。
作者簡介:
劉宇 資深運維工程師和系統工程師,曾任職於新浪,擔任高階技術工程師,現就職於百度,負責系統運維相關的工作,是國內Puppet領域的先驅之一。精通分散式自動化管理平臺和分散式監控平臺的管理,對影片點播、直播架構、檔案加速、排程系統和資料分析都有非常深入的研究,實踐經驗極為豐富。在國內率先使用Puppet進行大規模叢集管理,並撰寫了Puppet配置手冊在網路上分享。活躍於InfoQ和51CTO等技術社群,曾被評為InfoQ金牌講師和51CTO部落格之星。
前 言
為什麼要寫這本書
子曰:“工欲善其事,必先利其器。”作為系統管理員,最應該具備的一種技能就是利用各種優秀開源軟體快速完成自己的工作,讓自己變得更輕鬆。但並不是所有的軟體都適合你,你需要根據自己的環境及需求進行選擇。
Puppet就是系統管理員的一把利器。幾年前我開始學習Puppet的時候,不少朋友都問我:為什麼選擇Puppet?它有什麼優勢?當時pssh、CFEngine等都已經很成熟,並且也能幫助系統管理員有效地解決繁重的工作。為什麼還要選擇Puppet?“需求決定產品”。Luke Kanies(Puppet作者,以下簡稱Luke)曾經全面參與了重寫CFEngine的解析器和開發ISConf3的工作,但是他還是覺得現有的工具已經無法滿足他的工作需求,需要自己創造一個全新的工具,才能徹底使他的工作更加高效、便捷。 這便是Puppet誕生的背景和原因。
Puppet注重設計簡潔、先框架後應用兩個中心思想。這也造就了Puppet今日的成功,它的“三板斧”——資源、類、模板,可以輕鬆地幫我們完成複雜的業務邏輯關係管理。同時,Puppet並不具備執行功能,因此在某些程度上存在短板,(比如exec是為解決特定系統管理員蹩腳的執行命令需求而開發的,但Luke一再強調不建議使用。)
或許更多的系統管理員抱怨Puppet沒有命令執行功能。Luke早就考慮到了這一點,並提前收購了MCollective,採用訊息型匯流排的中介軟體來實現命令執行、系統管理、Puppet客戶端管理等,以彌補了Puppet在這方面的不足,可見Puppetlabs非常有遠見。伴隨著Puppet各子功能及擴充套件工具的遍地開花,Puppet的商業化及各種開源社群的支援,Puppet可謂是蒸蒸日上。
在新興的同類工具中,我的另一個關注點是SaltStack,它天生具備命令執行和配置管理兩大核心功能,相比Puppet來說有一定優勢,但SaltStack的成長還需要我們耐心等待。Puppet打敗1993年“出生”的老牌系統配置管理工具CFEngine就花費了近7年時間。而Puppet與Salt Stack真正鹿死誰手,我們拭目以待。相信以後的市場競爭會越來越激烈。
為了讓更多的系統管理員瞭解並深入學習Puppet,可以利用Puppet的整合方案解決系統管理複雜而繁重的任務,而不是盲目地尋找問題,我覺得有必要結合自己在學習Puppet過程中走過的彎路將工作中的經驗和總結以實戰形式呈現給大家。我也希望更多的人能加入開源社群,擁抱開源,擁抱變化,透過學習Puppet,體會到與開源愛好者交流的樂趣,而不是為了工具選型而猶豫甚至爭鬥。這也是我寫作本書的初衷。
本書技術深入而閱讀簡單,涉及系統管理員所需的很多方面的基礎知識,同時透過穿插各種例項及程式碼詳解以便使讀者能夠快速掌握Puppet,並迅速將其運用到工作環境當中。透過這樣一本以系統管理員為核心的書,希望能給讀者帶來的不只是技術能力提升,更多的是開源與奉獻精神。也希望更多的系統管理員透過多閱讀、多交流,建立起享受分享的技術氛圍。
讀者物件
根據本書內容定位,適合閱讀本書的讀者有:
Puppet使用者和愛好者
UNIX與Linux系統管理員
運維工程師
如何閱讀本書
本書分為四大部分:
第一部分為準備篇(第1~4章),簡單地介紹了Puppet的發展歷程和相關理論,幫助讀者瞭解一些基礎背景知識,並快速搭建測試環境。
第二部分為基礎篇(第5~10章),著重講解Puppet的基礎理論知識,包括語法、資源、類、模板、模組、節點、Facter、陣列、函式、變數。結合不同例項讓讀者感覺理論知識不再那麼枯燥。
第三部分為實戰篇(第11~13章),從實戰角度進行講解,結合流行監控系統Nagios和Zabbix,包括最為熱門的雲端計算OpenStack的部署,使讀者能快速掌握Puppet並運用到實踐中。
第四部分為進階篇(第14~20章),透過對Puppet擴充套件模式、版本控制、報告系統、控制檯、擴充套件工具及MCollective的綜合講解,讓讀者瞭解一個完整的Puppet生產流程。
其中第三部分以實戰來講解Puppet應用,相比於前兩部分更加複雜。如果你是一名經驗豐富的資深使用者,能夠理解Puppet的相關基礎知識和工作原理,那麼你可以直接閱讀這部分內容。但是如果你是一名初學者,請一定從第1章的基礎理論知識開始學習。
勘誤和支援
由於作者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,我特意在部落格()的基礎上開闢了線上支援與應急方案的站點。你可以將書中的錯誤以及遇到的有關Puppet的任何問題,透過訪問該站點的Q&A頁面提交給我。書中的全部原始檔除可以從華章網站①下載外,還可以從這個站點下載。同時我也會將相應的功能更新在這個站點上及時釋出出來。如果你有更多的寶貴意見,也歡迎傳送郵件至郵箱liuyu105#gmail.com(sed 's/#/@/g'),標題請註明《Puppet實戰》,期待能夠得到你們的真摯反饋。同樣你也可以關注我為本書建立的微信公共平臺(puppetchina),我會在此公共平臺定期釋出Puppet相關資訊。
致謝
首先要感謝偉大的Puppet作者Luke Kanies,他開發了一款影響我整個人生的軟體。
特別感謝劉長元、王廣勝、吳問志、劉繼偉、王哲,感謝你們對本書提出的寶貴修改意見。
感謝為本書撰寫的童劍先生、竇哲先生、田逸先生、程輝先生,感謝你們在繁忙的工作中抽出時間,閱讀了本書的樣稿並寫下推薦和評論。
感謝機械工業出版社華章公司的編輯楊福川,是你的引導才促使我完成這本書。特別感謝姜影編輯,在這一年多的時間中始終幫我校對並支援我的寫作,你的鼓勵和幫助引導我順利完成全部書稿。
最後感謝我的笨笨,一如既往地支援我寫作,給予我無盡的支援與靈感,並時時刻刻為我灌輸著信心和力量!
謹以此書獻給我即將出生的Baby,以及眾多熱愛Puppet的朋友們!
劉宇(守住每一天)
於中國北京
目 錄
前 言
第一部分 準備篇
第1章 認識Puppet 2
1.1 Puppet的起源與發展現狀 2
1.1.1 什麼是Puppet 2
1.1.2 Puppet起源與發展 2
1.1.3 版本語言特徵 3
1.1.4 命令差異 4
1.1.5 Puppet 3.0新特性 4
1.2 為什麼要使用Puppet 5
1.2.1 都有誰在使用Puppet 5
1.2.2 常見集中化管理工具對比 5
1.2.3 推薦Puppet的理由 6
1.3 Puppet的作用和特色 6
1.3.1 為什麼要有自己的語言 6
1.3.2 為什麼是Ruby 6
1.3.3 管理任何機器 6
1.4 Puppet組織結構 7
1.5 Puppet工作原理 7
1.5.1 Puppet基本結構 7
1.5.2 Puppet是如何工作的 8
1.5.3 Puppet資料流 8
1.5.4 檔案結合 9
1.5.5 詳細互動過程 9
1.5.6 安全與認證 10
1.6 Puppet核心配置檔案詳解 11
1.6.1 主配置檔案puppet.conf 11
1.6.2 主機配置檔案site.pp 13
1.6.3 認證與安全配置檔案 14
1.6.4 客戶端自動認證配置 16
1.6.5 報告系統配置 16
1.6.6 檔案系統配置檔案 16
1.7 本章小結 17
第2章 Puppet安裝與配置 18
2.1 Puppet對各系統平臺的支援 18
2.2 Puppet對Ruby的支援 19
2.3 Puppet的安裝步驟 19
2.4 在Linux下安裝 20
2.4.1 包管理器方式安裝 21
2.4.2 從原始碼進行安裝 23
2.4.3 從Git版本庫進行安裝 24
2.4.4 透過Gems進行安裝 25
2.5 在Mac OS X下安裝 25
2.5.1 透過二進位制釋出包進行安裝 25
2.5.2 從Git版本庫進行安裝 26
2.5.3 從Ports倉庫進行安裝 27
2.6 配置Puppet 28
2.7 在Windows下安裝與使用 30
2.7.1 包管理器方式安裝 31
2.7.2 在Windows下使用Puppet 33
2.7.3 Puppet在Windows下的功能 35
2.8 如何升級 35
2.9 本章小結 36
第3章 建立你的第一個Puppet配置 37
3.1 配置一個測試節點 37
3.2 檢測你的配置檔案 38
3.3 客戶端執行配置 39
3.4 檢視執行結果 40
3.5 增加httpd模組 40
3.6 本章小結 42
第4章 Puppet執行環境 43
4.1 伺服器端配置 43
4.2 客戶端配置 44
4.3 如何運用環境配置 45
4.4 本章小結 48
第二部分 基礎篇
第5章 Puppet語法與命令詳解 50
5.1 Puppet的命名規範 51
5.1.1 資源 51
5.1.2 屬性 51
5.1.3 類 52
5.1.4 模組 52
5.1.5 節點 52
5.2 主機、模組和類的命名 53
5.2.1 主機的命名 53
5.2.2 模組的命名 54
5.2.3 類的命名 54
5.3 資源、變數、引數和標籤的命名 54
5.3.1 資源的命名 54
5.3.2 變數的命名 55
5.3.3 引數的命名 55
5.3.4 標籤的命名 55
5.4 Puppet語法風格 55
5.4.1 間距、縮排和空白字元 56
5.4.2 註釋 56
5.4.3 變數的引用 56
5.4.4 資源 57
5.4.5 條件語句 60
5.4.6 類 61
5.5 檢查命令的用法 64
5.5.1 語法檢查 64
5.5.2 程式碼除錯 65
5.6 Puppet命令詳解 66
5.6.1 Puppet常用命令 68
5.6.2 幫助命令詳解 73
5.6.3 模組和不常用命令 75
5.7 本章小結 76
第6章 Puppet資源詳解 77
6.1 什麼是資源 78
6.1.1 圖解核心資源 81
6.1.2 什麼是manifests 81
6.1.3 資源的依賴 82
6.2 虛擬資源? 85
6.2.1 虛擬資源的定義 85
6.2.2 虛擬資源的用法 86
6.3 常用資源的用法 87
6.3.1 使用者資源 88
6.3.2 使用者組資源 90
6.3.3 軟體安裝 91
6.3.4 檔案管理 94
6.3.5 服務管理 97
6.3.6 定時指令碼 99
6.3.7 執行命令 101
6.3.8 除錯與輸出 103
6.4 Puppet作用域與變數 104
6.4.1 作用域 104
6.4.2 變數 108
6.5 條件語句 110
6.5.1 if語句 110
6.5.2 case語句 112
6.5.3 selector選擇器 112
6.6 表示式 113
6.6.1 什麼是表示式 113
6.6.2 運用位置 114
6.6.3 操作順序 114
6.6.4 比較運算子 114
6.6.5 布林運算子 115
6.6.6 算術運算子 116
6.7 函式 116
6.8 資料型別 118
6.8.1 布林型別 118
6.8.2 未定義 119
6.8.3 字串 119
6.8.4 資源引用 120
6.8.5 數字 120
6.8.6 雜湊型別 121
6.8.7 正規表示式 121
6.8.8 陣列 122
6.9 標籤 123
6.10 stage執行階段 123
6.11 本章小結 124
第7章 Puppet模組、類、模板 125
7.1 圖解模組結構 125
7.2 模組管理 126
7.2.1 例項:建立一個模組 127
7.2.2 模組佈局 129
7.3 類管理 130
7.3.1 類的定義 131
7.3.2 類的繼承 131
7.3.3 引數化類 132
7.4 模板管理 135
7.4.1 定義與宣告 135
7.4.2 ERB模板語法 136
7.5 融合 139
7.6 從Puppet Forge獲取模組 141
7.7 從Example42獲取模組 142
7.8 本章小結 143
第8章 節點管理 144
8.1 什麼是節點 144
8.2 主機名命名規範 145
8.3 節點繼承 146
8.3.1 節點繼承關係 146
8.3.2 繼承變數覆蓋 147
8.3.3 預設類與預設節點 147
8.3.4 節點繼承的判斷 148
8.4 節點管理方法 149
8.4.1 每個主機名獨立 149
8.4.2 採用正則匹配 150
8.4.3 使用外部節點分類器 150
8.4.4 利用WEB-UI管理 153
8.5 如何選擇合適的管理方式 154
8.6 本章小結 154
第9章 認識Facter 155
9.1 什麼是Facter 155
9.2 Facter的作用與特點 156
9.3 Facter的常用變數 157
9.3.1 作業系統名 158
9.3.2 作業系統相關 159
9.3.3 主機名 159
9.3.4 IP地址 160
9.3.5 記憶體管理 160
9.3.6 系統狀態資訊 161
9.3.7 版本管理 161
9.4 如何自定義fact 162
9.5 案例一:條件語句 164
9.6 案例二:匹配不同硬體配置 165
9.7 本章小結 167
第10章 小標籤大用途 168
10.1 Puppet標籤的定義 168
10.2 Puppet標籤的說明 168
10.2.1 自動分配標籤 169
10.2.2 tag元引數 169
10.2.3 tag函式 170
10.2.4 tagged函式 171
10.2.5 識別標籤 171
10.3 指定標籤執行特定配置 172
10.3.1 在命令列中指定特定標籤 172
10.3.2 在配置檔案中指定 174
10.3.3 在Node節點配置中指定 174
10.4 標籤的更多用法 175
10.4.1 在收集資源中使用 175
10.4.2 例項化資源 175
10.4.3 建立資源集合 176
10.5 本章小結 176
第三部分 實戰篇
第11章 大規模Nginx叢集部署方案 178
11.1 應用場景 178
11.2 場景需求分析 178
11.2.1 日常變更分析 178
11.2.2 網路及架構分析 179
11.2.3 軟體安裝分析 180
11.2.4 軟體配置分析 180
11.2.5 節點管理分析 181
11.3 合理規劃 181
11.3.1 系統安裝 181
11.3.2 系統初始化 182
11.3.3 部署規劃 182
11.3.4 關注點 183
11.4 實施步驟 183
11.4.1 前期準備:建立軟體倉庫 183
11.4.2 Puppet配置檔案管理 185
11.4.3 初始化作業系統 187
11.4.4 編寫nginx模組 187
11.4.5 採用Forge的nginx模組 192
11.5 本章小結 194
第12章 分散式監控系統部署方案 195
12.1 利用Puppet部署Zabbix 196
12.1.1 Zabbix簡介 196
12.1.2 Zabbix架構 197
12.1.3 利用Puppet部署Zabbix 198
12.1.4 Zabbix自定義監控 201
12.2 利用Puppet部署Nagios 202
12.2.1 Nagios簡介 202
12.2.2 Nagios架構 203
12.2.3 Nagios服務端安裝 204
12.2.4 Nagios模組應用 206
12.2.5 建立Nagios客戶端監控 208
12.3 本章小結 210
第13章 OpenStack快速部署方案 211
13.1 OpenStack簡介 211
13.1.1 什麼是OpenStack 211
13.1.2 OpenStack的元件、服務及邏輯架構 212
13.1.3 OpenStack版本說明 213
13.2 部署OpenStack 214
13.2.1 環境準備 214
13.2.2 安裝軟體及Puppet模組 216
13.2.3 部署controller 218
13.2.4 部署compute 220
13.2.5 驗證OpenStack部署 221
13.3 本章小結 222
第四部分 進階篇
第14章 Puppet版本控制 224
14.1 Puppet版本控制方法 224
14.1.1 為什麼要使用版本控制 224
14.1.2 版本控制的架構與原理 225
14.1.3 Git與SVN的區別 226
14.1.4 為什麼採用Git 226
14.2 使用Git實現Puppet 226
14.2.1 安裝與配置Git 227
14.2.2 將Puppet加入Git 228
14.2.3 使用Rake自動更新副本 229
14.2.4 使用hook實現自動語法檢查 231
14.3 本章小結 232
第15章 Puppet架構擴充套件與分散式 233
15.1 Puppet瓶頸分析 233
15.1.1 單臺Puppet Master瓶頸 233
15.1.2 認證的瓶頸 234
15.1.3 檔案的瓶頸 234
15.1.4 網路的瓶頸 234
15.2 架構擴充套件之單臺Puppet Master 234
15.2.1 Nginx+Mongrel模式 235
15.2.2 Apache+Passenger模式 238
15.2.3 Nginx+Passenger模式 242
15.3 架構擴充套件之多臺Puppet Master 244
15.3.1 配置前的準備 248
15.3.2 Puppet CA認證伺服器部署 250
15.3.3 Puppet LB負載均衡器部署 251
15.3.4 Puppet Master伺服器部署 252
15.3.5 Puppet客戶端配置 254
15.3.6 驗證架構 254
15.4 架構擴充套件之利用Git構建分散式的Puppet 254
15.4.1 實現原理 255
15.4.2 安裝與部署 256
15.5 本章小結 259
第16章 File資源管理最佳化 260
16.1 深入理解File資源? 260
16.2 操作實踐 262
16.3 File資源配置方法? 269
16.3.1 模組檔案目錄配置 269
16.3.2 統一檔案目錄配置 270
16.3.3 content屬性 271
16.4 File資源的最佳化 271
16.4.1 配置Nginx代理 272
16.4.2 選擇File資源還是ERB 272
16.4.3 大檔案下發方法 272
16.5 從filebucket檢索檔案 272
16.6 備份與恢復檔案 275
16.7 File資源的缺點 276
16.8 本章小結 276
第17章 強大的報告系統 277
17.1 report介紹 277
17.2 Puppet資訊記錄方式 278
17.3 tagmail傳送郵件報告 279
17.4 rrdgraph圖形化報告 280
17.5 自定義報告處理器 282
17.6 本章小結 284
第18章 必須瞭解的控制檯 285
18.1 Puppet DashBoard 285
18.1.1 簡介 285
18.1.2 DashBoard安裝 285
18.1.3 配置DashBoard 287
18.1.4 整合DashBoard 292
18.2 Foreman 297
18.2.1 Foreman簡介 297
18.2.2 安裝Foreman 298
18.2.3 配置Foreman 303
18.2.4 使用Foreman管理Puppet 311
18.2.5 從Foreman顯示報告 313
18.2.6 Foreman其他功能 314
18.3 本章小結 314
第19章 Puppet擴充套件工具 315
19.1 生成HTML文件 315
19.1.1 利用puppet doc生成HTML 316
19.1.2 puppet doc的其他使用方法 318
19.2 生成依賴關係圖 319
19.2.1 什麼是關係圖 319
19.2.2 配置方法 319
19.2.3 關係圖說明? 322
19.3 PuppetDB 322
19.3.1 PuppetDB功能與特性 322
19.3.2 安裝PuppetDB 324
19.3.3 PuppetDB配置檔案詳解 326
19.3.4 配置與使用PuppetDB 329
19.3.5 PuppetDB瓶頸 332
19.4 Hiera 335
19.4.1 Hiera的特點 335
19.4.2 Hiera的使用 335
19.5 本章小結 335
第20章 MCollective結合 336
20.1 MCollective簡介 336
20.1.1 什麼是MCollective 336
20.1.2 MCollective角色互換 337
20.1.3 MCollective的特點 338
20.1.4 MCollective給Puppet帶來的改變 338
20.2 訊息中介軟體 339
20.2.1 Stomp 339
20.2.2 ActiveMQ 339
20.2.3 RabbitMQ 339
20.3 標準化部署MCollective 340
20.3.1 體系結構與配置 340
20.3.2 安全模型 340
20.3.3 未來擴充套件 341
20.4 部署MCollective步驟 341
20.4.1 建立和收集證書 342
20.4.2 部署和配置中介軟體 344
20.4.3 MCollective安裝與配置 348
20.5 如何使用MCollective 355
20.5.1 mco基本命令的用法 355
20.5.2 執行RPC請求 356
20.5.3 過濾器的使用 358
20.6 MCollective使用 Shell Commands 359
20.7 MCollective控制Puppet 360
20.8 本章小結 362
Puppet領域的經典之作,資深運維專家多年一線經驗結晶,51CTO技術社群強烈推薦,新浪研發中心平臺架構部高階總監童劍、資深運維專家田逸、中國最大開源社群ChinaUnix創始人之一南非蜘蛛、OpenStack基金會董事程輝等業界資深專家聯袂推薦。本書詳細講解了Puppet的功能和使用方法,深入剖析了Puppet的工作原理,系統總結了Puppet的使用技巧,包含大量來自一線的實戰案例和最佳實踐。
全書一共20章,共分為四部分:準備篇(第1~4章)介紹了Puppet用途、組織結構、工作原理、核心配置檔案、各種平臺下的安裝與配置,以及它的執行環境,是使用Puppet前必須做好的準備工作;基礎篇(第5~10章)詳細講解了Puppet的理論知識和功能使用,Puppet的語法與命令、資源、模組、類、模板、節點管理,以及Facter、陣列、函式、變數和標籤;實戰篇(第11~13章)透過幾個經典案例,包括大規模Nginx叢集的部署方案、分散式監控系統部署方案、OpenStack快速部署方案等,使讀者能快速將Puppet運用到實踐中;進階篇(第14~20章)綜合講解了Puppet的擴充套件模式、版本控制、報告系統、控制檯、擴充套件工具及MCollective,讓讀者瞭解一個完整的Puppet生產流程。
作者簡介:
劉宇 資深運維工程師和系統工程師,曾任職於新浪,擔任高階技術工程師,現就職於百度,負責系統運維相關的工作,是國內Puppet領域的先驅之一。精通分散式自動化管理平臺和分散式監控平臺的管理,對影片點播、直播架構、檔案加速、排程系統和資料分析都有非常深入的研究,實踐經驗極為豐富。在國內率先使用Puppet進行大規模叢集管理,並撰寫了Puppet配置手冊在網路上分享。活躍於InfoQ和51CTO等技術社群,曾被評為InfoQ金牌講師和51CTO部落格之星。
前 言
為什麼要寫這本書
子曰:“工欲善其事,必先利其器。”作為系統管理員,最應該具備的一種技能就是利用各種優秀開源軟體快速完成自己的工作,讓自己變得更輕鬆。但並不是所有的軟體都適合你,你需要根據自己的環境及需求進行選擇。
Puppet就是系統管理員的一把利器。幾年前我開始學習Puppet的時候,不少朋友都問我:為什麼選擇Puppet?它有什麼優勢?當時pssh、CFEngine等都已經很成熟,並且也能幫助系統管理員有效地解決繁重的工作。為什麼還要選擇Puppet?“需求決定產品”。Luke Kanies(Puppet作者,以下簡稱Luke)曾經全面參與了重寫CFEngine的解析器和開發ISConf3的工作,但是他還是覺得現有的工具已經無法滿足他的工作需求,需要自己創造一個全新的工具,才能徹底使他的工作更加高效、便捷。 這便是Puppet誕生的背景和原因。
Puppet注重設計簡潔、先框架後應用兩個中心思想。這也造就了Puppet今日的成功,它的“三板斧”——資源、類、模板,可以輕鬆地幫我們完成複雜的業務邏輯關係管理。同時,Puppet並不具備執行功能,因此在某些程度上存在短板,(比如exec是為解決特定系統管理員蹩腳的執行命令需求而開發的,但Luke一再強調不建議使用。)
或許更多的系統管理員抱怨Puppet沒有命令執行功能。Luke早就考慮到了這一點,並提前收購了MCollective,採用訊息型匯流排的中介軟體來實現命令執行、系統管理、Puppet客戶端管理等,以彌補了Puppet在這方面的不足,可見Puppetlabs非常有遠見。伴隨著Puppet各子功能及擴充套件工具的遍地開花,Puppet的商業化及各種開源社群的支援,Puppet可謂是蒸蒸日上。
在新興的同類工具中,我的另一個關注點是SaltStack,它天生具備命令執行和配置管理兩大核心功能,相比Puppet來說有一定優勢,但SaltStack的成長還需要我們耐心等待。Puppet打敗1993年“出生”的老牌系統配置管理工具CFEngine就花費了近7年時間。而Puppet與Salt Stack真正鹿死誰手,我們拭目以待。相信以後的市場競爭會越來越激烈。
為了讓更多的系統管理員瞭解並深入學習Puppet,可以利用Puppet的整合方案解決系統管理複雜而繁重的任務,而不是盲目地尋找問題,我覺得有必要結合自己在學習Puppet過程中走過的彎路將工作中的經驗和總結以實戰形式呈現給大家。我也希望更多的人能加入開源社群,擁抱開源,擁抱變化,透過學習Puppet,體會到與開源愛好者交流的樂趣,而不是為了工具選型而猶豫甚至爭鬥。這也是我寫作本書的初衷。
本書技術深入而閱讀簡單,涉及系統管理員所需的很多方面的基礎知識,同時透過穿插各種例項及程式碼詳解以便使讀者能夠快速掌握Puppet,並迅速將其運用到工作環境當中。透過這樣一本以系統管理員為核心的書,希望能給讀者帶來的不只是技術能力提升,更多的是開源與奉獻精神。也希望更多的系統管理員透過多閱讀、多交流,建立起享受分享的技術氛圍。
讀者物件
根據本書內容定位,適合閱讀本書的讀者有:
Puppet使用者和愛好者
UNIX與Linux系統管理員
運維工程師
如何閱讀本書
本書分為四大部分:
第一部分為準備篇(第1~4章),簡單地介紹了Puppet的發展歷程和相關理論,幫助讀者瞭解一些基礎背景知識,並快速搭建測試環境。
第二部分為基礎篇(第5~10章),著重講解Puppet的基礎理論知識,包括語法、資源、類、模板、模組、節點、Facter、陣列、函式、變數。結合不同例項讓讀者感覺理論知識不再那麼枯燥。
第三部分為實戰篇(第11~13章),從實戰角度進行講解,結合流行監控系統Nagios和Zabbix,包括最為熱門的雲端計算OpenStack的部署,使讀者能快速掌握Puppet並運用到實踐中。
第四部分為進階篇(第14~20章),透過對Puppet擴充套件模式、版本控制、報告系統、控制檯、擴充套件工具及MCollective的綜合講解,讓讀者瞭解一個完整的Puppet生產流程。
其中第三部分以實戰來講解Puppet應用,相比於前兩部分更加複雜。如果你是一名經驗豐富的資深使用者,能夠理解Puppet的相關基礎知識和工作原理,那麼你可以直接閱讀這部分內容。但是如果你是一名初學者,請一定從第1章的基礎理論知識開始學習。
勘誤和支援
由於作者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,我特意在部落格()的基礎上開闢了線上支援與應急方案的站點。你可以將書中的錯誤以及遇到的有關Puppet的任何問題,透過訪問該站點的Q&A頁面提交給我。書中的全部原始檔除可以從華章網站①下載外,還可以從這個站點下載。同時我也會將相應的功能更新在這個站點上及時釋出出來。如果你有更多的寶貴意見,也歡迎傳送郵件至郵箱liuyu105#gmail.com(sed 's/#/@/g'),標題請註明《Puppet實戰》,期待能夠得到你們的真摯反饋。同樣你也可以關注我為本書建立的微信公共平臺(puppetchina),我會在此公共平臺定期釋出Puppet相關資訊。
致謝
首先要感謝偉大的Puppet作者Luke Kanies,他開發了一款影響我整個人生的軟體。
特別感謝劉長元、王廣勝、吳問志、劉繼偉、王哲,感謝你們對本書提出的寶貴修改意見。
感謝為本書撰寫的童劍先生、竇哲先生、田逸先生、程輝先生,感謝你們在繁忙的工作中抽出時間,閱讀了本書的樣稿並寫下推薦和評論。
感謝機械工業出版社華章公司的編輯楊福川,是你的引導才促使我完成這本書。特別感謝姜影編輯,在這一年多的時間中始終幫我校對並支援我的寫作,你的鼓勵和幫助引導我順利完成全部書稿。
最後感謝我的笨笨,一如既往地支援我寫作,給予我無盡的支援與靈感,並時時刻刻為我灌輸著信心和力量!
謹以此書獻給我即將出生的Baby,以及眾多熱愛Puppet的朋友們!
劉宇(守住每一天)
於中國北京
目 錄
前 言
第一部分 準備篇
第1章 認識Puppet 2
1.1 Puppet的起源與發展現狀 2
1.1.1 什麼是Puppet 2
1.1.2 Puppet起源與發展 2
1.1.3 版本語言特徵 3
1.1.4 命令差異 4
1.1.5 Puppet 3.0新特性 4
1.2 為什麼要使用Puppet 5
1.2.1 都有誰在使用Puppet 5
1.2.2 常見集中化管理工具對比 5
1.2.3 推薦Puppet的理由 6
1.3 Puppet的作用和特色 6
1.3.1 為什麼要有自己的語言 6
1.3.2 為什麼是Ruby 6
1.3.3 管理任何機器 6
1.4 Puppet組織結構 7
1.5 Puppet工作原理 7
1.5.1 Puppet基本結構 7
1.5.2 Puppet是如何工作的 8
1.5.3 Puppet資料流 8
1.5.4 檔案結合 9
1.5.5 詳細互動過程 9
1.5.6 安全與認證 10
1.6 Puppet核心配置檔案詳解 11
1.6.1 主配置檔案puppet.conf 11
1.6.2 主機配置檔案site.pp 13
1.6.3 認證與安全配置檔案 14
1.6.4 客戶端自動認證配置 16
1.6.5 報告系統配置 16
1.6.6 檔案系統配置檔案 16
1.7 本章小結 17
第2章 Puppet安裝與配置 18
2.1 Puppet對各系統平臺的支援 18
2.2 Puppet對Ruby的支援 19
2.3 Puppet的安裝步驟 19
2.4 在Linux下安裝 20
2.4.1 包管理器方式安裝 21
2.4.2 從原始碼進行安裝 23
2.4.3 從Git版本庫進行安裝 24
2.4.4 透過Gems進行安裝 25
2.5 在Mac OS X下安裝 25
2.5.1 透過二進位制釋出包進行安裝 25
2.5.2 從Git版本庫進行安裝 26
2.5.3 從Ports倉庫進行安裝 27
2.6 配置Puppet 28
2.7 在Windows下安裝與使用 30
2.7.1 包管理器方式安裝 31
2.7.2 在Windows下使用Puppet 33
2.7.3 Puppet在Windows下的功能 35
2.8 如何升級 35
2.9 本章小結 36
第3章 建立你的第一個Puppet配置 37
3.1 配置一個測試節點 37
3.2 檢測你的配置檔案 38
3.3 客戶端執行配置 39
3.4 檢視執行結果 40
3.5 增加httpd模組 40
3.6 本章小結 42
第4章 Puppet執行環境 43
4.1 伺服器端配置 43
4.2 客戶端配置 44
4.3 如何運用環境配置 45
4.4 本章小結 48
第二部分 基礎篇
第5章 Puppet語法與命令詳解 50
5.1 Puppet的命名規範 51
5.1.1 資源 51
5.1.2 屬性 51
5.1.3 類 52
5.1.4 模組 52
5.1.5 節點 52
5.2 主機、模組和類的命名 53
5.2.1 主機的命名 53
5.2.2 模組的命名 54
5.2.3 類的命名 54
5.3 資源、變數、引數和標籤的命名 54
5.3.1 資源的命名 54
5.3.2 變數的命名 55
5.3.3 引數的命名 55
5.3.4 標籤的命名 55
5.4 Puppet語法風格 55
5.4.1 間距、縮排和空白字元 56
5.4.2 註釋 56
5.4.3 變數的引用 56
5.4.4 資源 57
5.4.5 條件語句 60
5.4.6 類 61
5.5 檢查命令的用法 64
5.5.1 語法檢查 64
5.5.2 程式碼除錯 65
5.6 Puppet命令詳解 66
5.6.1 Puppet常用命令 68
5.6.2 幫助命令詳解 73
5.6.3 模組和不常用命令 75
5.7 本章小結 76
第6章 Puppet資源詳解 77
6.1 什麼是資源 78
6.1.1 圖解核心資源 81
6.1.2 什麼是manifests 81
6.1.3 資源的依賴 82
6.2 虛擬資源? 85
6.2.1 虛擬資源的定義 85
6.2.2 虛擬資源的用法 86
6.3 常用資源的用法 87
6.3.1 使用者資源 88
6.3.2 使用者組資源 90
6.3.3 軟體安裝 91
6.3.4 檔案管理 94
6.3.5 服務管理 97
6.3.6 定時指令碼 99
6.3.7 執行命令 101
6.3.8 除錯與輸出 103
6.4 Puppet作用域與變數 104
6.4.1 作用域 104
6.4.2 變數 108
6.5 條件語句 110
6.5.1 if語句 110
6.5.2 case語句 112
6.5.3 selector選擇器 112
6.6 表示式 113
6.6.1 什麼是表示式 113
6.6.2 運用位置 114
6.6.3 操作順序 114
6.6.4 比較運算子 114
6.6.5 布林運算子 115
6.6.6 算術運算子 116
6.7 函式 116
6.8 資料型別 118
6.8.1 布林型別 118
6.8.2 未定義 119
6.8.3 字串 119
6.8.4 資源引用 120
6.8.5 數字 120
6.8.6 雜湊型別 121
6.8.7 正規表示式 121
6.8.8 陣列 122
6.9 標籤 123
6.10 stage執行階段 123
6.11 本章小結 124
第7章 Puppet模組、類、模板 125
7.1 圖解模組結構 125
7.2 模組管理 126
7.2.1 例項:建立一個模組 127
7.2.2 模組佈局 129
7.3 類管理 130
7.3.1 類的定義 131
7.3.2 類的繼承 131
7.3.3 引數化類 132
7.4 模板管理 135
7.4.1 定義與宣告 135
7.4.2 ERB模板語法 136
7.5 融合 139
7.6 從Puppet Forge獲取模組 141
7.7 從Example42獲取模組 142
7.8 本章小結 143
第8章 節點管理 144
8.1 什麼是節點 144
8.2 主機名命名規範 145
8.3 節點繼承 146
8.3.1 節點繼承關係 146
8.3.2 繼承變數覆蓋 147
8.3.3 預設類與預設節點 147
8.3.4 節點繼承的判斷 148
8.4 節點管理方法 149
8.4.1 每個主機名獨立 149
8.4.2 採用正則匹配 150
8.4.3 使用外部節點分類器 150
8.4.4 利用WEB-UI管理 153
8.5 如何選擇合適的管理方式 154
8.6 本章小結 154
第9章 認識Facter 155
9.1 什麼是Facter 155
9.2 Facter的作用與特點 156
9.3 Facter的常用變數 157
9.3.1 作業系統名 158
9.3.2 作業系統相關 159
9.3.3 主機名 159
9.3.4 IP地址 160
9.3.5 記憶體管理 160
9.3.6 系統狀態資訊 161
9.3.7 版本管理 161
9.4 如何自定義fact 162
9.5 案例一:條件語句 164
9.6 案例二:匹配不同硬體配置 165
9.7 本章小結 167
第10章 小標籤大用途 168
10.1 Puppet標籤的定義 168
10.2 Puppet標籤的說明 168
10.2.1 自動分配標籤 169
10.2.2 tag元引數 169
10.2.3 tag函式 170
10.2.4 tagged函式 171
10.2.5 識別標籤 171
10.3 指定標籤執行特定配置 172
10.3.1 在命令列中指定特定標籤 172
10.3.2 在配置檔案中指定 174
10.3.3 在Node節點配置中指定 174
10.4 標籤的更多用法 175
10.4.1 在收集資源中使用 175
10.4.2 例項化資源 175
10.4.3 建立資源集合 176
10.5 本章小結 176
第三部分 實戰篇
第11章 大規模Nginx叢集部署方案 178
11.1 應用場景 178
11.2 場景需求分析 178
11.2.1 日常變更分析 178
11.2.2 網路及架構分析 179
11.2.3 軟體安裝分析 180
11.2.4 軟體配置分析 180
11.2.5 節點管理分析 181
11.3 合理規劃 181
11.3.1 系統安裝 181
11.3.2 系統初始化 182
11.3.3 部署規劃 182
11.3.4 關注點 183
11.4 實施步驟 183
11.4.1 前期準備:建立軟體倉庫 183
11.4.2 Puppet配置檔案管理 185
11.4.3 初始化作業系統 187
11.4.4 編寫nginx模組 187
11.4.5 採用Forge的nginx模組 192
11.5 本章小結 194
第12章 分散式監控系統部署方案 195
12.1 利用Puppet部署Zabbix 196
12.1.1 Zabbix簡介 196
12.1.2 Zabbix架構 197
12.1.3 利用Puppet部署Zabbix 198
12.1.4 Zabbix自定義監控 201
12.2 利用Puppet部署Nagios 202
12.2.1 Nagios簡介 202
12.2.2 Nagios架構 203
12.2.3 Nagios服務端安裝 204
12.2.4 Nagios模組應用 206
12.2.5 建立Nagios客戶端監控 208
12.3 本章小結 210
第13章 OpenStack快速部署方案 211
13.1 OpenStack簡介 211
13.1.1 什麼是OpenStack 211
13.1.2 OpenStack的元件、服務及邏輯架構 212
13.1.3 OpenStack版本說明 213
13.2 部署OpenStack 214
13.2.1 環境準備 214
13.2.2 安裝軟體及Puppet模組 216
13.2.3 部署controller 218
13.2.4 部署compute 220
13.2.5 驗證OpenStack部署 221
13.3 本章小結 222
第四部分 進階篇
第14章 Puppet版本控制 224
14.1 Puppet版本控制方法 224
14.1.1 為什麼要使用版本控制 224
14.1.2 版本控制的架構與原理 225
14.1.3 Git與SVN的區別 226
14.1.4 為什麼採用Git 226
14.2 使用Git實現Puppet 226
14.2.1 安裝與配置Git 227
14.2.2 將Puppet加入Git 228
14.2.3 使用Rake自動更新副本 229
14.2.4 使用hook實現自動語法檢查 231
14.3 本章小結 232
第15章 Puppet架構擴充套件與分散式 233
15.1 Puppet瓶頸分析 233
15.1.1 單臺Puppet Master瓶頸 233
15.1.2 認證的瓶頸 234
15.1.3 檔案的瓶頸 234
15.1.4 網路的瓶頸 234
15.2 架構擴充套件之單臺Puppet Master 234
15.2.1 Nginx+Mongrel模式 235
15.2.2 Apache+Passenger模式 238
15.2.3 Nginx+Passenger模式 242
15.3 架構擴充套件之多臺Puppet Master 244
15.3.1 配置前的準備 248
15.3.2 Puppet CA認證伺服器部署 250
15.3.3 Puppet LB負載均衡器部署 251
15.3.4 Puppet Master伺服器部署 252
15.3.5 Puppet客戶端配置 254
15.3.6 驗證架構 254
15.4 架構擴充套件之利用Git構建分散式的Puppet 254
15.4.1 實現原理 255
15.4.2 安裝與部署 256
15.5 本章小結 259
第16章 File資源管理最佳化 260
16.1 深入理解File資源? 260
16.2 操作實踐 262
16.3 File資源配置方法? 269
16.3.1 模組檔案目錄配置 269
16.3.2 統一檔案目錄配置 270
16.3.3 content屬性 271
16.4 File資源的最佳化 271
16.4.1 配置Nginx代理 272
16.4.2 選擇File資源還是ERB 272
16.4.3 大檔案下發方法 272
16.5 從filebucket檢索檔案 272
16.6 備份與恢復檔案 275
16.7 File資源的缺點 276
16.8 本章小結 276
第17章 強大的報告系統 277
17.1 report介紹 277
17.2 Puppet資訊記錄方式 278
17.3 tagmail傳送郵件報告 279
17.4 rrdgraph圖形化報告 280
17.5 自定義報告處理器 282
17.6 本章小結 284
第18章 必須瞭解的控制檯 285
18.1 Puppet DashBoard 285
18.1.1 簡介 285
18.1.2 DashBoard安裝 285
18.1.3 配置DashBoard 287
18.1.4 整合DashBoard 292
18.2 Foreman 297
18.2.1 Foreman簡介 297
18.2.2 安裝Foreman 298
18.2.3 配置Foreman 303
18.2.4 使用Foreman管理Puppet 311
18.2.5 從Foreman顯示報告 313
18.2.6 Foreman其他功能 314
18.3 本章小結 314
第19章 Puppet擴充套件工具 315
19.1 生成HTML文件 315
19.1.1 利用puppet doc生成HTML 316
19.1.2 puppet doc的其他使用方法 318
19.2 生成依賴關係圖 319
19.2.1 什麼是關係圖 319
19.2.2 配置方法 319
19.2.3 關係圖說明? 322
19.3 PuppetDB 322
19.3.1 PuppetDB功能與特性 322
19.3.2 安裝PuppetDB 324
19.3.3 PuppetDB配置檔案詳解 326
19.3.4 配置與使用PuppetDB 329
19.3.5 PuppetDB瓶頸 332
19.4 Hiera 335
19.4.1 Hiera的特點 335
19.4.2 Hiera的使用 335
19.5 本章小結 335
第20章 MCollective結合 336
20.1 MCollective簡介 336
20.1.1 什麼是MCollective 336
20.1.2 MCollective角色互換 337
20.1.3 MCollective的特點 338
20.1.4 MCollective給Puppet帶來的改變 338
20.2 訊息中介軟體 339
20.2.1 Stomp 339
20.2.2 ActiveMQ 339
20.2.3 RabbitMQ 339
20.3 標準化部署MCollective 340
20.3.1 體系結構與配置 340
20.3.2 安全模型 340
20.3.3 未來擴充套件 341
20.4 部署MCollective步驟 341
20.4.1 建立和收集證書 342
20.4.2 部署和配置中介軟體 344
20.4.3 MCollective安裝與配置 348
20.5 如何使用MCollective 355
20.5.1 mco基本命令的用法 355
20.5.2 執行RPC請求 356
20.5.3 過濾器的使用 358
20.6 MCollective使用 Shell Commands 359
20.7 MCollective控制Puppet 360
20.8 本章小結 362
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16502878/viewspace-1063462/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Puppet學習
- puppet 安裝
- puppet單機模型模型
- puppet完全攻略(一)puppet應用原理及安裝部署
- puppet之安裝配置
- puppet組織架構架構
- puppet確保程式執行
- puppet agent定時同步更新
- puppet之crontab時間同步
- puppet package資源詳解Package
- puppet file資源詳解
- puppet自動認證授權
- puppet rpm方式的安裝
- puppet之java批量安裝案例Java
- puppet之mysql批量安裝案例MySql
- linux下puppet的“資源”管理Linux
- 自動化運維工具之Puppet master/agent模型、站點清單和puppet多環境設定運維AST模型
- puppet替換檔案中的string
- 自動化運維工具之Puppet模組運維
- puppet進階指南——service資源詳解
- kickstart之批量安裝puppet客戶端客戶端
- Puppet Openstack Mitaka Design Summit小結MIT
- 如何在 Ubuntu 15.04 中安裝 puppetUbuntu
- CentOS 6.3下Puppet安裝配置筆記CentOS筆記
- python xmind轉Excel(puppet洛洛原創)PythonExcel
- Puppet+foreman 本地yum安裝手冊REM
- RocketMQ實戰系列從理論到實戰MQ
- Maven實戰與原理分析(二):maven實戰Maven
- 實戰篇——CSRF漏洞pikachu靶場實戰
- 2021年DevOps生態報告 | Puppetdev
- Activiti實戰
- Git實戰Git
- flex實戰Flex
- MQTT 實戰MQQT
- CoreOS實戰
- Shell——實戰
- es 實戰
- AutoGPT實戰GPT