微服务实操指南,Hands-On Microservices With Kubernetes

新书速递

绝大多数企业的软件架构都是从一个单体架构开始的,而不是微服务架构。因为单体架构足够简单、容易上手,不需要复杂的流程就可以快速开发应用程序。但是伴随着企业的成长,单体架构的风险就会逐渐凸显出来。在需求量激增的情况下,整个应用程序会因为某一部分或者某一进程遇到瓶颈而受到限制。

因此,企业会在发展过程中逐渐转向微服务架构,将应用程序拆分成多个“微”小的服务运行。

但是谈论微服务是一回事,能够真正地落地实施则是另一回事。《Kubernetes微服务实战》旨在提供关于这方面的参考,全面地介绍了如何进行微服务的开发,并尽可能地从各个维度对其进行描述。从微服务的架构设计、构建、配置、测试、监控、安全,到持续集成/持续交付(CI/CD)流水线,本书都进行了积极的探索,并提供了详细的Go示例代码进行说明。

 

 

目录

译者序

前言

关于评审者

第1章 面向开发人员的Kubernetes简介  1

1.1 技术需求  1

1.1.1 安装Docker  1

1.1.2 安装kubectl  2

1.1.3 安装Minikube  2

1.1.4 本章代码  2

1.2Kubernetes简介  2

1.2.1 容器编排平台  2

1.2.2Kubernetes发展历史  2

1.2.3Kubernetes现状  3

1.3Kubernetes架构  3

1.3.1 控制平面  4

1.3.2 数据平面  5

1.4 微服务的完美搭档  6

1.4.1 微服务打包和部署  6

1.4.2 微服务公开和发现  8

1.4.3 微服务安全  9

1.4.4 微服务验证和授权  11

1.4.5 微服务升级  12

1.5 创建本地集群  14

1.5.1 安装Minikube  14

1.5.2 探索集群  16

1.5.3 安装Helm  17

1.6 小结  19

1.7 扩展阅读  19

第2章 微服务入门  20

2.1 技术需求  21

2.1.1 在macOS上通过Homebrew安装Go  21

2.1.2 在其他平台上安装Go  21

2.1.3 本章代码  21

2.2 微服务编程—少即是多  21

2.3 微服务自治  23

2.4 使用接口和契约  23

2.5 通过API公开服务  24

2.6 使用客户端库  24

2.7 管理依赖  25

2.8 协调微服务  25

2.9 利用所有权  26

2.10 理解康威定律  27

2.10.1 垂直组织  27

2.10.2 水平组织  28

2.10.3 矩阵组织  28

2.11 跨服务故障排除  28

2.12 利用共享服务库  29

2.13 选择源代码控制策略  29

2.13.1 单体仓库  29

2.13.2 多仓库  30

2.13.3 混合模式  30

2.14 选择数据策略  30

2.14.1 每个微服务对应一个数据存储  31

2.14.2 运行分布式查询  31

2.14.3 使用Saga模式管理跨服务事务  33

2.15 小结  35

2.16 扩展阅读  36

第3章 示例应用程序—Delinkcious  37

3.1 技术需求  37

3.1.1Visual Studio Code  38

3.1.2GoLand  38

3.1.3LiteIDE  38

3.1.4 其他选项  38

3.1.5 本章代码  38

3.2 为什么选择Go  39

3.3 认识Go kit  39

3.3.1 使用Go kit构建微服务  40

3.3.2 理解传输  41

3.3.3 理解端点  41

3.3.4 理解服务  42

3.3.5 理解中间件  42

3.3.6 理解客户端  43

3.3.7 生成样板  43

3.4Delinkcious目录结构  43

3.4.1cmd子目录  44

3.4.2pkg子目录  44

3.4.3svc子目录  45

3.5Delinkcious微服务  45

3.5.1 对象模型  46

3.5.2 服务实现  47

3.5.3 支持函数实现  50

3.5.4 通过客户端库调用API  53

3.6 数据存储  56

3.7 小结  58

3.8 扩展阅读  58

