基礎設施即代碼 雲服務器管理
內容描述
本書旨在解釋如何利用“雲時代”基礎設施即代碼的方法來管理IT基礎設施。
主要內容包括:組織在採用新一代基礎設施技術時經常掉進的陷阱以及避免這些陷阱的核心原則和基礎設施即代碼的關鍵實踐;
動態基礎設施平臺的性能和服務模型;提供、確認核心基礎設施資源的工具;規定服務器、構建服務器模板和更新運行服務器的實踐和模型。
目錄大綱
第一部分基礎
第1章挑戰與原則3
1.1為什麼採用基礎設施即代碼3
1.2什麼是基礎設施即代碼4
1.3動態基礎設施的挑戰5
1.3.1服務器蔓延5
1.3.2配置漂移6
1.3.3雪花服務器6
1.3.4脆弱的基礎設施7
1.3.5自動化恐懼症7
1.3.6侵蝕8
1.4基礎設施即代碼的原則8
1.4.1系統能夠輕鬆複製8
1.4.2系統是用完可扔的9
1.4. 3系統是一致的10
1.4.4過程是可重複的10
1.4.5設計經常變更10
1.5實踐11
1.5.1使用定義文件11
1.5.2自文檔化的系統和流程11
1.5.3一切版本化12
1.5.4持續測試系統和流程13
1.5.5小的變更,而不是批量變更13
1.5.6讓服務持續可用13
1.6反脆弱性:超越“穩健性” 14
1.7結語15
1.8下一步15
第2章動態基礎設施平台16
2.1什麼是動態基礎設施平台16
2.2對動態基礎設施平台的要求17
2.2.1可編程17
2.2.2按需獲取19
2.2.3自服務19
2.3平台提供的基礎設施資源19
2.3.1計算資源20
2.3.2存儲資源20
2.3. 3網絡資源22
2.4動態基礎設施平台的類型23
2.4.1公有IaaS雲23
2.4.2社區IaaS雲23
2.4.3私有IaaS雲23
2.4.4反模式:手搖雲24
2.4.5混合雲服務24
2.4.6裸機雲24
2.5如何選擇動態基礎設施平台25
2.5.1公有還是私有25
2.5.2雲的可移植性27
2.6與雲和虛擬化的“機械通感” 29
2.7結語30
第3章基礎設施定義工具31
3.1選擇基礎設施即代碼的工具31
3.1.1需求:腳本接口32
3.1.2需求:無人值守的命令行工具32
3.1.3需求:支持無人值守的執行33
3.1.4需求:外部化配置34
3.2配置定義文件36
3.3使用基礎設施定義工具37
3.3.1用過程化腳本置備基礎設施38
3.3.2聲明式定義基礎設施40
3.3.3使用基礎設施定義工具41
3.3.4配置服務器41
3.4配置註冊表42
3.4.1輕量級配置註冊表42
3.4.2配置註冊表是CMDB嗎43
3.4 .3 CMDB的審計與修復反模式44
3.4.4 CMDB的基礎設施即代碼方式44
3.5結語44
第4章服務器配置工具45
4.1自動化服務器管理的目標45
4.2具有不同的服務器管理功能的工具46
4.2. 1創建服務器的工具46
4.2.2配置服務器的工具47
4.2.3打包服務器模板的工具48
4.2.4在服務器上運行命令的工具49
4.2.5從中央註冊中心獲取配置50
4.3服務器變更管理模型51
4.3.1臨時變更管理51
4.3.2配置同步51
4.3.3不可變的基礎設施51
4.3.4容器化服務52
4.4容器52
4.4.1以容器方式和非容器方式管理Ruby應用程序53
4.4.2容器是虛擬機嗎54
4.4.3使用容器而不是虛擬機55
4.4.4運行容器56
4.4.5安全和容器56
4.5結語58
第5基礎服務概述59
5.1基礎設施服務和工具的考慮59
5.1.1支持外部配置的工具優先60
5.1.2假定基礎設施是動態的工具優先61
5.1.3具有云兼容許可的產品優先61
5.1.4支持松耦合的產品優先62
5.2團隊之間共享服務62
5.3監控:告警、指標和日誌63
5.3.1告警:出現問題時告訴我64
5.3.2指標:收集和分析數據65
5.3. 3日誌聚合和分析65
5.4發現服務66
5.4.1服務器端的服務發現模式67
5.4.2客戶端的服務發現模式67
5.5分佈式進程管理67
5.5.1使用服務器角色編排進程67
5.5.2使用容器編排進程67
5.5.3調度短期任務68
5.5.4容器編排工具68
5.6軟件部署68
5.6.1部署流水線軟件68
5.6.2打包軟件69
5.7結語70
第二部分模式
第6章置備服務器的模式73
6.1服務器置備74
6.1.1服務器的生命週期74
6.1.2服務器都承載了什麼77
6.1.3服務器上東西的類型77
6.1.4服務器角色79
6.2創建服務器的模式80
6.2.1反模式:手動製作服務器80
6.2.2實踐:將服務器創建參數放在腳本中81
6.2.3反模式:熱克隆服務器82
6.2.4模式:服務器模板82
6.2.5反模式:雪花工廠82
6.3引導新服務器的模式83
6.3.1推送引導83
6.3.2拉取引導84
6.3.3實踐:對每個新服務器實例進行冒煙測試84
6.4結語85
第7章管理服務器模板的模式86
7.1供應模板:不能讓別人來做嗎86
7.2使用模板置備服務器87
7.2.1創建時置備服務器87
7.2.2在模板中置備88
7.2.3平衡模板和創建之間的置備工作88
7.3構建服務器模板的流程89
7.4原始鏡像90
7.4.1反模式:熱複製服務器模板90
7.4.2基於操作系統安裝鏡像烘焙模板91
7.4 .3基於供應鏡像烘焙模板91
7.4.4基於Unikernel構建模板92
7.4.5在不啟動服務器的情況下自定義服務器模板92
7.5更新服務器模板92
7.5.1重新烘烤模板93
7.5.2烘焙新模板93
7.5.3版本控制服務器模板93
7.6構建基於角色的模板95
7.6.1模式:分層模板95
7.6.2共享模板的基礎腳本96
7.7自動化服務器模板管理96
7.7.1在烘焙前自定義服務器96
7.7.2實踐:自動測試服務器模板97
7.8結語97
第8章服務器更新與變更模式98
8.1服務器變更管理模型99
8.1.1臨時性變更管理99
8.1.2持續配置同步99
8.1.3不可變服務器99
8.1.4容器化服務器100
8.2通用模式和實踐100
8.2.1實踐:最小化服務器模板101
8.2.2實踐:當服務器模板變更時更換服務器101
8.2.3模式:鳳凰服務器101
8.3持續部署的模式與實踐102
8.3.1模式:無主服務器的配置管理102
8.3.2實踐:應用Cron 103
8.3.3持續同步流104
8.3.4未配置領域104
8.4不可變服務器的模式與實踐106
8.4.1服務器鏡像作為製品106
8.4.2使用不可變服務器簡化確認管理工具106
8.4.3不可變服務器流程107
8.4.4使用不可變服務器引導配置108
8.4.5事務性服務器更新109
8.5管理配置定義的實踐109
8.5.1實踐:保持配置定義最小化109
8.5.2組織定義110
8.5.3實踐:使用測試驅動開發來驅動良好的設計110
8.6結語110
第9章定義基礎設施的模式111
9.1環境112
9.1.1反模式:手動製作的基礎設施112
9.1.2定義基礎設施棧即代碼112
9.1.3反模式:每個環境單獨的定義文件114
9.1.4模式:可重用的定義文件114
9.1.5實踐:測試並推進棧定義115
9.1.6自服務的環境116
9.2組織基礎設施116
9.2.1反模式:單體棧116
9.2.2遷移基礎設施時避免“直接遷移” 118
9.2.3將應用程序環境分到不同的棧中118
9.2.4管理棧之間的配置參數119
9.2 .5共享基礎設施元素120
9.2.6實踐:應用程序代碼和基礎設施代碼一起管理122
9.2.7共享定義的方法123
9.2.8實踐:基礎設施設計要與變更範圍 配124
9.2.9示例:微服務的基礎設施設計125
9.3運行定義工具128
9.4結語128
第三部分實踐
第10章基礎設施的軟件工程實踐131
10.1系統質量132
10.1.1低質量的系統很難變更132
10.1.2高質量的系統能更容易、更安全地變更132
10.1.3基於代碼的基礎設施質量133
10.1.4快速反饋133
10.2基礎設施管理的版本控制系統133
10.3持續集成134
10.3.1持續測試分支不是持續集成134
10.3.2誰破壞了構建136
10.3.3忽略失敗的測試137
10.3.4針對基礎設施的持續集成137
10.4持續交付137
10.4.1集成階段的問題137
10.4.2部署流水線和變更流水線138
10.4.3持續交付不是持續部署139
10.5代碼質量140
10.5.1整潔代碼140
10.5.2實踐:管理技術債務140
10.6管理重大的基礎設施變更141
10.7結語142
第11章測試基礎設施變更143
11.1敏捷測試方法144
11.1.1自動化測試提供快速反饋144
11.1.2有機地構建一個測試套件145
11.2構建測試套件:測試金字塔145
11.2.1避免失衡的測試套件146
11.2.2實踐:盡可能在最低層級進行測試147
11.2.3實踐:僅實現需要的層級148
11.2.4實踐:經常刪減測試套件148
11.2.5實踐:持續評審測試的有效性148
11.3實現均衡的測試套件149
11.3.1低層級測試150
11.3.2中間層級測試151
11.3.3高層級測試154
11.3.4測試運維質量155
11.4管理測試代碼156
11.4.1實踐:將測試代碼與所測代碼放在一起156
11.4.2反模式:反射測試156
11.4.3隔離組件進行測試的技巧157
11.4.4重構組件以便隔離158
11.4 .5管理外部依賴158
11.4.6測試設置159
11.5測試的角色和工作流161
11.5.1原則:人們應該為所構建的東西編寫測試161
11.5.2編寫測試的習慣162
11.5.3原則:每個人都應該能夠使用測試工具162
11.5.4質量分析師的價值162
11.5.5測試驅動開發163
11.6結語164
第12章基礎設施的變更管理流水線165
12.1變更管理流水線的好處166
12.2設計流水線的準則166
12.2.1確保每個階段的一致性167
12.2.2對於每個變更都立即得到反饋167
12.2.3在手動階段之前運行自動階段168
12.2.4儘早獲得類生產環境168
12.3基本流水線設計169
12.3.1本地開發階段169
12.3.2構建階段169
12.3.3發布配置製品170
12.3.4自動化測試階段171
12.3.5手動驗證階段172
12.3.6上線173
12.3.7流水線的節奏173
12.4使用流水線的實踐174
12.4.1實踐:證明每個變更都對生產準備就緒174
12.4.2實踐:每個變更都始於流水線起點175
12.4.3實踐:出現錯誤時停止流水線175
12.5擴展流水線到更複雜的系統175
12.5.1模式:扇入型流水線176
12.5.2實踐:保持較短的流水線179
12.5.3實踐:解耦流水線179
12.5.4集成模型180
12.6處理組件之間依賴的技巧181
12.6.1模式:庫依賴181
12.6.2模式:自置備的服務實例183
12.6.3提供預發布的庫構建183
12.6.4為消費者提供服務的測試實例184
12.6.5將服務的測試實例用作消費者185
12.7管理組件間接口的實踐186
12.7.1實踐:保證接口的向後兼容性186
12.7.2實踐:從發布解耦部署186
12.7.3實踐:使用版本相容187
12.7.4實踐:提供測試替身187
12.7.5實踐:用契約測試來測試提供者188
12.7 .6實踐:用參考消費者來測試188
12.7.7實踐:提供者接口的冒煙測試188
12.7.8實踐:運行消費者驅動契約測試188
12.8結語189
第13章基礎設施團隊的工作流190
13.1任何可以自動化的都要自動化190
13.1.1手動變更191
13.1.2臨時的自動化191
13.1.3自主的自動化192
13.1.4自主的自動化工作流193
13.2使用本地沙箱194
13.2.1使用本地虛擬化做沙箱194
13.2.2具有本地測試的工作流示例196
13.2.3使用虛擬化平台做沙箱197
13.3代碼庫組織模式197
13.3.1反模式:基於分支的代碼庫1 98
13.3.2模式:每個組件一個主幹199
13.3.3模式:單一主幹199
13.4工作流的效率199
13.4.1加快變更199
13.4.2代碼評審200
13.4.3將治理融入工作流200
13.5結語202
第14章動態基礎設施的連續性203
14.1服務連續性204
14.1.1真實可用性204
14.1.2用動態服務器池做恢復205
14.1.3為動態基礎設施設計軟件206
14.1.4為連續性劃分系統208
14.2零停機變更208
14.2.1模式:藍綠替換209
14.2.2模式:鳳凰替換209
14.2.3實踐:縮小替換的範圍210
14.2.4模式:金絲雀替換211
14.2.5為零停機替換路由流量212
14.2.6有數據的零停機變更213
14.3數據連續性214
14.3.1冗餘地複制數據214
14.3.2重新生成數據215
14.3.3委託數據持久化215
14.3.4備份到持久存儲215
14.4災難恢復216
14.4.1持續的災難恢復217
14.4.2災備計劃:為災難做計劃218
14.4.3實踐:優先重建而不是冷備份218
14.4.4通過流水線持續監控219
14.5安全220
14.5.1自動掩蓋危害220
14.5.2以可靠的更新作為防護221
14.5.3包的來源221
14.5.4自動加固222
14.5.5流水線中安全驗證的自動化223
14.5.6變更流水線的漏洞223
14.5.7管理雲賬號的安全風險224
14.6結語225
第15章基礎設施即代碼的組織要求226
15.1演進式架構226
15.1.1在實戰中學習228
15.1.2從先驅者流水線開始228
15.2度量有效性229
15.2.1首先對期望的結果達成一致229
15.2.2選擇有助於團隊的度量指標230
15.2.3跟踪和改善週期時間230
15.2.4使用看板可視化工作232
15.2.5回顧會議及事後分析233
15.3組織授權用戶233
15.3.1劃分功能模型的陷阱233
15.3.2採取自服務模型235
15.3.3承擔全部責任:誰構建,誰運行235
15.3.4組織跨職能團隊236
15.4持續變更管理的治理237
15.4.1提供穩固的構建單元237
15.4.2在流水線中證明運維就緒238
15.4.3共享運維質量的所有權238
15.4.4審查和審計自動化流程238
15.4.5優化發現和修復問題的時間239
15.5結語:永無止境239
關於作者240
關於封面240
作者介紹
基夫·莫里斯(Kief Morris)是ThoughtWorks歐洲區持續交付和DevOps帶頭人,致力於幫助客戶尋找建立和管理基礎設施運維工作的更有效方法;擁有近20年設計、構建和運行自動化IT服務器基礎設施的經驗。