首页>参考读物>计算机科学与技术>综合

Kubernetes微服务实战
作者 : [印度] 吉吉·赛凡(Gigi Sayfan) 著
译者 : 史天 张媛 楼炜 肖力 译
出版日期 : 2020-06-03
ISBN : 978-7-111-65576-3
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 372
开本 : 16
原书名 : Hands-On Microservices with Kubernetes
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书深入介绍Kubernetes和微服务之间的协同关系。首先介绍如何使用示例应用程序Delinkcious,它将作为贯穿全书的动手实验,帮助读者在实际应用程序的上下文中理解微服务和Kubernetes的概念。接下来,介绍了如何设置CI/CD流水线以及使用Kubernetes ConfigMap配置微服务。然后介绍微服务安全和实现REST、gRPC API和Delinkcious数据存储的实践。除此之外,本书还探索了Nuclio项目,介绍如何在Kubernetes上运行一个无服务器任务,并管理和实现数据密集型测试。在最后几章中,你将在Kubernetes上部署微服务,并学习如何做好系统的监控。最后,你将逐渐发现服务网格的重要性,以及如何将Istio集成到Delinkcious集群中。

图书特色

微服务落地实操指南,全方位讲解微服务系统开发的核心技术及实践,并提供详细示例代码。

图书前言

本书正是你一直期待的那本书。本书包罗万象,会介绍如何开发微服务并将其部署在Kubernetes平台上,基于微服务的架构与Kubernetes的结合将会带来巨大影响。书中首先解释了微服务和Kubernetes背后的基本概念,讨论了一些现实世界中的关注点和权衡取舍,引导你完成基于微服务的系统开发,向你展示最佳实践并给出了大量建议。
接着,本书深入地探索了其中的核心技术,并提供了可操作的代码进行说明。你将学习如何进行基于微服务的架构设计、构建微服务、测试已构建的微服务,以及将它们打包为Docker镜像。然后,你将学习如何将你的系统作为Docker镜像的集合部署到Kubernetes中并进行管理。
在此过程中,你将会看到当今流行的发展趋势,例如自动化的持续集成/持续交付(CI/CD)、基于gRPC的微服务、无服务器计算和服务网格等。
读完本书后,你将获得大量使用部署在Kubernetes上的基于微服务的架构来设计、开发和操作大型云原生系统的知识及实战经验。
本书的目标读者
本书面向希望了解大规模软件工程前沿知识的软件开发人员和DevOps工程师。如果你有使用大型容器化软件系统的经验,那么这些经验将对你有所帮助。
本书内容
第1章介绍了Kubernetes基础知识,你将会快速掌握Kubernetes的核心概念,并了解它是微服务的完美搭档。
第2章讨论了基于微服务的系统中常见问题的各个维度、模式和方法,以及与其他通用架构(如单体架构和大型服务)的比较。
第3章探讨了为什么我们应该选择Go作为示例应用程序Delinkcious的编程语言,并简要介绍了Go语言开发。
第4章指导你如何通过CI/CD流水线解决一些问题,包括Kubernetes中CI/CD流水线的多种选项,以及如何为示例应用程序Delinkcious构建CI/CD流水线。
第5章带你进入微服务配置的实战领域。此外,该章还讨论了Kubernetes的特定组件,如ConfigMap。
第6章深入探讨了如何在Kubernetes上保护微服务,以及Kubernetes上作为微服务安全基础的支柱。
第7章使我们可以开放示例应用程序Delinkcious的访问,并允许用户从集群外部与其进行交互。此外,我们还添加了基于gRPC的新闻服务,用户可以访问该服务以获取其关注的其他用户的新闻。最后,我们再添加一个消息队列,使服务以松耦合的方式进行通信。
第8章深入研究了Kubernetes存储模型。我们还将扩展示例应用程序Delinkcious的消息服务,将其数据存储在Redis中。
第9章深入探讨了云原生系统中最热门的趋势之一:无服务器计算(也称为函数即服务(Function as a Service,FaaS))。此外,还介绍了在Kubernetes中进行无服务器计算的各种方法。
第10章涵盖了多个测试相关的主题,包括单元测试、集成测试以及端到端测试等,该章还介绍了示例应用程序Delinkcious的测试结构。
第11章涉及两个相关但又独立的主题:生产环境的部署和开发环境的部署。
第12章着重介绍运行在Kubernetes上的大型分布式系统的维护,以及如何设计系统以确保系统稳定高效。
第13章回顾了服务网格(尤其是Istio)这一热门话题,服务网格是目前真正改变游戏规则的角色。
第14章涵盖了Kubernetes和微服务的主题,将帮助我们学习如何确定何时是采用和投资新技术的恰当时机。
如何充分利用本书
任何软件方面的要求都会在每章开头的“技术需求”部分列出,如果安装某个特定软件是某章内容的一部分,那么该章会尽可能涵盖所需的全部说明,大多数软件都是安装在Kubernetes集群中的组件。这些内容是本书实战性质的重要组成部分。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
约定
本书中使用了许多排版约定。
代码体:表示正文中的代码、数据库表名称、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter的内容。例如:“请注意我们需要确保它可以通过chmod +x执行。”
代码块如下:

