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

Knative实战:基于Kubernetes的无服务器架构实践
作者 : 李志伟 游杨 著
出版日期 : 2021-03-04
ISBN : 978-7-111-67558-7
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 282
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从实战角度讲解了Knative的原理与开发。
全书正文一共11章,共4个部分:
一、准备篇(第1~2章)
全面介绍了Serverless,Knative的概念、优势、架构设计、工作原理,以及开发环境的搭建。
二、基础篇(第3~5章)
详细讲解了Knative的三大核心组件:Serving、Eventing和Tekton pipeline。
三、实战篇(第6~8章)
主要介绍了Knative的云原生微服务的设计与实现、Knative的FaaS实现,以及性能优化相关的主题。
四、扩展篇(第9~11章)
讲解了与Knative相关的日志中心、监控报警平台和可视化工具。

图书特色

当当网云原生实验室技术团队出品
架构设计、功能、原理、开发、运维5个维度全面剖析Knative

图书前言

Serverless一直是开发者的美好愿望,也是软件开发目标最终回归本质的选择。随着云原生平台逐渐成熟并成为主流解决方案,Serverless计算平台已经有了长足的进步。2020年,行业中的各大Serverless计算平台变得更加通用。例如,通过预留资源完全消除冷启动对延时的影响,使得延时敏感的在线应用也能够使用Serverless方式构建。同时,Serverless生态不断发展,在应用构建、安全、监控报警等领域涌现出了很多开源项目和创业公司,工具链越来越成熟。用户对Serverless的接受度不断提高,传统企业也开始采用Serverless技术。Serverless正在如下几方面持续演进。
1)Serverless的使用场景从偏离线业务进一步扩展到在线业务。以FaaS为代表的Serverless技术一开始都是从对响应时间不敏感、事件驱动的偏离线业务入手的。现在,我们已经看到,包括AWS Lambda Provisioned Capacity和Azure Functions Premium plan在内的产品都是让用户付出一点额外的成本来换取更短的响应时间。这对于在线业务来说,无疑是更适合的。
2)Serverless不仅赋予了应用弹性计算的能力,也推动了基础设施和后端服务的无服务器化。业务代码托管给Serverless平台之后,即可实现自动扩缩容、按请求计费。但是,如果基础设施和相关服务不具备实时扩缩容能力,那么业务整体就不是弹性的。我们已经看到AWS围绕Lambda对VPC网络、数据库连接池等资源做了大量实时弹性优化,相信其他厂商也会跟进,进而使行业整体加速基础设施和各类云服务的无服务器化。
3)以Knative为代表的开源解决方案受到越来越多的关注。尽管各个云厂商都在大力推广自己的Serverless产品,但是开发者普遍还是会担心被厂商绑定,因此具备一定规模的组织会基于开源方案,如Knative,搭建自己的Serverless平台。一旦某个开源方案成为主流,云厂商就会主动去兼容开源标准并增大社区投入。
4)Serverless开发者工具和框架会更加多样。IDE、问题诊断、持续集成/发布等配套的工具和服务会更加完善。我们将看到更多的成功案例和实践。
5)Java持续发展,将成为Serverless平台的主流语言之一。Serverless平台要求应用的镜像足够小,以便能够快速分发,同时要求应用的启动时间极短。虽然在这些方面,Java和Node.js、Python等语言相比有差距,但是Java社区一直在不断努力。我们看到Java通过Java 9 Modules以及GraalVM Native Image等技术在不断“瘦身”。主流框架Spring也开始拥抱GraalVM,而新的框架如Quarkus和Micronaut也在力争突破。期待Java在Serverless领域给人焕然一新的感觉。
6)解决FaaS状态传递的中间层(加速层)研究或产品有望得到突破。未来,Serverless在函数计算场景下最大的挑战是函数之间串联需要状态传递,以及函数处理时频繁和外部交互带来的时延放大,等等。在传统架构下,状态传递和函数处理都是在一个程序进程内部完成的。上述挑战需要通过可计算中间层(加速层)来解决。可计算中间层是未来学术研究和产品攻坚的方向之一。
7)基于WebAssembly(WASM)的FaaS方案有望出现。Docker创始人Solomon Hykes曾说:“如果2008年有WASM和WASI,我们当时就没有必要创造Docker了。”这句话在一定程度上说明了WASM的重要性。虽然当下WASM更多是作为一种运行在浏览器端的技术被人了解,但是它具备非常优秀的安全隔离能力、极快的启动速度,并支持超过20种语言。那么,为什么不能让它运行在服务端呢?这些技术特性都非常契合FaaS的要求。
事实上,随着Knative社区的快速发展壮大,Knative已经成为Kubernetes平台上最佳的Serverless解决方案。与传统的FaaS平台不同,Knative的服务管理并不需要统一的开发框架支持,应用只要封装成可运行的容器即可。这极大地扩展了Knative的适用范围,同时也使得传统微服务可以更加平滑地转换成Serverless应用。
基于此,我们希望能够为开发者提供一本系统学习Knative的工具书,从Serverless的概念到Knative的实战,努力将Knative的全貌展现给读者,也希望Knative能够为企业提升工程效率、降低计算成本。
本书内容
全书分为4篇,具体内容如下。
准备篇(第1~2章):通过介绍Serverless与Knative项目的技术背景、架构设计以及相关的云原生平台基础设施,帮助读者了解Serverless技术。通过快速搭建Knative测试平台,使读者直观地感受Knative是如何管理应用的。
基础篇(第3~5章):通过对Knative Serving和Eventing组件、CI/CD平台的介绍,帮助读者全面了解各个组件的基础概念、架构设计及原理。
实战篇(第6章):采用多个实际范例来验证Knative的服务管理能力以及事件驱动基础设施的能力。
扩展篇(第7~9章):详细介绍了运维Knative平台需要关注的内容,包括Serving的高级配置、日志中心、监控平台。
本书的读者对象
对Serverless技术感兴趣的读者。
想要将Knative引入当前技术栈的架构师。
想要采用Serverless技术的应用开发者。
想要自己维护Knative Serverless平台的运维开发人员。
勘误与支持
如果你在阅读本书的过程中有任何问题或者建议,可以在GitHub的源码仓库提交Issue或者以PR的方式进行交流。我们会对你提出的问题、建议进行梳理,并在本书后续版本中及时做出勘误与更新。
Knative是一个开源项目,书中使用了官方的示例源代码,读者可以通过以下链接获取相关内容。
Knative项目官网:https://knative.dev/。
Knative项目源代码:https://github.com/knative。
本书在GitHub上的源码仓库:https://github.com/knativebook/knative-practices。
致谢
在本书的写作过程中,作者得到了众多同事及朋友的鼓励,在此对他们表示感谢。感谢机械工业出版社华章分社的策划编辑杨福川老师、责任编辑董惠芝老师,是他们的鼓励才让我们能够坚持写完本书。也感谢Knative开源社区的贡献者,是他们辛勤、无私的工作,让我们得以与Serverless如此近距离接触。谢谢大家!

