猜你喜欢
云原生应用管理:原理与实践

云原生应用管理:原理与实践

书籍作者:陈显鹭 ISBN:9787111659495
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7536
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

这是一部从原理与实践角度讲解云原生应用管理的著作,是阿里云容器服务团队工程师多年云原生应用开发与管理经验的总结。详细讲解了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的概念、发展和工作原理,然后详细讲解了它的功能、用法、架构、组件和实战,最后通过源代码分析了它的实现原理。


作者简介

陈显鹭

阿里云容器服务技术专家, CNCF基金会下多个项目的贡献者和维护者,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。

阚俊宝

阿里云容器服务技术专家,专注Kubernetes、Docker、云存储,是阿里云CSI存储核心维护者。

匡大虎

阿里云容器服务技术专家,专注云原生安全,是阿里云容器服务云原生安全核心成员。

卢稼奇

阿里云容器服务高级开发工程师,专注Kubernetes、云原生应用编排、前端技术开发。


编辑推荐
适读人群 :希望深入理解Kubernetes上的应用管理的读者 已经使用过Helm等应用管理工具,希望探查更多细节的读者 希望了解如何使用Go语言编写应用管理工具的程序员 云原生爱好者

(1)4位作者均是来自阿里云容器服务团队的资深技术专家,在云原生应用的开发和管理方面积累了丰富的经验。

(2)本书得到了阿里云容器服务负责人易立、CNCF技术监督委员会成员李响、阿里巴巴高级技术专家李鹏等的推荐

(3)不仅详细讲解了Helm、Kustomize、CNAB、Operator等云原生应用框架的功能、使用,并通过源码分析它们的工作原理

(4)提供大量案例和代码解析,实战性极强


前言

Preface 前  言

为什么要写这本书

云原生可谓当下最火热的项目开发技术之一,各种传统应用都在向云原生应用的方向靠拢。但是到底什么是云原生应用,云原生应用的开发标准是什么,至今还没有一个统一的规范与定义。这就造成了云原生社区百家争鸣的局面,各大厂商争先发布自己的云原生应用定义。

我是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语言编写应用管理工具的程序员

云原生爱好者

如何阅读

本书内容是实战与源码分析相结合,因此仅仅靠阅读是无法体会所有要点的。本书所有分析的源码均是开源项目,希望读者能够根据内容,寻找到对应的源码,边看源码边解析。最好能够根据自己的理解,在本机运行一下,以便了解整个代码的运行流程。

关于勘误

由于写作时间和水平有限,本书难免存在一些纰漏和错误。如果读者发现了问题,请及时与我们联系,我们也会在后面的版本中加以改正,联系邮箱:[email protected]。非常希望与大家共同学习云原生技术。

致谢

最后,向在本书编写过程中给予巨大帮助的人们表示诚挚的感谢。感谢妻子的支持,编写此书期间,恰逢妻子怀孕,感谢她的理解和包容,很多时候忽略了她。希望此书也能作为给未来的新生命的贺礼。

感谢阿里云容器服务团队在本书编写期间给予的理解与包容。

最后,感谢杨福川编辑,在他的帮助与支持下,本书由一个想法变成了实体展现给各位读者;感谢张锡鹏编辑的辛苦付出,帮助我们多次改稿,修复各种低级错误,极大地提升了本书的文字质量。


陈显鹭

2020年4月


目录

Contents?目  录

前言

第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


短评

不错

2020-09-12 10:14:42

是不错,留着收藏了,是的

2020-08-29 13:46:08

~出门,值得一读,很有收获

2020-08-29 10:02:41

长得丑就要多读书,更要读好书。

2020-08-12 10:08:34

拾烂钱的一本书,书上的东西都落时了,真为我司感到**,一群p7出来拾烂钱

2020-07-29 10:19:08

内容很实用,正是我们需要的

2020-07-28 18:43:29

产品特色