Kubernetes微服務(wù)實戰(zhàn)
定 價:119 元
叢書名:云計算與虛擬化技術(shù)叢書
- 作者:[印度] 吉吉·賽凡(Gigi Sayfan)
- 出版時間:2020/6/1
- ISBN:9787111655763
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP316.85
- 頁碼:0
- 紙張:
- 版次:
- 開本:16開
本書深入介紹Kubernetes和微服務(wù)之間的協(xié)同關(guān)系。首先介紹如何使用示例應(yīng)用程序Delinkcious,它將作為貫穿全書的動手實驗,幫助讀者在實際應(yīng)用程序的上下文中理解微服務(wù)和Kubernetes的概念。接下來,介紹了如何設(shè)置CI/CD流水線以及使用Kubernetes ConfigMap配置微服務(wù)。然后介紹微服務(wù)安全和實現(xiàn)REST、gRPC API和Delinkcious數(shù)據(jù)存儲的實踐。除此之外,本書還探索了Nuclio項目,介紹如何在Kubernetes上運行一個無服務(wù)器任務(wù),并管理和實現(xiàn)數(shù)據(jù)密集型測試。在*后幾章中,你將在Kubernetes上部署微服務(wù),并學(xué)習(xí)如何做好系統(tǒng)的監(jiān)控。*后,你將逐漸發(fā)現(xiàn)服務(wù)網(wǎng)格的重要性,以及如何將Istio集成到Delinkcious集群中。
譯者序
前言
關(guān)于評審者
第1章 面向開發(fā)人員的Kubernetes簡介 1
1.1 技術(shù)需求 1
1.1.1 安裝Docker 1
1.1.2 安裝kubectl 2
1.1.3 安裝Minikube 2
1.1.4 本章代碼 2
1.2 Kubernetes簡介 2
1.2.1 容器編排平臺 2
1.2.2 Kubernetes發(fā)展歷史 2
1.2.3 Kubernetes現(xiàn)狀 3
1.3 Kubernetes架構(gòu) 3
1.3.1 控制平面 4
1.3.2 數(shù)據(jù)平面 5
1.4 微服務(wù)的完美搭檔 6
1.4.1 微服務(wù)打包和部署 6
1.4.2 微服務(wù)公開和發(fā)現(xiàn) 8
1.4.3 微服務(wù)安全 9
1.4.4 微服務(wù)驗證和授權(quán) 11
1.4.5 微服務(wù)升級 12
1.5 創(chuàng)建本地集群 14
1.5.1 安裝Minikube 14
1.5.2 探索集群 16
1.5.3 安裝Helm 17
1.6 小結(jié) 19
1.7 擴展閱讀 19
第2章 微服務(wù)入門 20
2.1 技術(shù)需求 21
2.1.1 在macOS上通過Homebrew安裝Go 21
2.1.2 在其他平臺上安裝Go 21
2.1.3 本章代碼 21
2.2 微服務(wù)編程—少即是多 21
2.3 微服務(wù)自治 23
2.4 使用接口和契約 23
2.5 通過API公開服務(wù) 24
2.6 使用客戶端庫 24
2.7 管理依賴 25
2.8 協(xié)調(diào)微服務(wù) 25
2.9 利用所有權(quán) 26
2.10 理解康威定律 27
2.10.1 垂直組織 27
2.10.2 水平組織 28
2.10.3 矩陣組織 28
2.11 跨服務(wù)故障排除 28
2.12 利用共享服務(wù)庫 29
2.13 選擇源代碼控制策略 29
2.13.1 單體倉庫 29
2.13.2 多倉庫 30
2.13.3 混合模式 30
2.14 選擇數(shù)據(jù)策略 30
2.14.1 每個微服務(wù)對應(yīng)一個數(shù)據(jù)存儲 31
2.14.2 運行分布式查詢 31
2.14.3 使用Saga模式管理跨服務(wù)事務(wù) 33
2.15 小結(jié) 35
2.16 擴展閱讀 36
第3章 示例應(yīng)用程序—Delinkcious 37
3.1 技術(shù)需求 37
3.1.1 Visual Studio Code 38
3.1.2 GoLand 38
3.1.3 LiteIDE 38
3.1.4 其他選項 38
3.1.5 本章代碼 38
3.2 為什么選擇Go 39
3.3 認(rèn)識Go kit 39
3.3.1 使用Go kit構(gòu)建微服務(wù) 40
3.3.2 理解傳輸 41
3.3.3 理解端點 41
3.3.4 理解服務(wù) 42
3.3.5 理解中間件 42
3.3.6 理解客戶端 43
3.3.7 生成樣板 43
3.4 Delinkcious目錄結(jié)構(gòu) 43
3.4.1 cmd子目錄 44
3.4.2 pkg子目錄 44
3.4.3 svc子目錄 45
3.5 Delinkcious微服務(wù) 45
3.5.1 對象模型 46
3.5.2 服務(wù)實現(xiàn) 47
3.5.3 支持函數(shù)實現(xiàn) 50
3.5.4 通過客戶端庫調(diào)用API 53
3.6 數(shù)據(jù)存儲 56
3.7 小結(jié) 58
3.8 擴展閱讀 58
第4章 構(gòu)建CI/CD流水線 59
4.1 技術(shù)需求 59
4.2 理解CI/CD流水線 60
4.3 選擇CI/CD流水線工具 61
4.4.1 Jenkins X 61
4.4.2 Spinnaker 62
4.4.3 Travis CI和CircleCI 62
4.4.4 Tekton 62
4.4.5 Argo CD 63
4.4.6 自研工具 63
4.4 GitOps 63
4.5 使用CircleCI構(gòu)建鏡像 64
4.5.1 查看源代碼樹 64
4.5.2 配置CI流水線 65
4.5.3 理解構(gòu)建腳本 66
4.5.4 使用多階段Dockerfile對Go服務(wù)容器化 68
4.5.5 探索CircleCI界面 68
4.5.6 未來的改進(jìn) 71
4.6 為Delinkcious設(shè)置持續(xù)交付 71
4.6.1 部署Delinkcious微服務(wù) 71
4.6.2 理解Argo CD 72
4.6.3 Argo CD入門 73
4.6.4 配置Argo CD 75
4.6.5 探索Argo CD 77
4.7 小結(jié) 80
4.8 擴展閱讀 81
第5章 使用Kubernetes配置微服務(wù) 82
5.1 技術(shù)需求 82
5.2 配置包含的內(nèi)容 83
5.3 通過傳統(tǒng)方式管理配置 83
5.3.1 約定 84
5.3.2 命令行標(biāo)志 85
5.3.3 環(huán)境變量 85
5.3.4 配置文件 86
5.3.5 混合配置和默認(rèn) 90
5.3.6 12-Factor應(yīng)用程序配置 91
5.4 動態(tài)管理配置 92
5.4.1 理解動態(tài)配置 92
5.4.2 遠(yuǎn)程配置存儲 93
5.4.3 遠(yuǎn)程配置服務(wù) 93
5.5 使用Kubernetes配置微服務(wù) 93
5.5.1 使用Kubernetes ConfigMaps 94
5.5.2 Kubernetes自定義資源 102
5.5.3 服務(wù)發(fā)現(xiàn) 105
5.6 小結(jié) 105
5.7 擴展閱讀 106
第6章 Kubernetes與微服務(wù)安全 107
6.1 技術(shù)需求 107
6.2 應(yīng)用完善的安全原則 108
6.3 區(qū)分用戶賬戶和服務(wù)賬戶 110
6.3.1 用戶賬戶 110
6.3.2 服務(wù)賬戶 111
6.4 使用Kubernetes管理密鑰 114
6.4.1 Kubernetes密鑰的三種類型 114
6.4.2 創(chuàng)造自己的密鑰 115
6.4.3 將密鑰傳遞到容器 116
6.4.4 構(gòu)建一個安全的Pod 117
6.5 使用RBAC管理權(quán)限 118
6.6 通過認(rèn)證、授權(quán)和準(zhǔn)入控制訪問權(quán)限 121
6.6.1 認(rèn)證 121
6.6.2 授權(quán) 125
6.6.3 準(zhǔn)入 125
6.7 通過安全最佳實踐增強Kubernetes 126
6.7.1 鏡像安全 126
6.7.2 網(wǎng)絡(luò)安全—分而治之 127
6.7.3 鏡像倉庫安全 129
6.7.4 按需授予訪問權(quán)限 129
6.7.5 使用配額最小化爆炸半徑 130
6.7.6 實施安全上下文 132
6.7.7 使用安全策略強化Pod 133
6.7.8 強化工具鏈 134
6.8 小結(jié) 135
6.9 擴展閱讀 136
第7章 API與負(fù)載均衡器 137
7.1 技術(shù)需求 137
7.2 熟悉Kubernetes服務(wù) 138
7.3 東西流量與南北流量 140
7.4 理解ingress和負(fù)載均衡器 141
7.5 提供和使用公有REST API 141
7.5.1 構(gòu)建基于Python的API網(wǎng)關(guān)服務(wù) 141
7.5.2 添加ingress 146
7.5.3 驗證API網(wǎng)關(guān) 147
7.6 提供和使用內(nèi)部gRPC API 150
7.6.1 定義NewsManager接口 150
7.6.2 實現(xiàn)消息管理器 151
7.6.3 將NewsManager公開為gRPC服務(wù) 153
7.7 通過消息隊列發(fā)送和接收事件 158
7.7.1 NATS 159
7.7.2 在Kubernetes集群中部署NATS 159
7.7.3 使用NATS發(fā)送鏈接事件 160
7.7.4 訂閱NATS鏈接事件 162
7.7.5 處理鏈接事件 164
7.8 服務(wù)網(wǎng)格 166
7.9 小結(jié) 166
7.10 擴展閱讀 166
第8章 有狀態(tài)服務(wù) 167
8.1 技術(shù)需求 167
8.2 抽象存儲 168
8.2.1 Kubernetes存儲模型 168
8.2.2 內(nèi)置和外部存儲插件 172
8.2.3 理解CSI 173
8.3 在Kubernetes集群外存儲數(shù)據(jù) 174
8.4 使用StatefulSet在Kubernetes集群內(nèi)存儲數(shù)據(jù) 175
8.4.1 理解StatefulSet 175
8.4.2 什么時候應(yīng)該使用StatefulSet 178
8.4.3 一個大型StatefulSet示例 179
8.5 通過本地存儲實現(xiàn)高性能 183
8.5.1 將數(shù)據(jù)存儲在內(nèi)存中 183
8.5.2 將數(shù)據(jù)存儲在本地SSD硬盤上 183
8.6 在Kubernetes中使用關(guān)系型數(shù)據(jù)庫 183
8.6.1 了解數(shù)據(jù)的存儲位置 184
8.6.2 使用部署和服務(wù) 184
8.6.3 使用StatefulSet 185
8.6.4 幫助用戶服務(wù)找到StatefulSet Pod 185
8.6.5 管理模式更改 187
8.7 在Kubernetes中使用非關(guān)系型數(shù)據(jù)存儲 187
8.8 小結(jié) 191
8.9 擴展閱讀 192
第9章 在Kubernetes上運行Serverless任務(wù) 193
9.1 技術(shù)需求 193
9.2 云中的Serverless 194
9.2.1 微服務(wù)與Serverless函數(shù) 195
9.2.2 在Kubernetes上的Serverless函數(shù)模型 195
9.2.3 構(gòu)建、配置和部署Serverless函數(shù) 196
9.2.4 調(diào)用Serverless函數(shù) 196
9.3 Delinkcious鏈接檢查 196
9.3.1 設(shè)計鏈接檢查 197
9.3.2 實現(xiàn)鏈接檢查 199
9.4 使用Nuclio實現(xiàn)Serverless鏈接檢查 202
9.4.1 Nuclio簡介 202
9.4.2 創(chuàng)建一個鏈接檢查Serverless函數(shù) 203
9.4.3 使用nuctl部署鏈接檢查函數(shù) 206
9.4.4 使用Nuclio儀表板部署函數(shù) 207
9.4.5 直接調(diào)用鏈接檢查函數(shù) 207
9.4.6 在LinkManager中觸發(fā)鏈接檢查 208
9.5 其他Kubernetes Serverless框架 209
9.5.1 Kubernetes Job和CronJob 210
9.5.2 KNative 210
9.5.3 Fission 211
9.5.4 Kubeless 211
9.5.5 OpenFaas 211
9.6 小結(jié) 212
9.7 擴展閱讀 212
第10章 微服務(wù)測試 213
10.1 技術(shù)需求 214
10.2 單元測試 214
10.2.1 使用Go進(jìn)行單元測試 214
10.2.2 使用Ginkgo和Gomega進(jìn)行單元測試 216
10.2.3 Delinkcious單元測試 217
10.2.4 模擬的藝術(shù) 217
10.2.5 你應(yīng)該測試一切嗎 221
10.3 集成測試 222
10.3.1 初始化測試數(shù)據(jù)庫 222
10.3.2 運行服務(wù) 223
10.3.3 運行實際測試 223
10.3.4 實現(xiàn)數(shù)據(jù)庫測試輔助函數(shù) 225
10.3.5 實現(xiàn)服務(wù)測試輔助函數(shù) 227
10.4 使用Kubernetes進(jìn)行本地測試 229
10.4.1 編寫冒煙測試 229
10.4.2 Telepresence 232
10.5 隔離測試 235
10.5.1 隔離集群 236
10.5.2 隔離命名空間 236
10.5.3 跨集群/命名空間 237
10.6 端到端測試 237
10.6.1 驗收測試 237
10.6.2 回歸測試 238
10.6.3 性能測試 238
10.7 管理測試數(shù)據(jù) 239
10.7.1 合成數(shù)據(jù) 239
10.7.2 人工測試數(shù)據(jù) 239
10.7.3 生產(chǎn)環(huán)境快照 239
10.8 小結(jié) 240
10.9 擴展閱讀 240
第11章 微服務(wù)部署 241
11.1 技術(shù)需求 241
11.2 Kubernetes部署 242
11.3 多環(huán)境部署 243
11.4 理解部署策略 246
11.4.1 重新部署 247
11.4.2 滾動更新 247
11.4.3 藍(lán)綠部署 248
11.4.4 金絲雀部署 255
11.5 回滾部署 260
11.5.1 回滾標(biāo)準(zhǔn)部署 260
11.5.2 回滾藍(lán)綠部署 261
11.5.3 回滾金絲雀部署 262
11.5.4 回滾模式、API或負(fù)載的更改 262
11.6 管理版本和依賴 263
11.6.1 管理公有API接口 263
11.6.2 管理跨服務(wù)依賴 264
11.6.3 管理第三方依賴 264
11.6.4 管理基礎(chǔ)設(shè)施和工具鏈 265
11.7 本地開發(fā)部署 265
11.7.1 Ko 266
11.7.2 Ksync 269
11.7.3 Draft 271
11.7.4 Skaffold 272
11.7.5 Tilt 273
11.8 小結(jié) 279
11.9 擴展閱讀 279
第12章 監(jiān)控、日志和指標(biāo) 280
12.1 技術(shù)需求 281
12.2 Kubernetes的自愈能力 281
12.2.1 容器故障 282
12.2.2 節(jié)點故障 282
12.2.3 系統(tǒng)故障 283
12.3 Kubernetes集群自動伸縮 284
12.3.1 Pod水平自動伸縮 284
12.3.2 集群自動伸縮 286
12.3.3 Pod垂直自動伸縮 287
12.4 使用Kubernetes供應(yīng)資源 289
12.4.1 應(yīng)該提供哪些資源 289
12.4.2 定義容器限制 289
12.4.3 指定資源配額 290
12.4.4 手動供應(yīng) 291
12.4.5 利用自動伸縮 292
12.4.6 自定義自動供應(yīng) 292
12.5 正確地優(yōu)化性能 292
12.5.1 性能和用戶體驗 292
12.5.2 性能和高可用性 293
12.5.3 性能和成本 293
12.5.4 性能和安全性 293
12.6 日志 294
12.6.1 日志應(yīng)該記錄什么 294
12.6.2 日志與錯誤報告 294
12.6.3 Go日志接口 294
12.6.4 使用Go-kit日志 295
12.6.5 使用Kubernetes集中管理日志 298
12.7 在Kubernetes上收集指標(biāo) 299
12.7.1 Kubernetes指標(biāo)API 300
12.7.2 Kubernetes指標(biāo)服務(wù)器 301
12.7.3 使用Prometheus 302
12.8 警報 308
12.8.1 擁抱組件故障 309
12.8.2 接受系統(tǒng)故障 309
12.8.3 考慮人為因素 309
12.8.4 使用Prometheus警報管理器 310
12.9 分布式跟蹤 312
12.9.1 安裝Jaeger 312
12.9.2 將跟蹤集成到服務(wù)中 313
12.10 小結(jié) 315
12.11 擴展閱讀 315
第13章 服務(wù)網(wǎng)格與Istio 317
13.1 技術(shù)需求 317
13.2 服務(wù)網(wǎng)格 318
13.2.1 單體架構(gòu)與微服務(wù)架構(gòu) 319
13.2.2 使用共享庫管理微服務(wù)的橫切關(guān)注點 319
13.2.3 使用服務(wù)網(wǎng)格管理微服務(wù)的橫切關(guān)注點 320
13.2.4 理解Kubernetes與服務(wù)網(wǎng)格之間的關(guān)系 320
13.3 Istio 321
13.3.1 了解Istio架構(gòu) 321
13.3.2 使用Istio管理流量 324
13.3.3 使用Istio保護(hù)集群 328
13.3.4 使用Istio實施策略 331
13.3.5 使用Istio收集指標(biāo) 331
13.3.6 什么時候應(yīng)該避免使用Istio 332
13.4 基于Istio構(gòu)建Delinkcious 333
13.4.1 簡化服務(wù)間的認(rèn)證 333
13.4.2 優(yōu)化金絲雀部署 335
13.4.3 自動化的日志管理和錯誤報告 336
13.4.4 兼容NATS 338
13.4.5 查看Istio足跡 338
13.5 Istio的替代方案 341
13.5.1 Linkerd 2.0 341
13.5.2 Envoy 341
13.5.3 HashiCorp Consul 341
13.5.4 AWS App Mesh 342
13.5.5 其他 342
13.5.6 不使用服務(wù)網(wǎng)格 342
13.6 小結(jié) 342
13.7 擴展閱讀 343
第14章 微服務(wù)和Kubernetes的未來 344
14.1 微服務(wù)的未來 345
14.1.1 微服務(wù)與無服務(wù)器函數(shù) 345
14.1.2 微服務(wù)、容器和編排 345
14.1.3 gRPC和gRPC-Web 346
14.1.4 GraphQL 346
14.1.5 HTTP/3 346
14.2 Kubernetes的未來 347
14.2.1 Kubernetes的可擴展性 348
14.2.2 服務(wù)網(wǎng)格集成 349
14.2.3 Kubernetes上的無服務(wù)器計算 350
14.2.4 Kubernetes和VM 351
14.2.5 集群自動伸縮 352
14.2.6 使用Operator 353
14.2.7 集群聯(lián)邦 354
14.3 小結(jié) 355
14.4 擴展閱讀 355