本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
(1)4位作者均是来自阿里云容器服务团队的资深技术专家,在云原生应用的开发和管理方面积累了丰富的经验。
(□)本书得到了阿里云容器服务负责人易立、CNCF技术监督委员会成员李响、□□□□高级技术专家李鹏等的推荐
(3)不仅详细讲解了Helm、Kustomize、CNAB、Operator等云原生应用框架的功能、使用,并通过源码分析它们的工作原理
(4)提供大量案例和代码解析,实战性极强
这是一部从原理与实践角度讲解云原生应用管理的著作,是阿里云容器服务团队工程师多年云原生应用开发与管理经验的总结。详细讲解了Helm、Kustomize、CNAB、Operator等云原生应用管理框架和工具的应用场景、功能和使用,并通过源码讲解了它们的实现原理,同时提供了大量的案例和代码解析,能帮助读者轻松掌握云原生应用的管理。
全书一共16章,分为4个部分:
□□部分(□□~4章) Helm
首先介绍了Helm的发展历程、适用场景、架构设计、工作机制;然后以Chart为例,讲解了Helm的功能和使用方法;□后通过源代码分析了Helm的实现原理。
第二部分(第5~8章) Kustomize
首先介绍了Kustomize的诞生背景、适用场景、工作机制;然后详细讲解了它的功能和使用方法;□后通过源代码分析了它的实现原理。
第三部分(第9~1□章) CNAB
首先介绍了CNAB的基本概念、原理和规范;然后以Porter为例,详细讲解了它的功能、用法和实战;□后通过源代码分析了Porter的实现原理,同时讲解了mixin的开发。
第四部分(□□3~16章) Operator
首先介绍了Operator的概念、发展和工作原理,然后详细讲解了它的功能、用法、架构、组件和实战,□后通过源代码分析了它的实现原理。
Preface 前 言
为什么要写这本书
云原生可谓当下□火热的项目开发技术之一,各种传统应用都在向云原生应用的方向靠拢。但是到底什么是云原生应用,云原生应用的开发标准是什么,至今还没有一个统一的规范与定义。这就造成了云原生社区百家争鸣的局面,各大厂商争先发布自己的云原生应用定义。
我是□014年开始接触容器技术的,□早从Docker镜像入门,当时的使用体验是,Docker镜像能够很好地隔离环境差异,做到一次构建、到处运行,为应用的打包与发布操作带来极大便利。
随着微服务理念的发展,应用开始变得越来越庞大,功能也越来越复杂,这时Docker Compose编排模板便应运而生了。通过它,技术人员可以方便地编辑模板以实现应用的打包与发布。后来随着Kubernetes的诞生与发展,声明式定义又开始风靡技术圈,大家逐渐倾向于使用面向终态的架构设计。现在的Kubernetes基本奠定了容器编排领域的标准。
可是随之而来的问题就是,Kubernetes原生的部署方式比较凌乱,部署资源散落在各处,没办法统一归拢管理,这给应用的发布与部署带来了□□□□的困难。□□个尝试解决这个问题的管理工具就是Helm—一个构建在Kubernetes上的包管理工具,它通过将Kubernetes应用的部署模板统一压缩成包并标明版本号的方式进行管理,是□□能够进行版本管理的云原生应用管理器。
随着Kubernetes 应用的增多,很多复杂的有状态应用也开始部署在集群中,这给Helm运行带来了很大的困难。Helm初期只是用于管理一些简单的无状态应用部署,对于复杂的有状态应用则有些力不从心。鉴于此,又诞生了Operator,Operator赋予应用管理者巨大的权限,可以让管理者自己编写运维脚本,以便管理者能够更好地发布与管理应用。
在应用管理器层出不穷的时候,应用定义这一领域也没有停下发展的脚步。微软推出的CNAB和□□□□集团推出的Open Application Model(OAM),都旨在定义云原生应用的标准。这些理念□□了Kubernetes的界限,更加抽象和广泛地定义了未来云原生应用的标准与风格。
因此我们想写一本书,介绍目前市面上各大社区与厂商推出的云原生管理工具与理念,让大家对云原生应用目前的状态有一个清晰的认识,从而根据自己的需求来挑选适合自己的云原生应用管理工具。
本书的内容
本书内容从逻辑上主要分为以下四部分。
□□部分Helm(□□~4章)
主要介绍Helm的历史与发展过程。我们将从Chart开始讲解,经过抽丝剥茧,帮助读者厘清Chart的各种写法。同时提供了目前主流社区生产使用的Chart供读者学习。后面将以安装Chart为例,从源码角度介绍Helm的整个安装过程,让读者能够更加深入地理解Helm这个包管理工具的原理及其使用方法。
第二部分 Kustomize(第5~8章)
主要介绍Kustomize诞生的原因。我们将从Kustomize的概念入手,详细了解Kustomize的各个功能,同时结合Kustomize的各个插件来理解其覆盖的领域与功能。□后从源码角度入手,详细讲解Kustomize各个命令的执行过程。
第三部分 CNAB和Porter(第9~1□章)
主要介绍CNAB的概念、CNAB推出的背景与意义。这部分内容从概念入手,详细介绍管理工具Porter是如何实践CNAB概念的。□后从源码角度对Porter进行分析。
第四部分 Operator(□□3~16章)
主要介绍Operator的概念和工作原理,以及Operator Framework目前涵盖的组件。我们将以一个具体示例为模板,详细介绍Operator在有状态应用管理中的作用,□后从源码角度分析各个功能的实现原理。
适用读者
希望深入理解Kubernetes上的应用管理的读者
已经使用过Helm等应用管理工具,希望探查更多细节的读者
希望了解如何使用Go语言编写应用管理工具的程序员
云原生爱好者
如何阅读
本书内容是实战与源码分析相结合,因此仅仅靠阅读是无法体会所有要点的。本书所有分析的源码均是开源项目,希望读者能够根据内容,寻找到对应的源码,边看源码边解析。□好能够根据自己的理解,在本机运行一下,以便了解整个代码的运行流程。
关于勘误
由于写作时间和水平有限,本书难免存在一些纰漏和错误。如果读者发现了问题,请及时与我们联系,我们也会在后面的版本中加以改正,联系邮箱:xianlubird@gmail.com。非常希望与大家共同学习云原生技术。
致谢
□后,向在本书编写过程中给予巨大帮助的人们表示诚挚的感谢。感谢妻子的支持,编写此书期间,恰逢妻子怀孕,感谢她的理解和包容,很多时候忽略了她。希望此书也能作为给未来的新生命的贺礼。
感谢阿里云容器服务团队在本书编写期间给予的理解与包容。
□后,感谢杨福川编辑,在他的帮助与支持下,本书由一个想法变成了实体展现给各位读者;感谢张锡鹏编辑的辛苦付出,帮助我们多次改稿,修复各种低级错误,极大地提升了本书的文字质量。
陈显鹭
□0□0年4月
Contents?目 录
前言
□□章 什么是Helm 1
1.1 Helm的发展历程 1
1.□ Helm的适用场景 □
1.3 Helm的社区和生态 3
1.4 Helm的架构设计与工作原理 4
1.4.1 Helm Client 4
1.4.□ Tiller 5
1.5 本章小结 5
第□章 Chart 7
□.1 Chart文件结构 7
□.1.1 Chart.yaml 8
□.1.□ Chart license, README notes 9
□.1.3 Chart Dependences 10
□.1.4 template和values 14
□.□ Helm功能初体验 18
□.□.1 前置条件 18
□.□.□ Helm的三大基本概念 18
□.□.3 安装Helm 18
□.□.4 安装□□个Chart 19
□.□.5 查看当前安装实例 □1
□.□.6 删除安装的实例 □1
□.□.7 Helm后端存储 □□
□.3 helm install □3
□.4 Helm 更新与回滚 □5
□.4.1 helm upgrade □5
□.4.□ helm history □5
□.4.3 helm rollback □6
□.4.4 一些有用的更新参数 □6
□.5 helm repo □6
□.6 创建自己的Chart □8
□.7 Helm Hooks □9
□.7.1 Helm支持的Hooks种类 30
□.7.□ Hooks 与Release 生命周期的关系 30
□.7.3 简单的Hooks示例 31
□.7.4 使用crd-install来定义一个CRD 33
□.7.5 自动删除先前版本的Hooks 33
□.8 Helm插件 34
□.9 Chart测试 36
□.10 Chart模板开发高阶介绍 38
□.10.1 创建□□个template文件 39
□.10.□ 给template添加动态变量 41
□.10.3 模板函数与管道 4□
□.10.4 逻辑控制 45
□.10.5 变量 51
□.10.6 自定义模板 53
□.10.7 在模板中引用文件 58
□.10.8 创建一个NOTES.txt文件 60
□.11 本章小结 61
第3章 使用Helm部署Wordpress实战 63
3.1 下载Wordpress Chart 63
3.□ Chart.yaml 64
3.3 requirements.yaml 64
3.4 Charts文件夹 65
3.5 template文件夹 65
3.5.1 helper文件 66
3.5.□ NOTES.txt 68
3.5.3 其他文件 69
3.5.4 tests文件 71
3.6 README.md 7□
3.7 values.yaml 7□
3.8 安装 73
3.9 本章小结 76
第4章 Helm 源码分析 77
4.1 helm install 77
4.1.1 locateChartPath 78
4.1.□ 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.□ Helm Install Server 88
4.□.1 prepareRelease 89
4.□.□ performRelease 90
4.3 Helm update 93
4.3.1 update 命令的定义 93
4.3.□ Update 服务端的实现 94
4.4 helm ls 96
4.4.1 Client 端实现 96
4.4.□ Server端实现 98
4.5 Helm Rollback 100
4.6 Helm delete 10□
4.7 Helm 3简介 104
4.8 本章小结 108
第5章 Kustomize入门 109
5.1 Kustomize介绍 109
5.□ Kustomize原理介绍 111
5.3 Kustomize快速入门 113
5.3.1 安装Kustomize 113
5.3.□ 通过Kustomize部署helloworld 114
5.4 本章小结 117
第6章 Kustomize详解 118
6.1 Kustomize术语 118
6.□ Kustomize配置详解 1□1
6.□.1 资源 1□1
6.□.□ 生成器 1□□
6.□.3 转换器 1□4
6.3 命令行使用方法 1□8
6.3.1 命令行使用 1□8
6.3.□ 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.□ 使用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 插件介绍 16□
6.5.□ Exec类型插件 163
6.5.3 Go库文件插件 165
6.6 工作流 169
6.6.1 创建配置仓库 169
6.6.□ 配置下发 170
6.6.3 使用共享配置 170
6.7 本章小结 17□
第7章 Kustomize实战 173
7.1 示例介绍 173
7.1.1 基础配置 174
7.1.□ 测试环境 177
7.1.3 生产环境 180
7.1.4 配置管理 185
7.□ 通过插件实现不同环境下部署不同的模板 186
7.□.1 项目介绍 187
7.□.□ 插件实现 188
7.□.3 运行插件 191
7.3 本章小结 193
第8章 Kustomize源码分析 194
8.1 Kustomize 执行流程介绍 194
8.□ kustomize build命令解析 196
8.□.1 NewCmdBuild函数解析 197
8.□.□ NewCmdBuildPrune函数详解 198
8.□.3 RunBuild函数详解 199
8.□.4 AccumulateTarget 解析 □03
8.□.5 addHashesToNames函数 □10
8.□.6 ResolveVars函数 □11
8.□.7 computeInventory函数 □1□
8.3 kustomize edit命令分析 □14
8.4 add子命令 □15
8.5 set子命令 □□5
8.6 Fix子命令 □□8
8.7 remove子命令 □□9
8.8 kustomize create 命令分析 □30
8.9 本章小结 □33
第9章 走近CNAB □34
9.1 什么是CNAB □34
9.□ CNAB 基本概念和原理 □36
9.3 CNAB规范 □38
9.3.1 bundle.json文件格式 □39
9.3.□ 调用镜像 □45
9.3.3 应用包运行规范 □46
9.3.4 包格式规范 □47
9.4 Duffle和Porter □48
9.4.1 使用Duffle打包Wordpress □48
9.4.□ 使用Porter打包Wordpress □50
9.4.3 使用Duffle还是Porter □51
9.5 本章小结 □51
□□0章 Porter使用详解 □5□
10.1 Porter快速上手 □5□
10.1.1 安装Porter □5□
10.1.□ 创建应用包 □53
10.1.3 部署应用 □54
10.1.4 更新和卸载应用 □55
10.□ 创建应用包 □55
10.□.1 应用包元数据 □57
10.□.□ mixin □57
10.□.3 参数 □58
10.□.4 输出 □59
10.□.5 校验规则 □60
10.□.6 凭据 □60
10.□.7 应用包操作 □61
10.□.8 自定义操作 □63
10.□.9 依赖 □63
10.□.10 镜像 □63
10.□.11 自定义Dockerf?ile □64
10.3 mixin □65
10.3.1 安装mixin □66
10.3.□ 常用mixin介绍 □66
10.4 Porter命令详解 □70
10.5 OCI仓库与应用分发 □76
10.6 使用Porter分发CNAB应用 □78
10.6.1 发布应用包 □78
10.6.□ □□应用包 □80
10.6.3 导出应用包 □81
10.7 本章小结 □8□
□□1章 Porter实战 □83
11.1 创建基本的应用框架 □83
11.1.1 环境准备 □83
11.1.□ 创建基本的应用框架 □84
11.□ 支持参数和输出 □88
11.3 定义多个操作步骤 □91
11.4 发布应用包 □95
11.5 使用应用包依赖 □98
11.6 本章小结 300
□□□章 Porter mixin开发和源码解析 301
1□.1 mixin实现原理 301
1□.1.1 mixin调用机制 301
1□.1.□ mixin API 30□
1□.□ mixin开发 306
1□.□.1 创建mixin项目 306
1□.□.□ mixin代码概览 308
1□.□.3 实现build命令 31□
1□.□.4 定义JSON Schema 313
1□.□.5 实现参数组装逻辑 316
1□.3 Porter build源码解析 3□0
1□.4 Porter install源码解析 3□9
1□.4.1 准备应用包 330
1□.4.□ 准备和执行依赖 33□
1□.4.3 执行主应用包操作 336
1□.4.4 Docker驱动的运行过程 339
1□.5 Porter运行时源码解析 34□
1□.6 本章小结 346
□□3章 全面了解Operator 347
13.1 初识Operator 348
13.1.1 什么是Operator 348
13.1.□ Operator的发展 349
13.1.3 Operator的社区与生态 351
13.□ Operator Framework 35□
13.3 Operator 工作原理 354
13.4 本章小结 357
□□4章 Operator Framework功能详解 358
14.1 Operator SDK 358
14.1.1 安装Operator SDK CLI 358
14.1.□ 使用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.□ Operator Lifecycle Manager 387
14.□.1 OLM组件模型定义 387
14.□.□ OLM结构介绍 389
14.□.3 OLM的安装 390
14.□.4 依赖解析和升级管理 39□
14.□.5 operator-registry 395
14.3 Operator Metering 398
14.3.1 Operator Metering基本架构 398
14.3.□ Operator Metering核心组件 400
14.4 本章小结 407
□□5章 Operator实战 408
15.1 基于Operator SDK构建Operator 408
15.1.1 生成□□个Operator项目 408
15.1.□ 创建自定义资源定义 409
15.1.3 创建Controller 410
15.1.4 Operator的构建和运行 416
15.□ 使用Operator Lifecycle Manager 419
15.□.1 构建一个CSV 419
15.□.□ 基于Operator Lifecycle Manager测试Operator 4□3
15.3 部署和使用Operator Metering 4□5
15.3.1 安装Operator Metering 4□6
15.3.□ 定制化Prometheus Report Queries 4□6
15.4 本章小结 43□
□□6章 Operator示例:cert-manager源码解析 433
16.1 cert-manager基本介绍 433
16.□ cert-manager组件架构解析 434
16.3 基于controller-runtime的cainjector架构解析 441
16.3.1 cainjector的启动流程 441
16.3.□ cainjector的Reconcile函数 446
16.4 本章小结 448
陈显鹭
阿里云容器服务技术专家, CNCF基金会下多个项目的贡献者和维护者,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。
阚俊宝
阿里云容器服务技术专家,专注Kubernetes、Docker、云存储,是阿里云CSI存储核心维护者。
匡大虎
阿里云容器服务技术专家,专注云原生安全,是阿里云容器服务云原生安全核心成员。
卢稼奇
阿里云容器服务高级开发工程师,专注Kubernetes、云原生应用编排、前端技术开发。