命令行输入或输出如下:

黑体:表示新术语、重要单词或你在屏幕截图中看到的单词。例如,菜单或对话框中的单词会出现在这样的文本中。示例:“我们可以通过从ACTIONS下拉菜单中选择Sync来对其进行同步。”
警告或重要提示。
提示或小技巧。

上架指导

计算机/云计算

封底文字

Kubernetes是目前流行的开源平台之一,主要用于集群中应用程序容器的自动化部署、扩展和维护,提供了一个以容器为中心的基础设施框架。
本书深入介绍Kubernetes和微服务之间的协同关系。你将学习如何使用示例应用程序Delinkcious,它将作为贯穿全书的动手实验,帮助你在实际应用程序的上下文中理解微服务和Kubernetes的概念。接下来,你将了解如何设置CI/CD流水线以及使用Kubernetes ConfigMap配置微服务。在本书后面的章节中,你将获得微服务安全和实现REST、gRPC API和Delinkcious数据存储的实战经验。除此之外,本书还探索了Nuclio项目,介绍如何在Kubernetes上运行一个无服务器任务,并管理和实现数据密集型测试。在最后几章中,你将在Kubernetes上部署微服务,并学习如何做好系统的监控。最后,你将逐渐发现服务网格的重要性,以及如何将Istio集成到Delinkcious集群中。
阅读本书后,你将通过有效的工具和实践获得在Kubernetes上实现微服务所需的技能。

通过阅读本书,你将学到:
理解Kubernetes和微服务之间的协同关系。
在Kubernetes上为你的微服务创建一个完整的CI/CD流水线。
通过Go kit框架实践在Kubernetes上开发微服务。
使用Kubernetes与开源工具管理和监控系统。
通过REST和gRPC API对外开放服务。
在Kubernetes上将无服务器函数作为服务实现并部署。
通过服务网格实现认证、授权和流量整形。
在谷歌Kubernetes引擎上运行云中的Kubernetes集群。

作者简介

