首页>参考读物>计算机科学与技术>软件与程序设计

云原生应用管理:原理与实践
作者 : 陈显鹭 阚俊宝 匡大虎 卢稼奇 著
出版日期 : 2020-07-14
ISBN : 978-7-111-65949-5
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 460
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一部从原理与实践角度讲解云原生应用管理的著作,是阿里云容器服务团队工程师多年云原生应用开发与管理经验的总结。详细讲解了Helm、Kustomize、CNAB、Operator等云原生应用管理框架和工具的应用场景、功能和使用,并通过源码讲解了它们的实现原理,同时提供了大量的案例和代码解析,能帮助读者轻松掌握云原生应用的管理。
全书一共16章,分为4个部分:
第一部分(第1~4章) Helm
首先介绍了Helm的发展历程、适用场景、架构设计、工作机制;然后以Chart为例,讲解了Helm的功能和使用方法;最后通过源代码分析了Helm的实现原理。
第二部分(第5~8章) Kustomize
首先介绍了Kustomize的诞生背景、适用场景、工作机制;然后详细讲解了它的功能和使用方法;最后通过源代码分析了它的实现原理。
第三部分(第9~12章) CNAB
首先介绍了CNAB的基本概念、原理和规范;然后以Porter为例,详细讲解了它的功能、用法和实战;最后通过源代码分析了Porter的实现原理,同时讲解了mixin的开发。
第四部分(第13~16章) Operator
首先介绍了Operator的概念、发展和工作原理,然后详细讲解了它的功能、用法、架构、组件和实战,最后通过源代码分析了它的实现原理。

图书特色

阿里云容器服务团队工程师撰写,多年云原生应用开发、管理经验总结,包含大量实战案例
详细讲解Helm、Kustomize、CNAB、Operator等云原生应用管理框架和工具的功能使用和实现原理

图书前言

