本教材目的是使讀者掌握云原生技術及應用實踐技能。本書分為9章,第1章主要講解云原生的定義、云原生的關鍵技術及國內云原生產(chǎn)業(yè)現(xiàn)狀;第2章主要以云原生的技術全景圖為主線介紹云原生層次關系及中國云原生技術全景;第3章主要講解云原生架構定義、架構模式演進、云原生架構原則等;第4章詳細講解容器技術背景、容器技術的基本概念、容器技術之Docker、Docker的使用及容器技術之Containerd等。第5章講解容器編排方法及主要工具,著重講解Kubernetes基本原理、Kubernetes的API對象、Kubernetes的服務暴露方式等內容;第6章主要講解微服務主要技術、微服務框架及微服務在云原生中的應用方法等;第7章主要講解Serverless和Service Mesh 及Service Mesh的具體實現(xiàn)Istio;第8章主要講解DevOps基本概念、生命周期、IaC和GitOps、源代碼管理、持續(xù)集成、持續(xù)交付、流水線及代碼質量管理工具SonarQube;第9章以兩個案例詳細講解了如何實現(xiàn)云原生技術落地。 本書可以幫助更多的開發(fā)人員和IT從業(yè)者了解和掌握云原生技術,促進其在國內的普及和應用。本書適合作為大中專院校、培訓機構的云原生技術相關課程的教材。
郭勇,博士,哈爾濱工業(yè)大學計算學部教師,國家精品數(shù)字課程"編譯原理”主講教師之一。主要研究方向為軟件工程、云計算技術。作為負責人和課題骨干參加各類科研項目及省部級教研項目20余項,在國內外期刊發(fā)表論文20余篇,出版教材3部。
目 錄
第1章 緒論 1
1.1 云原生概述 1
1.1.1 云原生的誕生 1
1.1.2 云原生計算基金會 1
1.1.3 云原生的定義 2
1.2 云原生的關鍵技術 2
1.2.1 容器 2
1.2.2 微服務 3
1.2.3 Service Mesh及Serverless技術 3
1.2.4 DevOps 4
1.2.5 CI/CD 5
1.3 國內云原生產(chǎn)業(yè)現(xiàn)狀 6
習題 8
第2章 云原生的技術全景圖 9
2.1 云原生技術全景圖的層次關系 9
2.2 供應層 10
2.2.1 自動化與配置 10
2.2.2 容器鏡像庫 12
2.2.3 安全性與合規(guī)性 13
2.2.4 密鑰和身份管理 14
2.3 運行時層 15
2.3.1 云原生存儲 15
2.3.2 容器運行時 16
2.3.3 云原生網(wǎng)絡 17
2.4 編排和管理層 18
2.4.1 編排和調度 18
2.4.2 協(xié)調和服務發(fā)現(xiàn) 19
2.4.3 遠程過程調用 19
2.4.4 服務代理 20
2.4.5 API網(wǎng)關 20
2.4.6 服務網(wǎng)格 21
2.5 應用程序定義和開發(fā)層 22
2.5.1 數(shù)據(jù)庫 22
2.5.2 流媒體和消息傳遞 24
2.5.3 應用程序定義與鏡像構建 25
2.5.4 持續(xù)集成和持續(xù)交付/持續(xù)部署 26
2.6 可觀察性和分析 27
2.6.1 監(jiān)視 27
2.6.2 日志 28
2.6.3 跟蹤 29
2.6.4 混沌工程 30
2.7 平臺 31
2.7.1 發(fā)行版 32
2.7.2 托管 32
2.7.3 安裝程序 33
2.7.4 平臺即服務 33
2.8 中國云原生技術全景 34
2.9 小結 35
習題 35
第3章 云原生架構 36
3.1 云原生架構定義 36
3.2 架構模式演進 36
3.2.1 單體架構 36
3.2.2 分布式系統(tǒng)架構 37
3.2.3 SOA架構 38
3.2.4 微服務架構 38
3.2.5 云原生架構 39
3.3 云原生架構模式 39
3.3.1 服務化架構模式 40
3.3.2 Mesh化架構模式 40
3.3.3 Serverless模式 40
3.3.4 存儲計算分離模式 41
3.3.5 分布式事務模式 41
3.3.6 可觀測架構 42
3.3.7 事件驅動架構 42
3.4 云原生架構原則 43
3.4.1 服務化原則 43
3.4.2 彈性原則 43
3.4.3 可觀測原則 44
3.4.4 韌性原則 44
3.4.5 過程自動化原則 44
3.4.6 零信任原則 45
3.4.7 持續(xù)演進原則 45
3.5 小結 46
習題 46
第4章 容器及管理平臺 47
4.1 容器技術背景 47
4.1.1 物理機時代 47
4.1.2 虛擬化時代 47
4.1.3 容器化時代 48
4.1.4 容器技術帶來的變化 51
4.2 容器技術的基本概念 52
4.2.1 什么叫容器 52
4.2.2 容器的規(guī)范 53
4.2.3 容器運行時規(guī)范 53
4.2.4 容器鏡像規(guī)范 54
4.3 容器技術之Docker 55
4.3.1 什么是Docker 55
4.3.2 Docker與虛擬機的區(qū)別 56
4.3.3 Docker的架構 58
4.3.4 Docker容器原理 61
4.3.5 Docker運行流程 63
4.4 Docker的使用 64
4.4.1 Dockerfile命令 64
4.4.2 基于Dockerfile創(chuàng)建鏡像 66
4.4.3 基于已有容器創(chuàng)建鏡像 71
4.4.4 基于本地模板創(chuàng)建鏡像 72
4.4.5 容器操作命令 72
4.5 容器技術之Containerd 76
4.5.1 什么是Containerd 77
4.5.2 容器運行時接口CRI 77
4.5.3 Containerd的架構 78
4.5.4 Containerd與Docker比較 79
4.6 小結 81
習題 81
第5章 容器編排 82
5.1 容器編排及主要工具 82
5.1.1 什么是容器編排 82
5.1.2 容器編排主要功能 82
5.1.3 容器編排工具 87
5.1.4 為什么選擇Kubernetes 91
5.2 Kubernetes基本原理 93
5.2.1 Kubernetes的架構 93
5.2.2 Kubernetes的設計理念 94
5.2.3 MasterNode 96
5.2.4 WorkerNode 98
5.2.5 命令行Kubectl 99
5.2.6 Kubernetes功能擴展 101
5.3 Kubernetes的API對象 101
5.3.1 API對象 102
5.3.2 Pod 103
5.3.3 復制控制器及副本集 104
5.3.4 部署(Deployment) 107
5.3.5 服務(Service) 108
5.3.6 命名空間(Namespace) 109
5.3.7 任務(Job) 110
5.3.8 后臺支撐服務集(DaemonSet) 111
5.3.9 存儲卷(Volume) 112
5.3.10 持久卷 116
5.3.11 有狀態(tài)集StatefulSet 118
5.3.12 ConfigMap和Secret 122
5.4 Kubernetes的服務暴露 123
5.4.1 ClusterIP服務暴露 123
5.4.2 NodePort服務暴露 125
5.4.3 Ingress服務暴露 126
5.5 小結 127
習題 127
第6章 云原生微服務 128
6.1 微服務概述 128
6.1.1 微服務架構的演進 128
6.1.2 微服務架構的特點 128
6.1.3 微服務的粒度 129
6.2 微服務主要技術 130
6.2.1 服務注冊與發(fā)現(xiàn) 131
6.2.2 負載均衡 131
6.2.3 服務編排 133
6.2.4 流量管控 133
6.3 微服務框架 135
6.3.1 高速服務框架 135
6.3.2 Dubbo 137
6.3.3 Spring Cloud 138
6.4 云原生與微服務 140
6.4.1 云原生架構中的微服務 140
6.4.2 云容器平臺 140
6.5 小結 141
習題 141
第7章 Serverless及Service Mesh技術 142
7.1 Serverless概述 142
7.1.1 什么是Serverless 142
7.1.2 Serverless的技術特點 145
7.1.3 Serverless的應用場景 147
7.2 Service Mesh概述 148
7.2.1 Service Mesh定義 149
7.2.2 Service Mesh架構 149
7.2.3 Service Mesh特性 150
7.2.4 Service Mesh實現(xiàn)框架 150
7.3 Istio:Service Mesh最佳實踐者 155
7.3.1 Istio架構 155
7.3.2 流量管理 157
7.3.3 安全 165
7.3.4 可觀測性 167
7.4 小結 168
習題 168
第8章 DevOps 169
8.1 DevOps基本概念 169
8.1.1 什么是DevOps 169
8.1.2 DevOps和應用程序生命周期 169
8.1.3 DevOps工具鏈 171
8.1.4 DevOps文化 172
8.1.5 如何更好地實施DevOps 174
8.2 IaC和GitOps 175
8.2.1 基礎設施即代碼(IaC) 175
8.2.2 什么是GitOps 176
8.2.3 GitOps優(yōu)勢與價值 176
8.2.4 GitOps原理 176
8.2.5 GitOps實踐 177
8.3 源代碼管理 179
8.3.1 什么是源代碼管理 179
8.3.2 源代碼管理的價值 179
8.3.3 源代碼管理的最佳做法 180
8.3.4 源代碼管理工具Git 180
8.3.5 源代碼管理平臺 182
8.3.6 代碼管理平臺操作 182
8.4 持續(xù)集成 186
8.4.1 什么是持續(xù)集成 186
8.4.2 自動構建工具介紹 187
8.4.3 制品管理簡介 190
8.4.4 制品管理的工具 190
8.5 持續(xù)交付 192
8.5.1 什么是持續(xù)交付 192
8.5.2 什么是持續(xù)部署 193
8.6 流水線 194
8.6.1 什么是流水線 194
8.6.2 Gitlab流水線 194
8.6.3 Jenkins流水線 196
8.7 代碼質量管理工具SonarQube 197
8.7.1 SonarQube安裝及基本使用 198
8.7.2 Jenkins集成SonarQube 199
8.8 小結 200
習題 200
第9章 云原生實踐 201
9.1 云原生應用實踐案例一 201
9.1.1 基本開發(fā)環(huán)境搭建 201
9.1.2 DevOps環(huán)境搭建 202
9.1.3 DevOps平臺安裝 207
9.1.4 容器環(huán)境搭建 208
9.1.5 Istio環(huán)境搭建 211
9.1.6 基于DevOps的發(fā)布 212
9.1.7 基于服務網(wǎng)格的灰度發(fā)布 218
9.1.8 灰度部署原理 221
9.2 云原生應用實踐案例二 227
9.2.1 RuoYi-Cloud簡介 227
9.2.2 項目環(huán)境要求 229
9.2.3 KubeSphere的安裝 229
9.2.4 企業(yè)空間及項目創(chuàng)建 244
9.2.5 MySQL數(shù)據(jù)庫的部署 245
9.2.6 Redis數(shù)據(jù)庫的部署 260
9.2.7 中間件nacos部署 264
9.2.8 RuoYi系統(tǒng)流水線 272