本書用通俗易懂的語言介紹云原生理論基礎,用豐富的實際案例還原云原生測試場景,是一本專注于講述云原生測試的實戰(zhàn)圖書。本書共 9 章,第 1 章至第 3 章主要介紹云原生基礎,包括云原生的概念和相關測試挑戰(zhàn),Docker 的核心能力和測試場景,Kubernetes 的集群搭建、常用對象和定制化開發(fā)等內容;第 4 章至第 6 章主要介紹云原生測試場景,包括在 Kubernetes 中實施混沌工程、性能測試、穩(wěn)定性測試,使用 Prometheus搭建監(jiān)控系統(tǒng)等內容;第 7 章至第 9 章主要介紹云原生與其他領域的結合,包括邊緣計算、CI/CD 和大數(shù)據(jù)技術與 Kubernetes 結合的測試場景及對應的測試方案。
伴隨全行業(yè)上云的逐步深化,企業(yè)云原生化轉型進程將進一步加速。在云原生背景下,更快的開發(fā)節(jié)奏,對測試要求會更高,國內各大廠針對云原生測試開始設置專項崗位。本書作者在人工智能與云原生測試領域深耕多年,具有豐富的云原生測試經(jīng)驗以及測試工具開發(fā)經(jīng)驗,他在TesterHome社區(qū)寫作的技術文章廣受業(yè)內人士好評。作者希望有更多的測試同行進入云原生領域,云原生領域擁有較高的復雜度和深度,可以為測試人員帶來更多的機會。
本書是一本詳細介紹云原生測試的專業(yè)圖書。
通過閱讀本書,讀者可以:
***掌握云原生的基礎內容,包括云原生的概念和相關測試挑戰(zhàn),Docker的核心能力和測試場景,Kubernetes的集群搭建、常用對象和定制化開發(fā)等。
***深入云原生測試的場景,包括混沌工程、性能測試、穩(wěn)定性測試,以及使用Prometheus搭建監(jiān)控系統(tǒng)等。
***了解云原生與其他領域(包括邊緣計算、CI/CD、大數(shù)據(jù)技術等)結合的測試場景和對應的測試方案。
孫高飛
騰訊優(yōu)圖實驗室資深測試開發(fā)工程師,專注人工智能與云原生領域的測試實踐,曾就職于第四范式。TesterHome社區(qū)專欄作者,并作為社區(qū)管理員參與組織過多場中國互聯(lián)網(wǎng)測試開發(fā)大會(MTSC),是MTSC2023技術委員會成員。
第 1 章 認識云原生 1
1.1 什么是云原生 1
1.2 云原生的測試挑戰(zhàn) 3
1.3 本章總結 4
第 2 章 容器技術基礎 5
2.1 構建瀏覽器集群 5
2.1.1 Selenium Grid 5
2.1.2 Docker 部署 Selenium Grid 6
2.1.3 小結 8
2.2 容器隔離的原理 9
2.2.1 隔離 9
2.2.2 Linux 名字空間 10
2.2.3 小結 13
2.3 網(wǎng)絡模式 13
2.3.1 bridge 網(wǎng)絡模式 13
2.3.2 host 網(wǎng)絡模式 16
2.3.3 container 網(wǎng)絡模式 17
2.3.4 小結 18
2.4 容器鏡像 19
2.4.1 鏡像構建 19
2.4.2 聯(lián)合文件系統(tǒng) 23
2.4.3 鏡像分層的優(yōu)勢 25
2.4.4 鏡像掃描工具的開發(fā) 26
2.4.5 小結 28
2.5 本章總結 28
第 3 章 Kubernetes 基礎 29
3.1 深入解析 Pod 29
3.1.1 Pod 的架構 29
3.1.2 Pod 的調度 31
3.1.3 Pod 的資源管理 34
3.1.4 小結 37
3.2 服務高可用設計 37
3.2.1 高可用的常見設計 38
3.2.2 服務副本與水平擴展 38
3.2.3 基于 Service 的負載均衡網(wǎng)絡 41
3.2.4 基于探針的健康檢查 43
3.2.5 小結 46
3.3 再談鏡像掃描工具 50
3.3.1 DaemonSet 定義 50
3.3.2 DaemonSet 與 Headless Service 51
3.3.3 在容器中調用 Docker 52
3.3.4 小結 52
3.4 離線業(yè)務 52
3.4.1 Job 52
3.4.2 CronJob 54
3.4.3 小結 54
3.5 K8s 開發(fā)基礎 55
3.5.1 客戶端的初始化 55
3.5.2 基本 API 的使用 56
3.5.3 資源回收工具的開發(fā) 58
3.5.4 讓工具在集群中運行-InCluster 模式和 RBAC 61
3.5.5 解決容器時區(qū)問題 64
3.5.6 小結 65
3.6 本章總結 66
第 4 章 混沌工程 67
4.1 什么是混沌工程 67
4.2 高可用測試的理論 67
4.2.1 冪等與重試 68
4.2.2 狀態(tài)管理 69
4.2.3 CAP 70
4.2.4 BASE 73
4.2.5 監(jiān)控告警 75
4.2.6 小結 75
4.3 高可用掃描工具 75
4.3.1 掃描規(guī)則 76
4.3.2 代碼實現(xiàn) 76
4.3.3 小結 80
4.4 故障注入工具 81
4.4.1 故障注入工具的底層原理 81
4.4.2 開源工具的選擇 82
4.4.3 Chaos Mesh 的架構 83
4.4.4 K8s 的 Operator 84
4.4.5 Chaos Dashboard 87
4.4.6 chaosd-server 88
4.4.7 sidecar 模式的故障注入 89
4.4.8 jvm-sandbox 97
4.4.9 故障注入的注意點 100
4.4.10 小結 100
4.5 K8s 中的特殊故障 101
4.5.1 Pod 無法被刪除 101
4.5.2 驅逐策略與搶占優(yōu)先級 103
4.5.3 K8s 核心組件故障 105
4.5.4 小結 107
4.6 高可用的評估手段 107
4.6.1 以模擬 SLA 為角度評估 107
4.6.2 以故障場景為角度評估 109
4.6.3 RPO 與 RTO 109
4.6.4 小結 110
4.7 本章總結 110
第 5 章 性能測試與監(jiān)控 111
5.1 Prometheus 快速入門 112
5.1.1 快速部署 112
5.1.2 架構介紹 113
5.1.3 可視化 114
5.1.4 小結 116
5.2 PromQL 詳解 116
5.2.1 理解時間序列 117
5.2.2 理解指標類型 117
5.2.3 語法詳解 119
5.2.4 HTTP API 123
5.2.5 小結 126
5.3 容量測試 126
5.3.1 超賣的風險 127
5.3.2 資源的初步評估 128
5.3.3 統(tǒng)計具體的資源 130
5.3.4 小結 134
5.4 分布式壓力測試工具 JMeter 134
5.4.1 部署 JMeter 集群 135
5.4.2 小結 136
5.5 測試 K8s 的性能 136
5.5.1 測試方法 136
5.5.2 Kubemark 簡介 137
5.5.3 Kubemark 部署 138
5.5.4 小結 143
5.6 本章總結 143
第 6 章 穩(wěn)定性測試與監(jiān)控 144
6.1 什么是穩(wěn)定性測試 144
6.2 List-Watch 145
6.2.1 K8s 的控制器模型 145
6.2.2 List-Watch 簡介 146
6.2.3 小結 148
6.3 構建事件監(jiān)控組件 149
6.3.1 Pod 與容器的狀態(tài) 149
6.3.2 Pod 的 Condition 和 Phase 150
6.3.3 獲取異常容器 152
6.3.4 獲取異常信息 153
6.3.5 NPD 154
6.3.6 小結 157
6.4 持續(xù)性觀測 157
6.4.1 自定義 Exporter 157
6.4.2 服務可用時間 164
6.4.3 業(yè)務巡檢與Pushgateway 167
6.4.4 小結 168
6.5 Operator 168
6.5.1 什么是 Operator 169
6.5.2 Prometheus Operator 170
6.5.3 小結 171
6.6 本章總結 171
第 7 章 邊緣計算 172
7.1 什么是邊緣計算 172
7.1.1 云計算的不足 172
7.1.2 就近計算的設計 173
7.1.3 小結 174
7.2 K8s 與邊緣計算 174
7.2.1 邊緣自治 175
7.2.2 分布式健康檢查 176
7.2.3 邊緣調度 177
7.2.4 就近計算 180
7.2.5 邊緣灰度 182
7.2.6 邊緣存儲 184
7.2.7 小結 185
7.3 核心測試場景 185
7.3.1 邊緣計算的容量測試 186
7.3.2 邊緣計算的高可用測試 186
7.3.3 數(shù)據(jù)通信測試 188
7.3.4 調度測試 189
7.3.5 小結 190
7.4 本章總結 190
第 8 章 持續(xù)集成和持續(xù)部署 191
8.1 構建 CI/CD 系統(tǒng)的關鍵 191
8.1.1 CI/CD 與流水線 191
8.1.2 規(guī)模擴大帶來的挑戰(zhàn) 194
8.1.3 高度自動化的工程能力 195
8.1.4 小結 196
8.2 Jenkins 流水線 196
8.2.1 流水線基礎 197
8.2.2 多分支流水線 200
8.2.3 Jenkins 共享庫 202
8.2.4 小結 207
8.3 K8s 中的 CI/CD 207
8.3.1 Jenkins 與 Docker 207
8.3.2 Jenkins 與 K8s 208
8.3.3 小結 215
8.4 環(huán)境治理 215
8.4.1 環(huán)境的隔離級別 215
8.4.2 K8s 中的資源隔離 216
8.4.3 在 K8s 中實現(xiàn)邏輯隔離 218
8.4.4 Helm 221
8.4.5 小結 223
8.5 本章總結 223
第 9 章 云原生與大數(shù)據(jù) 224
9.1 什么是大數(shù)據(jù) 224
9.1.1 大數(shù)據(jù)的 4 個特征 224
9.1.2 分布式存儲 225
9.1.3 分布式計算 226
9.1.4 批處理和流計算 226
9.1.5 大數(shù)據(jù)生態(tài) 227
9.1.6 小結 228
9.2 K8s 中的分布式計算 228
9.2.1 K8s 中的存儲 229
9.2.2 Spark Operator 233
9.2.3 小結 235
9.3 Spark 基礎 235
9.3.1 搭建本地環(huán)境 236
9.3.2 Spark 的運行機制 236
9.3.3 RDD 基礎 237
9.3.4 小結 239
9.4 典型測試場景介紹 239
9.4.1 shuffle 與數(shù)據(jù)傾斜 239
9.4.2 分區(qū)對性能的影響 240
9.4.3 多種數(shù)據(jù)源的對接 241
9.4.4 功能測試與數(shù)據(jù)質量監(jiān)控242
9.4.5 流計算與數(shù)據(jù)一致性 243
9.4.6 小結 245
9.5 造數(shù)工具 245
9.5.1 造數(shù)的難點與解決方案 246
9.5.2 代碼實現(xiàn) 247
9.5.3 非結構化數(shù)據(jù)的構建 250
9.5.4 小結 252
9.6 本章總結 252