[印度] 吉吉·赛凡(Gigi Sayfan) 著:吉吉·赛凡(Gigi Sayfan)是Helix(一家生物信息学和基因组学初创公司)的首席软件架构师,也是Packt出版的Mastering Kubernetes一书的作者。他从事专业软件开发工作已超过20年,涉及领域包括即时消息、变形、芯片制造过程控制、游戏机嵌入式多媒体应用程序以及脑启发机器学习。他曾用多种编程语言(包括Go、Python、C#、Java、Delphi、JavaScript,甚至Cobol和PowerBuilder)为Windows、Linux、macOS、Lynx和Sony PlayStation等操作系统编写生产代码。他的技术专长涵盖数据库、低级网络、非传统用户界面和通用SDLC。

译者序

绝大多数企业的软件架构都是从一个单体架构开始的,而不是微服务架构。因为单体架构足够简单、容易上手,不需要复杂的流程就可以快速开发应用程序。但是伴随着企业的成长,单体架构的风险就会逐渐凸显出来。在需求量激增的情况下,整个应用程序会因为某一部分或者某一进程遇到瓶颈而受到限制。此外,因为单体架构的紧耦合设计,应用程序也面临着可用性上的挑战,面对日益复杂的事务处理几乎无法持续扩展,并且在构建、部署和测试等流程上都变得非常困难。然而,对企业来说影响更大的一点是,单体架构严重阻碍了创新发展。
因此,企业会在发展过程中逐渐转向微服务架构,将应用程序拆分成多个“微”小的服务运行。这些微服务都是面向业务功能或者某个子领域进行构建的,每个微服务实现一个单独的功能。微服务的理念也提倡每个服务分别由小型的、独立的团队进行开发并负责管理(可以参考亚马逊的两个比萨团队原则),所以说这不仅是技术管理上的更新,更是企业组织管理上的变革。
但是谈论微服务是一回事,能够真正地落地实施则是另一回事。本书旨在提供关于这方面的参考,全面地介绍了如何进行微服务的开发,并尽可能地从各个维度对其进行描述。从微服务的架构设计、构建、配置、测试、监控、安全,到持续集成/持续交付(CI/CD)流水线,本书都进行了积极的探索,并提供了详细的Go示例代码进行说明。
另一方面,所有上述内容的实现都是结合Kubernetes完成的。众所周知,Kubernetes是目前最流行的开源平台之一,主要用于在集群中自动化应用程序容器的编排,包括部署、扩展和维护等。Kubernetes提供了一个以容器为中心的基础设施框架,如今你很难找到一项没有(或者没有打算)和Kubernetes进行集成的新技术。除此之外,本书也涉及无服务器计算和服务网格这些热门话题,探讨了它们是如何发挥各自的优势为基于微服务的系统提供帮助的,并分别通过开源项目Nuclio和Istio进行了具体的说明。
希望读完本书后,你可以获得基于Kubernetes与微服务的云原生系统的设计、开发及管理的知识和经验。
最后,感谢编辑们的悉心指导,他们对本书做了大量的编辑和校对工作,最终保证了本书的顺利出版。感谢爱人又一次共同投入到翻译工作。感谢家人们的鼓励和支持,他们经常会关心本书的出版进度。
因时间和能力所限,翻译中难免有不当之处,请各位读者给出宝贵的建议,我们将会不断努力完善,谢谢。

史天
2020年3月

图书目录

译者序
前言
关于评审者
第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.2 Kubernetes简介 2
1.2.1 容器编排平台 2
1.2.2 Kubernetes发展历史 2
1.2.3 Kubernetes现状 3
1.3 Kubernetes架构 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.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 认识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.4 Delinkcious目录结构 43
3.4.1 cmd子目录 44
3.4.2 pkg子目录 44
3.4.3 svc子目录 45
3.5 Delinkcious微服务 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.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构建镜像 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.3 Argo 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.6 12-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.2 Kubernetes自定义资源 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.1 Kubernetes密钥的三种类型 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.1 NATS 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.1 Kubernetes存储模型 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.3 Delinkcious链接检查 196
9.3.1 设计链接检查 197
9.3.2 实现链接检查 199
9.4 使用Nuclio实现Serverless链接检查 202
9.4.1 Nuclio简介 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.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 小结 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.3 Delinkcious单元测试 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.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 管理测试数据 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.2 Kubernetes部署 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.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 小结 279
11.9 扩展阅读 279
第12章 监控、日志和指标 280
12.1 技术需求 281
12.2 Kubernetes的自愈能力 281
12.2.1 容器故障 282
12.2.2 节点故障 282
12.2.3 系统故障 283
12.3 Kubernetes集群自动伸缩 284
12.3.1 Pod水平自动伸缩 284
12.3.2 集群自动伸缩 286
12.3.3 Pod垂直自动伸缩 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.3 Go日志接口 294
12.6.4 使用Go-kit日志 295
12.6.5 使用Kubernetes集中管理日志 298
12.7 在Kubernetes上收集指标 299
12.7.1 Kubernetes指标API 300
12.7.2 Kubernetes指标服务器 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.3 Istio 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.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 不使用服务网格 342
13.6 小结 342
13.7 扩展阅读 343
第14章 微服务和Kubernetes的未来 344
14.1 微服务的未来 345
14.1.1 微服务与无服务器函数 345
14.1.2 微服务、容器和编排 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 服务网格集成 349
14.2.3 Kubernetes上的无服务器计算 350
14.2.4 Kubernetes和VM 351
14.2.5 集群自动伸缩 352
14.2.6 使用Operator 353
14.2.7 集群联邦 354
14.3 小结 355
14.4 扩展阅读 355

教学资源推荐
作者: (美)Jeffrey A. Hoffer Mary B. Prescott
作者: W.Richard Stevens
作者: 李丹 赵占坤 丁宏伟 石彦芳 编著
参考读物推荐
作者: (美)Diomidis Spinellis & Georgios Gousios 编
作者: (美)Jef Raskin 著
作者: 王浩 等编著