为什么要写这本书
云原生可谓当下最火热的项目开发技术之一,各种传统应用都在向云原生应用的方向靠拢。但是到底什么是云原生应用,云原生应用的开发标准是什么,至今还没有一个统一的规范与定义。这就造成了云原生社区百家争鸣的局面,各大厂商争先发布自己的云原生应用定义。
我是2014年开始接触容器技术的,最早从Docker镜像入门,当时的使用体验是,Docker镜像能够很好地隔离环境差异,做到一次构建、到处运行,为应用的打包与发布操作带来极大便利。
随着微服务理念的发展,应用开始变得越来越庞大,功能也越来越复杂,这时Docker Compose编排模板便应运而生了。通过它,技术人员可以方便地编辑模板以实现应用的打包与发布。后来随着Kubernetes的诞生与发展,声明式定义又开始风靡技术圈,大家逐渐倾向于使用面向终态的架构设计。现在的Kubernetes基本奠定了容器编排领域的标准。
可是随之而来的问题就是,Kubernetes原生的部署方式比较凌乱,部署资源散落在各处,没办法统一归拢管理,这给应用的发布与部署带来了前所未有的困难。第一个尝试解决这个问题的管理工具就是Helm—一个构建在Kubernetes上的包管理工具,它通过将Kubernetes应用的部署模板统一压缩成包并标明版本号的方式进行管理,是首个能够进行版本管理的云原生应用管理器。
随着Kubernetes 应用的增多,很多复杂的有状态应用也开始部署在集群中,这给Helm运行带来了很大的困难。Helm初期只是用于管理一些简单的无状态应用部署,对于复杂的有状态应用则有些力不从心。鉴于此,又诞生了Operator,Operator赋予应用管理者巨大的权限,可以让管理者自己编写运维脚本,以便管理者能够更好地发布与管理应用。
在应用管理器层出不穷的时候,应用定义这一领域也没有停下发展的脚步。微软推出的CNAB和阿里巴巴集团推出的Open Application Model(OAM),都旨在定义云原生应用的标准。这些理念超越了Kubernetes的界限,更加抽象和广泛地定义了未来云原生应用的标准与风格。
因此我们想写一本书,介绍目前市面上各大社区与厂商推出的云原生管理工具与理念,让大家对云原生应用目前的状态有一个清晰的认识,从而根据自己的需求来挑选适合自己的云原生应用管理工具。
本书的内容
本书内容从逻辑上主要分为以下四部分。
第一部分Helm(第1~4章)
主要介绍Helm的历史与发展过程。我们将从Chart开始讲解,经过抽丝剥茧,帮助读者厘清Chart的各种写法。同时提供了目前主流社区生产使用的Chart供读者学习。后面将以安装Chart为例,从源码角度介绍Helm的整个安装过程,让读者能够更加深入地理解Helm这个包管理工具的原理及其使用方法。
第二部分 Kustomize(第5~8章)
主要介绍Kustomize诞生的原因。我们将从Kustomize的概念入手,详细了解Kustomize的各个功能,同时结合Kustomize的各个插件来理解其覆盖的领域与功能。最后从源码角度入手,详细讲解Kustomize各个命令的执行过程。
第三部分 CNAB和Porter(第9~12章)
主要介绍CNAB的概念、CNAB推出的背景与意义。这部分内容从概念入手,详细介绍管理工具Porter是如何实践CNAB概念的。最后从源码角度对Porter进行分析。
第四部分 Operator(第13~16章)
主要介绍Operator的概念和工作原理,以及Operator Framework目前涵盖的组件。我们将以一个具体示例为模板,详细介绍Operator在有状态应用管理中的作用,最后从源码角度分析各个功能的实现原理。
适用读者
希望深入理解Kubernetes上的应用管理的读者
已经使用过Helm等应用管理工具,希望探查更多细节的读者
希望了解如何使用Go语言编写应用管理工具的程序员
云原生爱好者
如何阅读
本书内容是实战与源码分析相结合,因此仅仅靠阅读是无法体会所有要点的。本书所有分析的源码均是开源项目,希望读者能够根据内容,寻找到对应的源码,边看源码边解析。最好能够根据自己的理解,在本机运行一下,以便了解整个代码的运行流程。
关于勘误
由于写作时间和水平有限,本书难免存在一些纰漏和错误。如果读者发现了问题,请及时与我们联系,我们也会在后面的版本中加以改正,联系邮箱:xianlubird@gmail.com。非常希望与大家共同学习云原生技术。
致谢
最后,向在本书编写过程中给予巨大帮助的人们表示诚挚的感谢。感谢妻子的支持,编写此书期间,恰逢妻子怀孕,感谢她的理解和包容,很多时候忽略了她。希望此书也能作为给未来的新生命的贺礼。
感谢阿里云容器服务团队在本书编写期间给予的理解与包容。
最后,感谢杨福川编辑,在他的帮助与支持下,本书由一个想法变成了实体展现给各位读者;感谢张锡鹏编辑的辛苦付出,帮助我们多次改稿,修复各种低级错误,极大地提升了本书的文字质量。

陈显鹭
2020年4月

上架指导

计算机\程序设计

封底文字

随着容器和云原生计算技术的快速发展,Kubernetes已经成为云原生应用操作系统。越来越多应用运行在Kubernetes基础之上,从无状态的Web应用,到有状态的数据库、消息中间件,再到数据化、智能化应用。如何基于Kubernetes实现应用的生命周期管理成为人们关注的热点。阿里云容器服务团队的同学梳理了这一新兴领域的主流技术,让大家可以更好地把握技术趋势,更加系统地理解其中的设计理念,最大化发挥云原生计算的价值。
—— 易立 阿里云容器服务负责人/阿里巴巴资深技术专家
应用管理是影响开发和运维效率的关键环节之一。应用的配置、部署、升级、运维等工作的标准化和自动化一直没有得到足够的重视,影响了迭代效率和生产效率。随着 Kubernetes、Istio、Knative等云原生基础设施的逐渐成熟,云原生的价值也从基础设施不断上浮,我们有理由相信应用管理的问题在云原生背景下会有更好的解答。本书从云原生应用管理的价值、工具、使用流程等方面,介绍了Helm、Operator、CNAB等工具,能帮助读者对当前云原生应用管理的全貌有一个清晰的认识。
—— 李响 CNCF技术监督委员会成员/阿里巴巴资深技术专家
本书介绍了云原生领域主流的管理工具与技术,每一章都结合案例进行讲解,相信能很好地帮助读者快速掌握云原生应用的管理。
—— 李鹏 阿里巴巴高级技术专家 