第4章 构建CI/CD流水线  59

4.1 技术需求  59

4.2 理解CI/CD流水线  60

4.3 选择CI/CD流水线工具  61

4.4.1Jenkins X  61

4.4.2Spinnaker  62

4.4.3Travis CI和CircleCI  62

4.4.4Tekton  62

4.4.5Argo CD  63

4.4.6 自研工具  63

4.4GitOps  63

4.5 使用CircleCI构建镜像  64

4.5.1 查看源代码树  64

4.5.2 配置CI流水线  65

4.5.3 理解构建脚本  66

4.5.4 使用多阶段Dockerfile对Go服务容器化  68

4.5.5 探索CircleCI界面  68

4.5.6 未来的改进  71

4.6 为Delinkcious设置持续交付  71

4.6.1 部署Delinkcious微服务  71

4.6.2 理解Argo CD  72

4.6.3Argo CD入门  73

4.6.4 配置Argo CD  75

4.6.5 探索Argo CD  77

4.7 小结  80

4.8 扩展阅读  81

第5章 使用Kubernetes配置微服务  82

5.1 技术需求  82

5.2 配置包含的内容  83

5.3 通过传统方式管理配置  83

5.3.1 约定  84

5.3.2 命令行标志  85

5.3.3 环境变量  85

5.3.4 配置文件  86

5.3.5 混合配置和默认  90

5.3.612-Factor应用程序配置  91

5.4 动态管理配置  92

5.4.1 理解动态配置  92

5.4.2 远程配置存储  93

5.4.3 远程配置服务  93

5.5 使用Kubernetes配置微服务  93

5.5.1 使用Kubernetes ConfigMaps  94

5.5.2Kubernetes自定义资源  102

5.5.3 服务发现  105

5.6 小结  105

5.7 扩展阅读  106

第6章 Kubernetes与微服务安全  107

6.1 技术需求  107

6.2 应用完善的安全原则  108

6.3 区分用户账户和服务账户  110

6.3.1 用户账户  110

6.3.2 服务账户  111

6.4 使用Kubernetes管理密钥  114

6.4.1Kubernetes密钥的三种类型  114

6.4.2 创造自己的密钥  115

6.4.3 将密钥传递到容器  116

6.4.4 构建一个安全的Pod  117

6.5 使用RBAC管理权限  118

6.6 通过认证、授权和准入控制访问权限  121

6.6.1 认证  121

6.6.2 授权  125

6.6.3 准入  125

6.7 通过安全最佳实践增强Kubernetes  126

6.7.1 镜像安全  126

6.7.2 网络安全—分而治之  127

6.7.3 镜像仓库安全  129

6.7.4 按需授予访问权限  129

6.7.5 使用配额最小化爆炸半径  130

6.7.6 实施安全上下文  132

6.7.7 使用安全策略强化Pod  133

6.7.8 强化工具链  134

6.8 小结  135

6.9 扩展阅读  136

第7章 API与负载均衡器  137

7.1 技术需求  137

7.2 熟悉Kubernetes服务  138

7.3 东西流量与南北流量  140

7.4 理解ingress和负载均衡器  141

7.5 提供和使用公有REST API  141

7.5.1 构建基于Python的API网关服务  141

7.5.2 添加ingress  146

7.5.3 验证API网关  147

7.6 提供和使用内部gRPC API  150

7.6.1 定义NewsManager接口  150

7.6.2 实现消息管理器  151

7.6.3 将NewsManager公开为gRPC服务  153

7.7 通过消息队列发送和接收事件  158

7.7.1NATS  159

7.7.2 在Kubernetes集群中部署NATS  159

7.7.3 使用NATS发送链接事件  160

7.7.4 订阅NATS链接事件  162

7.7.5 处理链接事件  164

7.8 服务网格  166

7.9 小结  166

7.10 扩展阅读  166

第8章 有状态服务  167

8.1 技术需求  167

8.2 抽象存储  168

8.2.1Kubernetes存储模型  168

8.2.2 内置和外部存储插件  172

8.2.3 理解CSI  173

