內(nèi)容簡介
這是一部從原理與實(shí)踐角度講解云原生應(yīng)用管理的著作,是阿里云容器服務(wù)團(tuán)隊(duì)工程師多年云原生應(yīng)用開發(fā)與管理經(jīng)驗(yàn)的總結(jié)。詳細(xì)講解了Helm、Kustomize、CNAB、Operator等云原生應(yīng)用管理框架和工具的應(yīng)用場景、功能和使用,并通過源碼講解了它們的實(shí)現(xiàn)原理,同時提供了大量的案例和代碼解析,能幫助讀者輕松掌握云原生應(yīng)用的管理。
全書一共16章,分為4個部分:
第壹部分(第1~4章) Helm
首先介紹了Helm的發(fā)展歷程、適用場景、架構(gòu)設(shè)計、工作機(jī)制;然后以Chart為例,講解了Helm的功能和使用方法;*后通過源代碼分析了Helm的實(shí)現(xiàn)原理。
第二部分(第5~8章) Kustomize
首先介紹了Kustomize的誕生背景、適用場景、工作機(jī)制;然后詳細(xì)講解了它的功能和使用方法;*后通過源代碼分析了它的實(shí)現(xiàn)原理。
第三部分(第9~12章) CNAB
首先介紹了CNAB的基本概念、原理和規(guī)范;然后以Porter為例,詳細(xì)講解了它的功能、用法和實(shí)戰(zhàn);*后通過源代碼分析了Porter的實(shí)現(xiàn)原理,同時講解了mixin的開發(fā)。
第四部分(第13~16章) Operator
首先介紹了Operator的概念、發(fā)展和工作原理,然后詳細(xì)講解了它的功能、用法、架構(gòu)、組件和實(shí)戰(zhàn),*后通過源代碼分析了它的實(shí)現(xiàn)原理。
前言
第1章 什么是Helm 1
1.1 Helm的發(fā)展歷程 1
1.2 Helm的適用場景 2
1.3 Helm的社區(qū)和生態(tài) 3
1.4 Helm的架構(gòu)設(shè)計與工作原理 4
1.4.1 Helm Client 4
1.4.2 Tiller 5
1.5 本章小結(jié) 5
第2章 Chart 7
2.1 Chart文件結(jié)構(gòu) 7
2.1.1 Chart.yaml 8
2.1.2 Chart license, README notes 9
2.1.3 Chart Dependences 10
2.1.4 template和values 14
2.2 Helm功能初體驗(yàn) 18
2.2.1 前置條件 18
2.2.2 Helm的三大基本概念 18
2.2.3 安裝Helm 18
2.2.4 安裝第一個Chart 19
2.2.5 查看當(dāng)前安裝實(shí)例 21
2.2.6 刪除安裝的實(shí)例 21
2.2.7 Helm后端存儲 22
2.3 helm install 23
2.4 Helm 更新與回滾 25
2.4.1 helm upgrade 25
2.4.2 helm history 25
2.4.3 helm rollback 26
2.4.4 一些有用的更新參數(shù) 26
2.5 helm repo 26
2.6 創(chuàng)建自己的Chart 28
2.7 Helm Hooks 29
2.7.1 Helm支持的Hooks種類 30
2.7.2Hooks 與Release 生命周期的關(guān)系 30
2.7.3 簡單的Hooks示例 31
2.7.4使用crd-install來定義一個CRD 33
2.7.5 自動刪除先前版本的Hooks 33
2.8 Helm插件 34
2.9 Chart測試 36
2.10 Chart模板開發(fā)高階介紹 38
2.10.1創(chuàng)建第一個template文件 39
2.10.2給template添加動態(tài)變量 41
2.10.3 模板函數(shù)與管道 42
2.10.4 邏輯控制 45
2.10.5 變量 51
2.10.6 自定義模板 53
2.10.7 在模板中引用文件 58
2.10.8 創(chuàng)建一個NOTES.txt文件 60
2.11 本章小結(jié) 61
第3章 使用Helm部署Wordpress實(shí)戰(zhàn) 63
3.1 下載Wordpress Chart 63
3.2 Chart.yaml 64
3.3 requirements.yaml 64
3.4 Charts文件夾 65
3.5 template文件夾 65
3.5.1 helper文件 66
3.5.2 NOTES.txt 68
3.5.3 其他文件 69
3.5.4 tests文件 71
3.6 README.md 72
3.7 values.yaml 72
3.8 安裝 73
3.9 本章小結(jié) 76
第4章 Helm 源碼分析 77
4.1 helm install 77
4.1.1 locateChartPath 78
4.1.2 ensureHelmClient 81
4.1.3 InstallCmd Run 81
4.1.4 installReleaseFromChart 83
4.1.5 setupConnection 84
4.1.6 Helm Client install Function 85
4.1.7 返回Release狀態(tài)信息 87
4.2 Helm Install Server 88
4.2.1 prepareRelease 89
4.2.2 performRelease 90
4.3 Helm update 93
4.3.1 update 命令的定義 93
4.3.2 Update 服務(wù)端的實(shí)現(xiàn) 94
4.4 helm ls 96
4.4.1 Client 端實(shí)現(xiàn) 96
4.4.2 Server端實(shí)現(xiàn) 98
4.5 Helm Rollback 100
4.6 Helm delete 102
4.7 Helm 3簡介 104
4.8 本章小結(jié) 108
第5章 Kustomize入門 109
5.1 Kustomize介紹 109
5.2 Kustomize原理介紹 111
5.3 Kustomize快速入門 113
5.3.1 安裝Kustomize 113
5.3.2通過Kustomize部署helloworld 114
5.4 本章小結(jié) 117
第6章 Kustomize詳解 118
6.1 Kustomize術(shù)語 118
6.2 Kustomize配置詳解 121
6.2.1 資源 121
6.2.2 生成器 122
6.2.3 轉(zhuǎn)換器 124
6.3 命令行使用方法 128
6.3.1 命令行使用 128
6.3.2 kustomize build 130
6.3.3 kustomize edit 136
6.3.4 kustomize create 141
6.3.5 kustomize conf?ig 143
6.4 基本用法 147
6.4.1 使用conf?igGeneration 147
6.4.2 使用generatorOptions 149
6.4.3 配置轉(zhuǎn)換器 150
6.4.4 使用變量 153
6.4.5 鏡像替換 154
6.4.6 補(bǔ)丁 156
6.5 Kustomize插件 161
6.5.1 插件介紹 162
6.5.2 Exec類型插件 163
6.5.3 Go庫文件插件 165
6.6 工作流 169
6.6.1 創(chuàng)建配置倉庫 169
6.6.2 配置下發(fā) 170
6.6.3 使用共享配置 170
6.7 本章小結(jié) 172
第7章 Kustomize實(shí)戰(zhàn) 173
7.1 示例介紹 173
7.1.1 基礎(chǔ)配置 174
7.1.2 測試環(huán)境 177
7.1.3 生產(chǎn)環(huán)境 180
7.1.4 配置管理 185
7.2通過插件實(shí)現(xiàn)不同環(huán)境下部署不同的模板 186
7.2.1 項(xiàng)目介紹 187
7.2.2 插件實(shí)現(xiàn) 188
7.2.3 運(yùn)行插件 191
7.3 本章小結(jié) 193
第8章 Kustomize源碼分析 194
8.1 Kustomize 執(zhí)行流程介紹 194
8.2 kustomize build命令解析 196
8.2.1 NewCmdBuild函數(shù)解析 197
8.2.2NewCmdBuildPrune函數(shù)詳解 198
8.2.3 RunBuild函數(shù)詳解 199
8.2.4 AccumulateTarget 解析 203
8.2.5 addHashesToNames函數(shù) 210
8.2.6 ResolveVars函數(shù) 211
8.2.7 computeInventory函數(shù) 212
8.3 kustomize edit命令分析 214
8.4 add子命令 215
8.5 set子命令 225
8.6 Fix子命令 228
8.7 remove子命令 229
8.8 kustomize create 命令分析 230
8.9 本章小結(jié) 233
第9章 走近CNAB 234
9.1 什么是CNAB 234
9.2 CNAB 基本概念和原理 236
9.3 CNAB規(guī)范 238
9.3.1 bundle.json文件格式 239
9.3.2 調(diào)用鏡像 245
9.3.3 應(yīng)用包運(yùn)行規(guī)范 246
9.3.4 包格式規(guī)范 247
9.4 Duffle和Porter 248
9.4.1 使用Duffle打包Wordpress 248
9.4.2 使用Porter打包Wordpress 250
9.4.3 使用Duffle還是Porter 251
9.5 本章小結(jié) 251
第10章 Porter使用詳解 252
10.1 Porter快速上手 252
10.1.1 安裝Porter 252
10.1.2 創(chuàng)建應(yīng)用包 253
10.1.3 部署應(yīng)用 254
10.1.4 更新和卸載應(yīng)用 255
10.2 創(chuàng)建應(yīng)用包 255
10.2.1 應(yīng)用包元數(shù)據(jù) 257
10.2.2 mixin 257
10.2.3 參數(shù) 258
10.2.4 輸出 259
10.2.5 校驗(yàn)規(guī)則 260
10.2.6 憑據(jù) 260
10.2.7 應(yīng)用包操作 261
10.2.8 自定義操作 263
10.2.9 依賴 263
10.2.10 鏡像 263
10.2.11 自定義Dockerf?ile 264
10.3 mixin 265
10.3.1 安裝mixin 266
10.3.2 常用mixin介紹 266
10.4 Porter命令詳解 270
10.5 OCI倉庫與應(yīng)用分發(fā) 276
10.6使用Porter分發(fā)CNAB應(yīng)用 278
10.6.1 發(fā)布應(yīng)用包 278
10.6.2 復(fù)制應(yīng)用包 280
10.6.3 導(dǎo)出應(yīng)用包 281
10.7 本章小結(jié) 282
第11章 Porter實(shí)戰(zhàn) 283
11.1 創(chuàng)建基本的應(yīng)用框架 283
11.1.1 環(huán)境準(zhǔn)備 283
11.1.2 創(chuàng)建基本的應(yīng)用框架 284
11.2 支持參數(shù)和輸出 288
11.3 定義多個操作步驟 291
11.4 發(fā)布應(yīng)用包 295
11.5 使用應(yīng)用包依賴 298
11.6 本章小結(jié) 300
第12章 Porter mixin開發(fā)和源碼解析 301
12.1 mixin實(shí)現(xiàn)原理 301
12.1.1 mixin調(diào)用機(jī)制 301
12.1.2 mixin API 302
12.2 mixin開發(fā) 306
12.2.1 創(chuàng)建mixin項(xiàng)目 306
12.2.2 mixin代碼概覽 308
12.2.3 實(shí)現(xiàn)build命令 312
12.2.4 定義JSON Schema 313
12.2.5 實(shí)現(xiàn)參數(shù)組裝邏輯 316
12.3 Porter build源碼解析 320
12.4 Porter install源碼解析 329
12.4.1 準(zhǔn)備應(yīng)用包 330
12.4.2 準(zhǔn)備和執(zhí)行依賴 332
12.4.3 執(zhí)行主應(yīng)用包操作 336
12.4.4Docker驅(qū)動的運(yùn)行過程 339
12.5 Porter運(yùn)行時源碼解析 342
12.6 本章小結(jié) 346
第13章 全面了解Operator 347
13.1 初識Operator 348
13.1.1 什么是Operator 348
13.1.2 Operator的發(fā)展 349
13.1.3Operator的社區(qū)與生態(tài) 351
13.2 Operator Framework 352
13.3 Operator 工作原理 354
13.4 本章小結(jié) 357
第14章 Operator Framework功能詳解 358
14.1 Operator SDK 358
14.1.1 安裝Operator SDK CLI 358
14.1.2 使用Operator SDK CLI 360
14.1.3 Operator的作用域 363
14.1.4Operator SDK生成的代碼框架 365
14.1.5 controller-runtime 367
14.1.6使用Predicates過濾事件 381
14.1.7Operator SDK的架構(gòu)演進(jìn) 383
14.2 Operator Lifecycle Manager 387
14.2.1 OLM組件模型定義 387
14.2.2 OLM結(jié)構(gòu)介紹 389
14.2.3 OLM的安裝 390
14.2.4 依賴解析和升級管理 392
14.2.5 operator-registry 395
14.3 Operator Metering 398
14.3.1Operator Metering基本架構(gòu) 398
14.3.2Operator Metering核心組件 400
14.4 本章小結(jié) 407
第15章 Operator實(shí)戰(zhàn) 408
15.1基于Operator SDK構(gòu)建Operator 408
15.1.1生成第一個Operator項(xiàng)目 408
15.1.2 創(chuàng)建自定義資源定義 409
15.1.3 創(chuàng)建Controller 410
15.1.4 Operator的構(gòu)建和運(yùn)行 416
15.2使用Operator Lifecycle Manager 419
15.2.1 構(gòu)建一個CSV 419
15.2.2基于Operator Lifecycle Manager測試Operator 423
15.3 部署和使用Operator Metering 425
15.3.1 安裝Operator Metering 426
15.3.2定制化Prometheus Report Queries 426
15.4 本章小結(jié) 432
第16章 Operator示例:cert-manager源碼解析 433
16.1 cert-manager基本介紹 433
16.2 cert-manager組件架構(gòu)解析 434
16.3基于controller-runtime的cainjector架構(gòu)解析 441
16.3.1 cainjector的啟動流程 441
16.3.2cainjector的Reconcile函數(shù) 446
16.4 本章小結(jié) 448