作者简介

陈显鹭 阚俊宝 匡大虎 卢稼奇 著:作者简介
陈显鹭
阿里云容器服务技术专家, CNCF基金会下多个项目的贡献者和维护者,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。
阚俊宝
阿里云容器服务技术专家,专注Kubernetes、Docker、云存储,是阿里云CSI存储核心维护者。
匡大虎
阿里云容器服务技术专家,专注云原生安全,是阿里云容器服务云原生安全核心成员。
卢稼奇
阿里云容器服务高级开发工程师,专注Kubernetes、云原生应用编排、前端技术开发。

图书目录

前言
第1章 什么是Helm 1
1.1 Helm的发展历程 1
1.2 Helm的适用场景 2
1.3 Helm的社区和生态 3
1.4 Helm的架构设计与工作原理 4
1.4.1 Helm Client 4
1.4.2 Tiller 5
1.5 本章小结 5
第2章 Chart 7
2.1 Chart文件结构 7
2.1.1 Chart.yaml 8
2.1.2 Chart license, README notes 9
2.1.3 Chart Dependences 10
2.1.4 template和values 14
2.2 Helm功能初体验 18
2.2.1 前置条件 18
2.2.2 Helm的三大基本概念 18
2.2.3 安装Helm 18
2.2.4 安装第一个Chart 19
2.2.5 查看当前安装实例 21
2.2.6 删除安装的实例 21
2.2.7 Helm后端存储 22
2.3 helm install 23
2.4 Helm 更新与回滚 25
2.4.1 helm upgrade 25
2.4.2 helm history 25
2.4.3 helm rollback 26
2.4.4 一些有用的更新参数 26
2.5 helm repo 26
2.6 创建自己的Chart 28
2.7 Helm Hooks 29
2.7.1 Helm支持的Hooks种类 30
2.7.2 Hooks 与Release 生命周期的关系 30
2.7.3 简单的Hooks示例 31
2.7.4 使用crd-install来定义一个CRD 33
2.7.5 自动删除先前版本的Hooks 33
2.8 Helm插件 34
2.9 Chart测试 36
2.10 Chart模板开发高阶介绍 38
2.10.1 创建第一个template文件 39
2.10.2 给template添加动态变量 41
2.10.3 模板函数与管道 42
2.10.4 逻辑控制 45
2.10.5 变量 51
2.10.6 自定义模板 53
2.10.7 在模板中引用文件 58
2.10.8 创建一个NOTES.txt文件 60
2.11 本章小结 61
第3章 使用Helm部署Wordpress实战 63
3.1 下载Wordpress Chart 63
3.2 Chart.yaml 64
3.3 requirements.yaml 64
3.4 Charts文件夹 65
3.5 template文件夹 65
3.5.1 helper文件 66
3.5.2 NOTES.txt 68
3.5.3 其他文件 69
3.5.4 tests文件 71
3.6 README.md 72
3.7 values.yaml 72
3.8 安装 73
3.9 本章小结 76
第4章 Helm 源码分析 77
4.1 helm install 77
4.1.1 locateChartPath 78
4.1.2 ensureHelmClient 81
4.1.3 InstallCmd Run 81
4.1.4 installReleaseFromChart 83
4.1.5 setupConnection 84
4.1.6 Helm Client install Function 85
4.1.7 返回Release状态信息 87
4.2 Helm Install Server 88
4.2.1 prepareRelease 89
4.2.2 performRelease 90
4.3 Helm update 93
4.3.1 update 命令的定义 93
4.3.2 Update 服务端的实现 94
4.4 helm ls 96
4.4.1 Client 端实现 96
4.4.2 Server端实现 98
4.5 Helm Rollback 100
4.6 Helm delete 102
4.7 Helm 3简介 104
4.8 本章小结 108
第5章 Kustomize入门 109
5.1 Kustomize介绍 109
5.2 Kustomize原理介绍 111
5.3 Kustomize快速入门 113
5.3.1 安装Kustomize 113
5.3.2 通过Kustomize部署helloworld 114
5.4 本章小结 117
第6章 Kustomize详解 118
6.1 Kustomize术语 118
6.2 Kustomize配置详解 121
6.2.1 资源 121
6.2.2 生成器 122
6.2.3 转换器 124
6.3 命令行使用方法 128
6.3.1 命令行使用 128
6.3.2 kustomize build 130
6.3.3 kustomize edit 136
6.3.4 kustomize create 141
6.3.5 kustomize conf?ig 143
6.4 基本用法 147
6.4.1 使用conf?igGeneration 147
6.4.2 使用generatorOptions 149
6.4.3 配置转换器 150
6.4.4 使用变量 153
6.4.5 镜像替换 154
6.4.6 补丁 156
6.5 Kustomize插件 161
6.5.1 插件介绍 162
6.5.2 Exec类型插件 163
6.5.3 Go库文件插件 165
6.6 工作流 169
6.6.1 创建配置仓库 169
6.6.2 配置下发 170
6.6.3 使用共享配置 170
6.7 本章小结 172
第7章 Kustomize实战 173
7.1 示例介绍 173
7.1.1 基础配置 174
7.1.2 测试环境 177
7.1.3 生产环境 180
7.1.4 配置管理 185
7.2 通过插件实现不同环境下部署不同的模板 186
7.2.1 项目介绍 187
7.2.2 插件实现 188
7.2.3 运行插件 191
7.3 本章小结 193
第8章 Kustomize源码分析 194
8.1 Kustomize 执行流程介绍 194
8.2 kustomize build命令解析 196
8.2.1 NewCmdBuild函数解析 197
8.2.2 NewCmdBuildPrune函数详解 198
8.2.3 RunBuild函数详解 199
8.2.4 AccumulateTarget 解析 203
8.2.5 addHashesToNames函数 210
8.2.6 ResolveVars函数 211
8.2.7 computeInventory函数 212
8.3 kustomize edit命令分析 214
8.4 add子命令 215
8.5 set子命令 225
8.6 Fix子命令 228
8.7 remove子命令 229
8.8 kustomize create 命令分析 230
8.9 本章小结 233
第9章 走近CNAB 234
9.1 什么是CNAB 234
9.2 CNAB 基本概念和原理 236
9.3 CNAB规范 238
9.3.1 bundle.json文件格式 239
9.3.2 调用镜像 245
9.3.3 应用包运行规范 246
9.3.4 包格式规范 247
9.4 Duffle和Porter 248
9.4.1 使用Duffle打包Wordpress 248
9.4.2 使用Porter打包Wordpress 250
9.4.3 使用Duffle还是Porter 251
9.5 本章小结 251
第10章 Porter使用详解 252
10.1 Porter快速上手 252
10.1.1 安装Porter 252
10.1.2 创建应用包 253
10.1.3 部署应用 254
10.1.4 更新和卸载应用 255
10.2 创建应用包 255
10.2.1 应用包元数据 257
10.2.2 mixin 257
10.2.3 参数 258
10.2.4 输出 259
10.2.5 校验规则 260
10.2.6 凭据 260
10.2.7 应用包操作 261
10.2.8 自定义操作 263
10.2.9 依赖 263
10.2.10 镜像 263
10.2.11 自定义Dockerf?ile 264
10.3 mixin 265
10.3.1 安装mixin 266
10.3.2 常用mixin介绍 266
10.4 Porter命令详解 270
10.5 OCI仓库与应用分发 276
10.6 使用Porter分发CNAB应用 278
10.6.1 发布应用包 278
10.6.2 复制应用包 280
10.6.3 导出应用包 281
10.7 本章小结 282
第11章 Porter实战 283
11.1 创建基本的应用框架 283
11.1.1 环境准备 283
11.1.2 创建基本的应用框架 284
11.2 支持参数和输出 288
11.3 定义多个操作步骤 291
11.4 发布应用包 295
11.5 使用应用包依赖 298
11.6 本章小结 300
第12章 Porter mixin开发和源码解析 301
12.1 mixin实现原理 301
12.1.1 mixin调用机制 301
12.1.2 mixin API 302
12.2 mixin开发 306
12.2.1 创建mixin项目 306
12.2.2 mixin代码概览 308
12.2.3 实现build命令 312
12.2.4 定义JSON Schema 313
12.2.5 实现参数组装逻辑 316
12.3 Porter build源码解析 320
12.4 Porter install源码解析 329
12.4.1 准备应用包 330
12.4.2 准备和执行依赖 332
12.4.3 执行主应用包操作 336
12.4.4 Docker驱动的运行过程 339
12.5 Porter运行时源码解析 342
12.6 本章小结 346
第13章 全面了解Operator 347
13.1 初识Operator 348
13.1.1 什么是Operator 348
13.1.2 Operator的发展 349
13.1.3 Operator的社区与生态 351
13.2 Operator Framework 352
13.3 Operator 工作原理 354
13.4 本章小结 357
第14章 Operator Framework功能详解 358
14.1 Operator SDK 358
14.1.1 安装Operator SDK CLI 358
14.1.2 使用Operator SDK CLI 360
14.1.3 Operator的作用域 363
14.1.4 Operator SDK生成的代码框架 365
14.1.5 controller-runtime 367
14.1.6 使用Predicates过滤事件 381
14.1.7 Operator SDK的架构演进 383
14.2 Operator Lifecycle Manager 387
14.2.1 OLM组件模型定义 387
14.2.2 OLM结构介绍 389
14.2.3 OLM的安装 390
14.2.4 依赖解析和升级管理 392
14.2.5 operator-registry 395
14.3 Operator Metering 398
14.3.1 Operator Metering基本架构 398
14.3.2 Operator Metering核心组件 400
14.4 本章小结 407
第15章 Operator实战 408
15.1 基于Operator SDK构建Operator 408
15.1.1 生成第一个Operator项目 408
15.1.2 创建自定义资源定义 409
15.1.3 创建Controller 410
15.1.4 Operator的构建和运行 416
15.2 使用Operator Lifecycle Manager 419
15.2.1 构建一个CSV 419
15.2.2 基于Operator Lifecycle Manager测试Operator 423
15.3 部署和使用Operator Metering 425
15.3.1 安装Operator Metering 426
15.3.2 定制化Prometheus Report Queries 426
15.4 本章小结 432
第16章 Operator示例:cert-manager源码解析 433
16.1 cert-manager基本介绍 433
16.2 cert-manager组件架构解析 434
16.3 基于controller-runtime的cainjector架构解析 441
16.3.1 cainjector的启动流程 441
16.3.2 cainjector的Reconcile函数 446
16.4 本章小结 448

教学资源推荐
作者: (美)Bjarne Stroustrup 著
作者: 辛运帏 高宁 徐文拴 等编著
作者: [美] 尤金尼·E.米哈伊洛夫(Eugeniy E. Mikhailov) 著
参考读物推荐
作者: Peter Cooper
作者: (美)马丁 L. 阿伯特(Martin L. Abbott)  迈克尔 T. 费舍尔(Michael T. Fisher) 著