8.3 在Kubernetes集群外存储数据  174

8.4 使用StatefulSet在Kubernetes集群内存储数据  175

8.4.1 理解StatefulSet  175

8.4.2 什么时候应该使用StatefulSet  178

8.4.3 一个大型StatefulSet示例  179

8.5 通过本地存储实现高性能  183

8.5.1 将数据存储在内存中  183

8.5.2 将数据存储在本地SSD硬盘上  183

8.6 在Kubernetes中使用关系型数据库  183

8.6.1 了解数据的存储位置  184

8.6.2 使用部署和服务  184

8.6.3 使用StatefulSet  185

8.6.4 帮助用户服务找到StatefulSet Pod  185

8.6.5 管理模式更改  187

8.7 在Kubernetes中使用非关系型数据存储  187

8.8 小结  191

8.9 扩展阅读  192

第9章 在Kubernetes上运行Serverless任务  193

9.1 技术需求  193

9.2 云中的Serverless  194

9.2.1 微服务与Serverless函数  195

9.2.2 在Kubernetes上的Serverless函数模型  195

9.2.3 构建、配置和部署Serverless函数  196

9.2.4 调用Serverless函数  196

9.3Delinkcious链接检查  196

9.3.1 设计链接检查  197

9.3.2 实现链接检查  199

9.4 使用Nuclio实现Serverless链接检查  202

9.4.1Nuclio简介  202

9.4.2 创建一个链接检查Serverless函数  203

9.4.3 使用nuctl部署链接检查函数  206

9.4.4 使用Nuclio仪表板部署函数  207

9.4.5 直接调用链接检查函数  207

9.4.6 在LinkManager中触发链接检查  208

9.5 其他Kubernetes Serverless框架  209

9.5.1Kubernetes Job和CronJob  210

9.5.2KNative  210

9.5.3Fission  211

9.5.4Kubeless  211

9.5.5OpenFaas  211

9.6 小结  212

9.7 扩展阅读  212

第10章 微服务测试  213

10.1 技术需求  214

10.2 单元测试  214

10.2.1 使用Go进行单元测试  214

10.2.2 使用Ginkgo和Gomega进行单元测试  216

10.2.3Delinkcious单元测试  217

10.2.4 模拟的艺术  217

10.2.5 你应该测试一切吗  221

10.3 集成测试  222

10.3.1 初始化测试数据库  222

10.3.2 运行服务  223

10.3.3 运行实际测试  223

10.3.4 实现数据库测试辅助函数  225

10.3.5 实现服务测试辅助函数  227

10.4 使用Kubernetes进行本地测试  229

10.4.1 编写冒烟测试  229

10.4.2Telepresence  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 管理测试数据  239

10.7.1 合成数据  239

10.7.2 人工测试数据  239

10.7.3 生产环境快照  239

10.8 小结  240

10.9 扩展阅读  240

第11章 微服务部署  241

11.1 技术需求  241

11.2Kubernetes部署  242

11.3 多环境部署  243

11.4 理解部署策略  246

11.4.1 重新部署  247

11.4.2 滚动更新  247

11.4.3 蓝绿部署  248

11.4.4 金丝雀部署  255

11.5 回滚部署  260

11.5.1 回滚标准部署  260

11.5.2 回滚蓝绿部署  261

11.5.3 回滚金丝雀部署  262

11.5.4 回滚模式、API或负载的更改  262

11.6 管理版本和依赖  263

11.6.1 管理公有API接口  263

11.6.2 管理跨服务依赖  264

11.6.3 管理第三方依赖  264

11.6.4 管理基础设施和工具链  265

11.7 本地开发部署  265

11.7.1Ko  266

11.7.2Ksync  269

11.7.3Draft  271

11.7.4Skaffold  272

11.7.5Tilt  273

11.8 小结  279

11.9 扩展阅读  279

第12章 监控、日志和指标  280

12.1 技术需求  281

12.2Kubernetes的自愈能力  281

12.2.1 容器故障  282

12.2.2 节点故障  282

