书籍作者:比尔金伊卜亚姆 | ISBN:9787519845889 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:3824 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书介绍了以下模式类型:
基础模式涵盖构建基于容器的云原生应用程序的核心原则和实践。
行为模式详细介绍管理容器和平台交互的概念。
结构化模式教你如何通过在Pod中组织容器解决特定的用例。
配置模式讲述如何处理Kubernetes中应用程序的配置。
高级模式涵盖更复杂的主题,例如操作器和自动伸缩等。
Bilgin Ibryam(@bibryam)是红帽的首席架构师,阿帕奇软件基金会的成员,他曾向多个开源项目贡献代码。
RolandHuß(@ro14nd)是红帽的首席软件工程师,也是Knative无服务器团队的成员。
随着微服务和容器的发展,开发人员设计、构建和运行软件的方式已经发生了明显的变化。这些现代体系结构提供了新的分布式原语,开发人员、技术负责人和架构师在实现这些原语时也需要采用一套不同的实践。本书重点介绍在Kubernetes上设计和实现云原生应用程序时所需的通用且可重用的模式和原理。
本书中的每个模式都包含问题描述和特定于Kubernetes的解决方案。所有模式均提供具体的代码示例以及演示。本书主要面向熟悉Kubernetes基本概念的开发人员和架构师,帮助他们学习如何使用久经考验的设计模式解决常见的云原生难题。
前言
近年来,随着微服务和容器的发展,设计、开发和运行软件的方式发生了重大变化。如今的应用程序在可扩展性、弹性、故障和变化速度方面都得到了优化。在新原则的驱动下,这些现代架构需要不同的模式和实践。本书旨在帮助开发人员将Kubernetes 作为运行时平台创建云原生应用程序。首先,简要介绍一下本书的两个主要部分:Kubernetes 和设计模式。
Kubernetes
Kubernetes 是一个容器编排平台。Kubernetes 起源于谷歌的某个数据中心,谷歌的内部容器编排平台Borg 也诞生于此。多年来谷歌一直通过Borg 来运行应用程序。2014 年,谷歌决定利用Borg 的经验建立一个名为“Kubernetes”(希腊语为“舵手”或“飞行员”)的新开源项目。2015 年该项目成为首个捐赠给新成立的云原生计算基金会(Cloud Native Computing Foundation,CNCF)的项目。
Kubernetes 自创建之初就赢得了一个完整的用户社区,而且贡献者的数量以惊人的速度增长。如今,Kubernetes 成为GitHub 上最活跃的项目之一。在编写本书之际,Kubernetes 已是最常用且功能最丰富的容器编排平台。此外,许多其他平台也都构建于Kubernetes 之上。在这些平台即服务的系统中,最为突出的是红帽的OpenShift,它为Kubernetes 提供了各种附加功能,包括各种在平台内构建应用程序的方法。这些只是我们选择Kubernetes 作为本书云原生模式参考平台的部分原因。
你需要具备一定的Kubernetes 基本知识才能阅读本书。第1 章概括了Kubernetes 的核心概念,并为后续各个模式奠定了基础。
设计模式
设计模式的概念可以追溯到20 世纪70 年代的建筑领域。建筑师及系统理论家Christopher Alexander 与其团队于1977 年发表了开创性的《建筑模式语言》(牛津大学出版),其中描述了建立城镇、大楼和其他建筑项目的建筑模式。后来,这个想法被新兴的软件业采用。该领域最著名的书籍《设计模式:可复用面向对象软件的基础》由Erich Gamma、Richard Helm、Ralph Johnson与John Vlissides 四人合著,后以“四人组”著称。我们谈论的著名的单例模式、工厂方法或委托模式正是来自这本书。从那以后,许多优秀的模式书籍纷纷问世,针对各个领域从不同程度上进行了讲解,比如Gregor Hohpe 和BobbyWoolf 的《企业集成模式》,以及Martin Fowler 的《企业应用架构模式》。简而言之,模式描述了问题的可复用解决方案注1。模式不同于配方,因为模式不会提供解决问题的步骤说明,只提供了解决某一类问题的大概思路。例如,Alexander 的模式“啤酒馆”描述了如何建造公共的饮酒场所,“陌生人和朋友都可以在这种地方结伴饮酒”,不再做一只“孤独的锚”。所有依据这种模式建造的场所都会有所不同,但它们也有共同之处,例如可容纳4~8 人的隔间,以及可供百人饮酒、听音乐,以及其他活动的场所。
然而,模式不仅限于提供解决方案,它还关系到一种语言的形成。独特的模式名称形成了一种紧凑、以名词为中心的语言,其中每个模式都带有唯一的名称。在这种语言建立后,当人们谈论这些模式时,这些名称会自动让人们联想到类似的表征。例如,当我们谈论一张桌子时,我们会假设我们谈论的是有四条腿的一块木头,而且可以在上面放东西。软件工程也同样,例如当我们谈论“工厂”时,在面向对象的编程语言上下文中,我们会立即将“工厂”与生成其他对象的对象相关联。由于我们会立刻想起模式背后的解决方案,因此就可以节约时间来处理尚未解决的问题。
模式语言还有其他特征。各个模式之间相互关联且可以重叠,因此很多模式加在一起就可以解决大部分问题。此外,正如《建筑模式语言》中描述的那样,模式没有统一的详细程度和范围。宽泛的模式可以涵盖更广泛的问题,并为如何解决问题提供粗略的指导。详细度模式有一个非常具体的解决方案,但无法广泛适用。本书包含所有类型的模式,其中许多模式都引用了其他模式,甚至可能将其他模式作为解决方案的一部分。
模式的另一个特征是它们都遵循严格的格式。然而,每个作者都定义了不同的格式,但我们没有统一的标准规定模式。Martin Fowler 在《WritingSoftware Patterns》中概述了模式语言的格式。
本书的组织结构
我们为本书选择了一种简单的模式格式。我们不遵循任何特定的模式描述语言。针对每个模式,我们使用以下结构:
名称
每个模式都带有一个名称,这也是章节的标题。名称是模式语言的中心。
问题
本节描述了背景信息,并详细描述了模式的应用范围。
解决方案
本节介绍了模式以Kubernetes 特有的方式解决问题的方法。本节还给出与当前模式相关、或是当前模式的一部分的其他模式的引用。
讨论
本节讨论了针对给定上下文的解决方案的优缺点。
参考资料
最后一节包含了与模式相关的其他信息来源。
我们按照如下结构介绍了本书中的模式:
?? 第一部分 基础模式,涵盖了 Kubernetes 的核心概念。本章介绍了构建基于容器的云原生应用程序的基本原则和实践。
?? 第二部分 行为模式,描述了基础模式之上的模式,并详细介绍了管理各种类型的容器和平台交互的概念。
?? 第三部分 结构化模式,涵盖了与在 Pod 内组织容器相关的模式,Pod 是Kubernetes 平台的基本组成单位。
?? 第四部分 配置模式,深入讲解在 Kubernetes 中处理应用程序配置的各种方法。本部分中的模式涉及很多细节,包括将应用程序连接到配置的具体方案。
?? 第五部分 高级模式,包括很多高级概念,例如扩展平台本身的方式,以及在集群内直接构建容器镜像的方式。
有的模式可能不仅适合于一个类别。根据上下文不同,同一个模式可能也可以适用于多个类别。每个模式章节都是独立的,你可以按照任意顺序单独阅读各个章节。
本书面向的读者对象
本书面向希望Kubernetes 平台设计和开发云原生应用程序的开发人员。如果你对容器和Kubernetes 的概念有基本的了解,并希望提升自身的水平,那么本书非常适合你。你无需了解Kubernetes 的底层知识也可以理解书中的用例和模式。架构师、技术顾问和开发人员都可以从本书中描述的可复用模式中受益。
本书的内容以实际项目中的用例和经验教训为基础。我们希望帮助你创建更好的云原生应用程序,而不是重新发明轮子。
内容提要
本书有很多值得探索的地方。有些模式看起来可能像Kubernetes 手册中的摘录,但仔细观察后,你就会发现这些模式是从概念的角度呈现的,这是其他书籍中从未出现过的角度。有些模式通过不同的方法进行了解释,并针对具体的问题提供了详细的指导,如第四部分中的“配置模式”。
无论模式呈现的细节多少,你都可以通过大量示例针对这些概念的说明,了解Kubernetes 为每种特定模式提供的所有内容。书中所有的示例都经过了测试,你可以通过后续“使用代码示例”一节中介绍的方式获取完整的源代码。
在深入学习之前,首先让我们简要地看一看这本书不包含的内容:
?? 本书不是关于如何设置 Kubernetes 集群的指南。每个模式和每个示例的前提都是你已有启动并运行Kubernetes。你可以通过多种方式尝试这些示例。如果你有兴趣学习如何设置Kubernetes 集群,那么我们建议你阅读Brendan Burns 和Craig Tracey 的著作《管理Kubernetes》。另外,Michael Hausenblas 与SébastienGoasguen 合著的《Kubernetes 经典实例》一书中介绍了大量设置Kubernetes 集群的方法。
?? 本书不是有关 Kubernetes 的介绍,也不是参考手册。我们介绍了大量Kubernetes 的功能,并给出了详细的解释,但我们关注的是这些功能背后的概念。第1 章简要介绍了Kubernetes 的基础知识。如果你需要有关Kubernetes 使用方面的综合性书籍,那么我们强烈推荐MarkoLuk??a 的著作《Kubernetes in Action》。
本书的写作风格非常轻松,各章均可单独阅读。
内容约定
如上所述,模式形成了一种简单、彼此关联的语言。为了强调这种模式的关联,每种模式都用斜体字来表示(例如,Sidecar)。当模式根据Kubernetes 的核心概念(如初始化容器或控制器)命名时,我们仅在直接引用模式本身时才使用这种特定的格式。如果有必要,我们还会给出相应的章节。
此外,本书还采用下述约定:
?? 凡是可以在 shell 或编辑器中键入的内容都以固定宽度的字体显示。
?? Kubernetes 资源的名称始终以大写形式呈现(如 Pod)。如果资源采用了组合名称(如ConfigMap),我们也会采用这种形式,因为这种形式可以更为清晰地表示“config map”,而且还表明它指代Kubernetes 概念。
?? 有时,Kubernetes 的资源名称与“服务”或“节点”等常见概念相同。在这些情况下,我们仅在引用资源本身时使用资源名称格式。
使用代码示例
本书中的每个模式都有完整的可执行示例支持,你可以通过本书的主页找到这些示例(地址:https://k8spatterns.io/)。你还可以在每章末尾“参考资料”一节中找到每个模式示例的链接。
“参考资料”小节还包含许多指向与模式相关信息的链接。我们会通过示例代码库更新参考资料的列表,同时还会通过推特发布这些链接的变更。
Kubernetes 使用方面的综合性书籍,那么我们强烈推荐MarkoLuk??a 的著作《Kubernetes in Action》。
本书的写作风格非常轻松,各章均可单独阅读。
内容约定
如上所述,模式形成了一种简单、彼此关联的语言。为了强调这种模式的关联,每种模式都用斜体字来表示(例如,Sidecar)。当模式根据Kubernetes 的核心概念(如初始化容器或控制器)命名时,我们仅在直接引用模式本身时才使用这种特定的格式。如果有必要,我们还会给出相应的章节。
此外,本书还采用下述约定:
?? 凡是可以在 shell 或编辑器中键入的内容都以固定宽度的字体显示。
?? Kubernetes 资源的名称始终以大写形式呈现(如 Pod)。如果资源采用了组合名称(如ConfigMap),我们也会采用这种形式,因为这种形式可以更为清晰地表示“config map”,而且还表明它指代Kubernetes 概念。
?? 有时,Kubernetes 的资源名称与“服务”或“节点”等常见概念相同。在这些情况下,我们仅在引用资源本身时使用资源名称格式。
使用代码示例
本书中的每个模式都有完整的可执行示例支持,你可以通过本书的主页找到这些示例(地址:https://k8spatterns.io/)。你还可以在每章末尾“参考资料”一节中找到每个模式示例的链接。
“参考资料”小节还包含许多指向与模式相关信息的链接。我们会通过示例代码库更新参考资料的列表,同时还会通过推特发布这些链接的变更。
目录
序 .1
前言 .3
第1 章 引言 13
1.1 云原生之路 . 13
1.2 分布式原语 . 15
1.2.1 容器 17
1.2.2 Pod. 18
1.2.3 服务 20
1.2.4 标签 20
1.2.5 注释 22
1.2.6 命名空间. 22
1.3 讨论 24
1.4 参考资料 25
第一部分 基础模式
第2 章 可预测的需求 .29
2.1 问题 29
2.2 解决方案 30
2.2.1 运行时依赖 30
2.2.2 资源配置文件 33
2.2.3 Pod 优先级 34
2.2.4 项目资源. 37
2.2.5 容量规划. 38
2.3 讨论 39
2.4 参考资料 39
第3 章 声明式部署 .41
3.1 问题 41
3.2 解决方案 42
3.2.1 滚动部署. 43
3.2.2 固定部署. 46
3.2.3 蓝绿发布. 46
3.2.4 金丝雀发布 48
3.3 讨论 48
3.4 参考资料 50
第4 章 健康检测 51
4.1 问题 51
4.2 解决方案 52
4.2.1 进程健康检查 52
4.2.2 存活探针. 52
4.2.3 就绪探针. 54
4.3 讨论 55
4.4 参考资料 56
第5 章 生命周期管理 .59
5.1 问题 59
5.2 解决方案 60
5.2.1 SIGTERM 信号 60
5.2.2 SIGKILL 信号 . 61
5.2.3 postStart 钩子 61
5.2.4 preStop 钩子 . 62
5.2.5 其他生命周期控制 . 63
5.3 讨论 64
5.4 参考资料 65
第6 章 自动放置 67
6.1 问题 67
6.2 解决方案 68
6.2.1 可利用的节点资源 . 68
6.2.2 容器资源需求 69
6.2.3 放置策略. 69
6.2.4 调度的过程 70
6.2.5 节点亲和性 72
6.2.6 Pod 亲和性和反亲和性 73
6.2.7 污点和容忍 75
6.3 讨论 79
6.4 参考资料 81
第二部分 行为模式
第7 章 批处理作业 .85
7.1 问题 85
7.2 解决方案 86
7.3 讨论 89
7.4 参考资料 90
第8 章 定期作业 91
8.1 问题 91
8.2 解决方案 92
8.3 讨论 94
8.4 参考资料 94
第9 章 守护进程服务 .95
9.1 问题 95
9.2 解决方案 96
9.3 讨论 99
9.4 参考资料 99
第10 章 单例服务 . 101
10.1 问题 101
10.2 解决方案 . 102
10.2.1 应用程序外锁定 102
10.2.2 应用程序内锁定 105
10.2.3 Pod 中断预算 107
10.3 讨论 108
10.4 参考资料 . 108
第11 章 有状态服务 . 111
11.1 问题 111
11.1.1 存储 . 112
11.1.2 网络 . 113
11.1.3 标识 . 113
11.1.4 序数 . 114
11.1.5 其他需求 114
11.2 解决方案 . 114
11.2.1 存储 . 116
11.2.2 网络 . 117
11.2.3 标识 . 119
11.2.4 序数 . 119
11.2.5 其他特性 120
11.3 讨论 122
11.4 参考资料 . 123
第12 章 服务发现 . 125
12.1 问题 125
12.2 解决方案 . 126
12.2.1 内部服务发现 . 127
12.2.2 手动服务发现 . 131
12.2.3 集群外部的服务发现 134
12.2.4 应用层服务发现 138
12.3 讨论 141
12.4 参考资料 . 142
第13 章 自我意识 . 145
13.1 问题 145
13.2 解决方案 . 146
13.3 讨论 149
13.4 参考资料 . 149
第三部分 结构化模式
第14 章 初始化容器 153
14.1 问题 153
14.2 解决方案 . 154
14.3 讨论 159
14.4 参考资料 . 159
第15 章 Sidecar 161
15.1 问题 161
15.2 解决方案 . 162
15.3 讨论 164
15.4 参考资料 . 165
第16 章 适配器 . 167
16.1 问题 167
16.2 解决方案 . 167
16.3 讨论 170
16.4 参考资料 . 171
第17 章 外交官 . 173
17.1 问题 173
17.2 解决方案 . 174
17.3 讨论 176
17.4 参考资料 . 176
第四部分 配置模式
第18 章 环境变量配置 179
18.1 问题 179
18.2 解决方案 . 179
18.3 讨论 183
18.4 参考资料 . 184
第19 章 配置资源 . 185
19.1 问题 185
19.2 解决方案 . 185
19.3 讨论 190
19.4 参考资料 . 191
第20 章 不可变配置 193
20.1 问题 193
20.2 解决方案 . 193
20.2.1 Docker 卷 194
20.2.2 Kubernetes 初始化容器 195
20.2.3 OpenShift 模板 198
20.3 讨论 199
20.4 参考资料 . 200
第21 章 配置模板 . 203
21.1 问题 203
21.2 解决方案 . 204
21.3 讨论 209
21.4 参考资料 . 210
第五部分 高级模式
第22 章 控制器 . 213
22.1 问题 213
22.2 解决方案 . 214
22.3 讨论 226
22.4 参考资料 . 226
第23 章 操作器 . 229
23.1 问题 229
23.2 解决方案 . 230
23.2.1 自定义资源定义 230
23.2.2 控制器和操作器的分类 . 233
23.2.3 操作器的开发与部署 236
23.2.4 示例 . 239
23.3 讨论 243
23.4 参考资料 . 244
第24 章 弹性伸缩 . 247
24.1 问题 247
24.2 解决方案 . 248
24.2.1 手动水平伸缩 . 248
24.2.2 Pod 水平自动伸缩 250
24.2.3 Pod 垂直自动伸缩 255
24.2.4 集群自动伸缩 . 259
24.2.5 伸缩级别 262
24.3 讨论 264
24.4 参考资料 . 265
第25 章 镜像构建 . 267
25.1 问题 267
25.2 解决方案 . 269
25.2.1 OpenShift Build . 269
25.2.2 Knative Build 277
25.3 讨论 282
25.4 参考资料 . 283
后记 285
作者介绍 287
封面介绍 287
通过学习这本书,你不仅能了解k8s中的各种组件,而且还能明白为什么以及如何使用这些组件来构建系统,这是一本很了不起的书
2020-08-31 10:54:01
6666666666666666
2020-09-01 22:30:03
书很好,值得阅读
2020-09-01 23:43:59
你大男大女的男女嫩嫩的年大男大女大男大女难道大男大女难道难道大男大女难道你大男大女的电脑难道大男大女难道你大男大女你大男大女大男大女难道你难道你大男大女的
2020-09-02 10:28:12