上架指导

计算机\程序设计

封底文字

随着云原生技术的快速发展,无服务器架构再次成为热门技术重回人们的视线。Knative是新一代开源Serverless解决方案的代表。它建立在容器与Kubernetes基础上,是云原生生态的重要组成部分。
Serverless正在改变应用软件的开发和运维模式。作为一种面向开发者友好的云计算服务,Serverless实现了将业务需求与技术需求解耦,降低了应用的复杂度,提高了应用的开发效率。Serverless具有自动弹性扩展、资源按需分配的特点,大幅减少了运维工作量,提高了计算资源的利用率。

通过阅读本书,你将:
全面了解Serverless的主要特点及发展现状
深入了解Knative服务管理与事件驱动组件的工作原理
掌握通过Tekton实现无服务器应用的CI/CD
掌握基于Knative的云原生应用设计
了解Knative的运维管理工具(日志中心、监控报警平台)

作者简介

李志伟 游杨 著:作者简介
李志伟
当当网云原生实验室负责人,容器云领域专家。在Kubernetes、Istio、Serverless、DevOps工具等领域有深入的研究和实践。热心于云原生技术的应用与推广,曾荣获“K8sMeetup中国社区”最受欢迎讲师奖项。
游杨
当当网云原生实验室高级运维开发工程师。先后参与Kubernetes和Knative项目的落地与实施工作,拥有丰富的容器平台实践经验,聚焦于Kubernetes、Serverless、CI/CD技术领域。