12.2.3 系统故障  283

12.3Kubernetes集群自动伸缩  284

12.3.1Pod水平自动伸缩  284

12.3.2 集群自动伸缩  286

12.3.3Pod垂直自动伸缩  287

12.4 使用Kubernetes供应资源  289

12.4.1 应该提供哪些资源  289

12.4.2 定义容器限制  289

12.4.3 指定资源配额  290

12.4.4 手动供应  291

12.4.5 利用自动伸缩  292

12.4.6 自定义自动供应  292

12.5 正确地优化性能  292

12.5.1 性能和用户体验  292

12.5.2 性能和高可用性  293

12.5.3 性能和成本  293

12.5.4 性能和安全性  293

12.6 日志  294

12.6.1 日志应该记录什么  294

12.6.2 日志与错误报告  294

12.6.3Go日志接口  294

12.6.4 使用Go-kit日志  295

12.6.5 使用Kubernetes集中管理日志  298

12.7 在Kubernetes上收集指标  299

12.7.1Kubernetes指标API  300

12.7.2Kubernetes指标服务器  301

12.7.3 使用Prometheus  302

12.8 警报  308

12.8.1 拥抱组件故障  309

12.8.2 接受系统故障  309

12.8.3 考虑人为因素  309

12.8.4 使用Prometheus警报管理器  310

12.9 分布式跟踪  312

12.9.1 安装Jaeger  312

12.9.2 将跟踪集成到服务中  313

12.10 小结  315

12.11 扩展阅读  315

第13章 服务网格与Istio  317

13.1 技术需求  317

13.2 服务网格  318

13.2.1 单体架构与微服务架构  319

13.2.2 使用共享库管理微服务的横切关注点  319

13.2.3 使用服务网格管理微服务的横切关注点  320

13.2.4 理解Kubernetes与服务网格之间的关系  320

13.3Istio  321

13.3.1 了解Istio架构  321

13.3.2 使用Istio管理流量  324

13.3.3 使用Istio保护集群  328

13.3.4 使用Istio实施策略  331

13.3.5 使用Istio收集指标  331

13.3.6 什么时候应该避免使用Istio  332

13.4 基于Istio构建Delinkcious  333

13.4.1 简化服务间的认证  333

13.4.2 优化金丝雀部署  335

13.4.3 自动化的日志管理和错误报告  336

13.4.4 兼容NATS  338

13.4.5 查看Istio足迹  338

13.5Istio的替代方案  341

13.5.1Linkerd 2.0  341

13.5.2Envoy  341

13.5.3HashiCorp Consul  341

13.5.4AWS App Mesh  342

13.5.5 其他  342

13.5.6 不使用服务网格  342

13.6 小结  342

13.7 扩展阅读  343

第14章 微服务和Kubernetes的未来  344

14.1 微服务的未来  345

14.1.1 微服务与无服务器函数  345

14.1.2 微服务、容器和编排  345

14.1.3gRPC和gRPC-Web  346

14.1.4GraphQL  346

14.1.5HTTP/3  346

14.2Kubernetes的未来  347

14.2.1Kubernetes的可扩展性  348

14.2.2 服务网格集成  349

14.2.3Kubernetes上的无服务器计算  350

14.2.4Kubernetes和VM  351

14.2.5 集群自动伸缩  352

14.2.6 使用Operator  353

14.2.7 集群联邦  354

14.3 小结  355

14.4 扩展阅读  355

 

 

上下滑动查看

点击链接了解详情并购买

更多精彩回顾

书讯 | 6月书讯 (上)| 初夏已至,书香有约,六月宜静心读书

书讯 | 6月书讯 (下)| 初夏已至,书香有约,六月宜静心读书

上新 | 周志华领衔撰写,历时4年,宝箱书问世!
书单 | 创建字节跳动之前,张一鸣读过哪些硬核技术书?

干货 | G1垃圾回收算法概述

收藏 | TIOBE 5月榜单:时隔五年,C语言重返第一

你可能感兴趣的:(java,数据库,分布式,大数据,kubernetes)