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