图书目录

前言
准备篇
第1章 全面认识Knative 2
1.1 Serverless的前世今生 2
1.1.1 Serverless简介 2
1.1.2 Serverless的主要特征 3
1.1.3 Serverless的优缺点 3
1.1.4 Serverless的发展现状 4
1.1.5 Serverless的使用场景 4
1.2 什么是Knative 4
1.2.1 Knative的产生背景及发展历程 5
1.2.2 Knative的架构设计 5
1.2.3 Knative的主要受众群 6
1.2.4 Knative的商业托管服务产品 7
1.3 Knative开发运维需要具备的基础知识 7
1.3.1 容器 7
1.3.2 Kubernetes 8
1.3.3 Istio 9
1.4 本章小结 10
第2章 搭建Knative运行环境 11
2.1 在Kubernetes平台上安装Knative 11
2.1.1 Istio平台的安装 12
2.1.2 安装Knative Serving组件 13
2.1.3 安装Knative Eventing组件 14
2.1.4 安装可观察性组件 14
2.2 部署HelloWorld应用 15
2.2.1 Serving Hello World范例 15
2.2.2 Eventing Hello World范例 16
2.3 本章小结 19
基础篇
第3章 Knative的服务管理组件Serving 22
3.1 Serving的架构设计 22
3.2 Knative相关的Kubernetes Service 23
3.3 Autoscaler的工作流程 24
3.4 Queue Proxy 25
3.5 本章小结 26
第4章 Knative的事件驱动组件Eventing 27
4.1 Eventing的架构设计 27
4.1.1 总体设计目标 28
4.1.2 Eventing的基础概念 28
4.1.3 事件传递方式 29
4.2 关于CloudEvent 30
4.2.1 CloudEvent简介 30
4.2.2 术语 30
4.2.3 上下文属性 32
4.2.4 事件数据 34
4.2.5 大小限制 34
4.2.6 隐私与安全 35
4.2.7 示例 35
4.3 事件源 35
4.3.1 核心事件源 35
4.3.2 社区贡献的事件源 36
4.3.3 Google Cloud Source 36
4.4 Broker/Trigger事件模型 36
4.4.1 工作原理 37
4.4.2 默认代理配置 37
4.4.3 Broker/Trigger模型范例 38
4.5 事件注册表 39
4.5.1 事件发现 39
4.5.2 事件订阅 40
4.5.3 填充事件注册表 42
4.6 事件流控制 43
4.6.1 Sequence 43
4.6.2 Parallel 44
4.7 事件通道 45
4.7.1 当前可用的通道 45
4.7.2 默认通道设置 45
4.8 本章小结 46
第5章 基于Tekton的CI/CD平台 47
5.1 Tekton概述 47
5.1.1 Tekton的优势 47
5.1.2 Tekton的组件构成 48
5.1.3 Tekton的资源对象 48
5.2 Tekton的概念模型 49
5.2.1 Step、Task和Pipeline 49
5.2.2 输入与输出资源 50
5.2.3 TaskRun与PipelineRun 51
5.2.4 Tekton的运作方式 51
5.3 Tekton Pipeline资源对象详解 52
5.3.1 Task 52
5.3.2 TaskRun 66
5.3.3 Pipeline 74
5.3.4 PipelineRun 97
5.3.5 条件资源 111
5.3.6 变量替换 113
5.3.7 基于Git与Docker Registry的身份验证 117
5.3.8 基于Kubectl向Kubernetes集群持续部署 124
5.4 Trigger 126
5.4.1 TriggerTemplate 126
5.4.2 TriggerBinding 128
5.4.3 EventListener 131
5.4.4 将EventListener暴露给外部 138
5.4.5 ClusterTriggerBinding 138
5.4.6 CEL表达式扩展 139
5.5 Dashborad简介 140
5.5.1 Dashboard主要支持功能 140
5.5.2 Dashboard常用功能示例 141
5.6 安装Tekton Pipeline及相关组件 143
5.6.1 Tekton Pipeline安装 143
5.6.2 Tekton Dashborad安装 145
5.6.3 Tekton Trigger安装 145
5.7 应用CI/CD配置示例 146
5.7.1 Java语言配置示例 146
5.7.2 PHP语言配置示例 151
5.8 本章小结 155
实战篇
第6章 基于Knative的云原生应用的设计实现 158
6.1 云原生应用的设计原则 158
6.2 使用Knative的服务管理组件管理应用 160
6.2.1 部署一个Knative Service 161
6.2.2 更新Knative Service Configuration 164
6.2.3 流量分发到不同版本 166
6.2.4 蓝绿部署与灰度发布 167
6.2.5 Knative Service的弹性伸缩配置 170
6.3 使用事件驱动组件解耦服务依赖 172
6.3.1 部署一个Knative事件驱动应用 172
6.3.2 使用通道与订阅方式传递事件 175
6.3.3 与Apache Kafka集成 177
6.3.4 ContainerSource事件源 180
6.3.5 PingSource事件源 182
6.3.6 Parallel 183
6.3.7 Sequence 187
6.3.8 SinkBinding 190
6.3.9 GitHub事件源 191
6.4 本章小结 194
扩展篇
第7章 Serving组件的扩展配置 196
7.1 自动扩缩容的配置 196
7.1.1 全局或修订版范围设置 196
7.1.2 Class 197
7.1.3 度量指标 198
7.1.4 目标值 198
7.1.5 缩放边界 202
7.1.6 KPA特性设置 203
7.2 路由管理 208
7.2.1 定制Knative服务的主域名 208
7.2.2 DNS泛域名解析配置 211
7.2.3 服务的可见范围控制 212
7.3 网络与安全 213
7.3.1 证书管理工具cert-manager 213
7.3.2 手动配置TLS证书 214
7.3.3 自动配置TLS证书 216
7.4 运维相关配置 220
7.4.1 从私有容器镜像仓库部署应用 220
7.4.2 组件高可用配置 221
7.5 本章小结 222
第8章 日志中心 223
8.1 基于EFK的日志中心解决方案 223
8.1.1 EFK基础功能介绍 223
8.1.2 应用日志格式说明 223
8.1.3 添加Fluentd配置 224
8.1.4 配置Kibana索引模式 225
8.1.5 数据搜索展示 225
8.1.6 创建可视化图表 225
8.1.7 创建仪表盘 227
8.2 本章小结 229
第9章 监控报警平台 230
9.1 基于Prometheus和Grafana的监控报警平台 230
9.1.1 Prometheus 230
9.1.2 Grafana 233
9.2 Knative仪表盘 233
9.3 本章小结 238
附录 239

教学资源推荐
作者: 王恺 王志 李涛 朱洪文 编著
作者: [美]埃里克 S. 罗伯茨(Eric S. Roberts) 著
作者: John R.Hubbard
参考读物推荐
作者: 深圳中科呼图信息技术有限公司 编著
作者: [瑞士]路易斯·汤斯顿(Lewis Tunstall),[瑞士]莱安德罗·冯·韦拉(Leandro von Werra),[法]托马斯·沃尔夫(Thomas Wolf) 著
作者: 陆凌牛 著
作者: Stephen C.Perry