关于我们
![]() ![]() |
Kubernetes设计模式 本书主要内容包括:基本模式篇介绍构建以及运行基于容器的云原生应用程序的核心原则与实践。行为模式篇介绍各类容器和平台交互的管理。结构化模式篇介绍通过组织容器解决特定的用例。配置模式篇介绍如何处理Kubernetes中应用程序的配置。安全模式篇介绍如何提高运行在Kubernetes之上的应用程序的安全性。高级模式篇涵盖更复杂的主题,例如操作器、自动伸缩以及集群内镜像构建等。 [英] 比尔金 伊卜亚姆(Bilgin Ibryam) [德] 罗兰·胡贝塔(Roland Hu?) 前言近年来随着微服务和容器的采用,我们设计、开发和运行软件的方式发生了重大变化。如今的应用程序在可用性、可扩展性以及上市的速度等方面都得到了优化。在这些需求的驱动下,现代架构需要不同的模式和实践。本书旨在帮助开发人员发现和学习使用Kubernetes 创建云原生应用程序时最Z常用的模式。首先,让我们简要介绍一下本书的两个主要成分:Kubernetes 和设计模式。KubernetesKubernetes 是一个容器编排平台。Kubernetes 起源于谷歌的数据中心,谷歌的内部容器编排平台Borg(参考链接:https://oreil.ly/x12HH)也诞生于此。多年来,谷歌一直通过Borg 来运行应用程序。2014 年,谷歌决定利用Borg 的经验建立一个名为Kubernetes(希腊语为舵手或飞行员)的新开源项目。2015 年,该项目成为首个捐赠给新成立的云原生计算基金会(Cloud Native Computing Foundation,简称CNCF)的项目。Kubernetes 自创建之初就赢得了一个完整的用户社区,而且贡献者的数量以惊人的速度增长。如今,Kubernetes 成为GitHub 上最Z流行的项目之一。公平地说,Kubernetes 是最Z常用且功能最Z丰富的容器编排平台。此外,Kubernetes 还成为构建于其上的其他平台的基础。在这些平台即服务的系统中,最Z为突出的是红帽的OpenShift,它为Kubernetes 提供了各种附加功能。这些只是我们选择Kubernetes 作为本书云原生模式参考平台的部分原因。本书假定你具备一定的Kubernetes 基本知识。第d1 章概括了Kubernetes 的核心概念,并为后续各个模式奠定了基础。设计模式设计模式的概念可以追溯到20 世纪70 年代的建筑领域。建筑师及系统理论家Christopher Alexander 与其团队于1977 年发表了开创性的《建筑模式语言》(参考链接:https://oreil.ly/TKzwz)(牛津大学出版),其中描述了建立城镇、大楼和其他建筑项目的建筑模式。后来,这个想法被新兴的软件业采用。该领域最Z著名的书籍《设计模式:可复用面向对象软件的基础》(参考链接:https://oreil.ly/k5toF)由Erich Gamma、Richard Helm、Ralph Johnson 与John Vlissides 四人合著,后以四人组著称。我们谈论的单例模式、工厂方法或委托模式正是来自于这本书。从那以后,许多优秀的模式书籍纷纷问世,针对各个领域从不同程度上进行了讲解,比如Gregor Hohpe 和Bobby Woolf 的《企业集成模式》(参考链接:https://oreil.ly/5aRjR),以及Martin Fowler 的《企业应用架构模式》(参考链接:https://oreil.ly/yOdWA)(Addison-Wesley 出版)。简而言之,模式描述了问题的可复用解决方案注1。这个定义同样适用于本书描述的模式,只不过我们的解决方案中没有那么多变数。模式不同于配方,因为模式不会提供解决问题的步骤说明,只提供了解决某一类问题的大概思路。例如,Alexander 的模式啤酒馆描述了如何建造公共的饮酒场所,陌生人和朋友都可以在这种地方结伴饮酒,不再做一只孤独的锚。所有依据这种模式建造的场所都会有所不同,但它们也有共同之处,例如可容纳4 ~ 8 人的隔间,以及可供百人饮酒、听音乐以及其他活动的场所。然而,模式不仅限于提供解决方案,它还关系到一种语言的形成。本书中的模式形成了一种紧凑、以名词为中心的语言,其中每个模式都带有唯W一的名称。在这种语言建立后,当人们谈论这些模式时,这些名称会自动让人们联想到类似的表征。举个例子,当我们谈论一张桌子时,我们会假设我们谈论的是有四条腿的一块木头,而且可以在上面放东西。软件工程也一样,例如当我们谈论工厂时,在面向对象的编程语言上下文中,我们会立即将工厂与生成其他对象的对象相关联。由于我们会立刻想起模式背后的解决方案,因此就可以节约时间来处理尚未解决的问题。模式语言还有其他特征。各个模式之间相互关联且可以重叠,因此很多模式加在一起就可以解决大部分问题。此外,正如《建筑模式语言》中描述的那样,模式没有统一的详细程度和范围。宽泛的模式可以涵盖更广泛的问题,并为如何解决问题提供粗略的指导。详细的模式有非常具体的解决方案,但无法广泛适用。本书包含所有类型的模式,其中许多模式都引用了其他模式,甚至可能将其他模式作为解决方案的一部分。模式的另一个特征是它们都遵循严格的格式。然而,每个作者都定义了不同的格式,遗憾的是,我们没有统一的标准规定模式。Martin Fowler 在《Writing Software Patterns》(参考链接:https://oreil.ly/6IA6k)中概述了模式语言的格式。本书的结构我们为本书选择了一种简单的模式格式。我们不遵循任何特定的模式描述语言。针对每个模式,我们使用以下结构:名称每个模式都带有一个名称,这也是各章的标题。名称是模式语言的中心。问题本节给出了宽泛的上下文,并详细描述了模式的空间。解决方案本节介绍了模式以Kubernetes 特有的方式解决问题的方法。当其他模式与当前模式相关,或是当前模式的一部分时,本节还会包含交叉引用。讨论本节讨论了在特定上下文中解决方案的优缺点。参考资料最Z后一节包含了与模式相关的其他信息来源。我们按照如下结构组织了本书中的模式:? 第d一篇,基础模式,涵盖了Kubernetes 的核心概念。这些章节介绍了构建基于容器的云原生应用程序的基本原则和实践。? 第二篇,行为模式,描述了基本模式之上的模式,并详细介绍了管理各种类型的容器和平台交互的概念。? 第三篇,结构化模式,涵盖了与在Pod 内组织容器相关的模式Pod 是Kubernetes 平台的原子。? 第四篇,配置模式,深入讲解在Kubernete 中处理应用程序配置的各种方法。这些章节的模式涉及很多细节,包括将应用程序连接到配置的具体方案。? 第五篇,安全模式,介绍了应用程序容器化并部署到Kubernetes 时出现的各种安全问题。? 第六篇,高级模式,容纳了很多高级概念,例如扩展平台本身的方式,以及在集群内直接构建容器镜像的方式。根据上下文不同,同一个模式可能也可以适用于多个类别。每章的模式都是独立的,你可以按照任意顺序单独阅读各个章节。本书的读者对象本书面向希望将Kubernetes 作为平台,设计和开发云原生应用程序的开发人员。如果你对容器和Kubernetes 的概念有基本的了解,并希望提升自身的水平,那么本书非常适合你。但是,理解本书中的用例和模式无需掌握Kubernetes 的底层细节。架构师、技术顾问和开发人员都可以从本书中描述的可复用模式中受益。本书的内容基于真实项目的用例和经验教训,囊括了我们多年从事该领域总结出来的最Z佳实践和模式。我们希望帮助你理解以Kubernetes 为核心的思维方式,并创建更好的云原生应用程序,而不是重新发明轮子。本书的写作风格非常轻松,各章均可以作为系列论文单独阅读。下面,我们简要地介绍一下本书不包含的内容:? 本书不是Kubernetes 的入门教程,也不是参考手册。我们介绍了大量Kubernetes 的功能,并给出了详细的解释,但我们关注的是这些功能背后的概念。第d1 章简要介绍了Kubernetes 的基础知识。如果你需要有关Kubernetes 使用方面的综合性书籍,那么我们强烈推荐MarkoLuk?a 的著作《Kubernetes in Action》。? 本书不是关于如何设置Kubernetes 集群的指南。每个示例的前提都是你已有启动并运行Kubernetes。你可以通过多种方式尝试这些示例。如果你有兴趣学习如何设置Kubernetes 集群,我们推荐Brendan Burns、Joe Beda、Kelsey Hightower 和Lachlan Evenson 的著作《Kubernetes 即学即用》。? 本书不讨论如何为其他团队操作和管理Kubernetes 集群。我们有意跳过了Kubernetes 的管理和操作相关内容,而是从开发者的角度来看待Kubernetes。本书可以帮助运维团队了解开发人员如何使用Kubernetes,但有关Kubernetes 集群的管理和自动化的讨论并不多。如果你有兴趣学习如何操作Kubernetes 集群,我们推荐Brendan Burns、Eddie Villalba、Dave Strebel 和Lachlan Evenson 的著作《Kubernetes Best Practices》。主要内容本书有很多值得探索的地方。有些模式看起来可能像Kubernetes 手册中的摘录,但仔细观察后,你就会发现这些模式是从概念的角度呈现的,这是其他书籍中从未有过的角度。有些模式则通过不同的方法进行了解释,并针对具体的问题提供了详细的指导,如第四篇中的配置模式。有些章节介绍的Kubernetes功能不完全符合模式定义。请不要纠结这究竟是模式还是功能。所有章节都从基本原理出发,考察所涉及的各种因素,重点介绍用例、经验教训和最Z佳实践。这才是有价值的部分。无论模式呈现的细节多少,你都可以通过大量示例针对这些概念的说明,了解Kubernetes 为每种特定模式提供的所有内容。书中所有的示例都经过了测试,你可以通过后续使用代码示例小节中介绍的方式获取完整的源代码。第二版的新内容自几年前第d一版发行以来,Kubernetes 生态系统一直在不断发展,出现了许多Kubernetes 的新版本,以及更多使用Kubernetes 的工具和模式已经成为事实上的标准。幸运的是,本书中描述的大多数模式经受住了时间的考验,依然有效。因此,我们更新了这些模式,添加了截止到Kubernetes 1.26 之前的新特性,并删除了过时和弃用的部分。第29 章和第30 章由于领域的新发展而进行了重大修改,除此之外的章节都没有太大的改动。此外,我们还新增了五种模式,并引入了一个新类别,第五篇安全模式,以弥补第d一版的不足,并为开发人员提供重要的安全相关模式。我们的GitHub 示例(地址:https://oreil.ly/kXGjC)已更新并进行了扩展。最Z后,本书还增加了50% 的新内容。排版约定本书使用了下述排版约定。斜体(Italic)表示新术语、URL、电子邮件地址、文件名和扩展名。等宽字体(Constant Width)表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。如上所述,模式形成了一种简单、彼此关联的语言。为了强调这种模式的关联,每种模式都用斜体字来表示(例如,边车)。当模式根据Kubernetes 的核心概念(如初始化容器或控制器)命名时,我们仅在直接引用模式本身时才使用这种特定的格式。如果有必要,我们还会给出相应的章节。此外,本书还采用下述约定:? 凡是可以在shell 或编辑器中键入的内容都以固定宽度的字体显示。? Kubernetes 资源的名称始终以大写形式呈现(如Pod)。如果资源采用了组合名称(如ConfigMap),我们也会采用这种形式,因为这种形式可以更为清晰地显示config map,而且还表明它指代Kubernetes 概念。? 有时,Kubernetes 的资源名称与服务或节点等常见概念相同。在这些情况下,我们仅在引用资源本身时使用资源名称格式。使用代码示例本书中的每个模式都有完整的可执行示例支持,你可以通过本书的主页找到这些示例(地址:https://k8spatterns.io/)。你还可以在每章末尾参考资料一节中找到每个模式示例的链接。参考资料小节还包含许多指向与模式相关信息的链接。我们会通过示例代码库更新参考资料的列表。本书通过GitHub 提供了所有示例的源代码(地址:https://oreil.ly/bmj-Y)。本书的代码库和主页还有关于如何在Kubernetes 集群中尝试这些示例的指导和说明。在阅读这些示例时,请查看示例提供的资源文件,其中包含许多有用的注释,有助于进一步理解示例代码。许多示例都采用了一个名为random-generator(随机数生成器)的REST服务,调用该服务将返回随机数。该服务是为了很好地配合本书中的示例而专门设计的。你也可以通过GitHub 找到该服务的源代码(地址:https://oreil.ly/WuYSu),而它的容器镜像k8spatterns/random-generator 托管在Docker Hub 上(地址:https://oreil.ly/N36MB)。本书采用了JSON 路径表示法来描述资源字段。例如,.spec.replicas 资源spec 部分的replicas 字段。如果你发现示例代码或文档中存在任何问题,或有任何疑问,请大胆地在GitHub 的问题跟踪器中建票(地址:https://oreil.ly/hCnmn)。我们会持续关注GitHub 上的问题,并愿意解答上面的所有问题。本书所有代码均在Creative Commons Attribution 4.0(CC BY 4.0)许可(参考链接:https://oreil.ly/QuiQc)下分发。这些代码可以免费使用,你也可以自由地分享和修改,并用于商业和非商业项目。但是,如果你复制或分发这些代码,则应保留本书的署名。署名一般包括书名、作者、出版社和国际标准图书编号。例如:Kubernetes Patterns, 2nd Edition, by Bilgin Ibryam and Roland Hu? (OReilly). Copyright 2023 Bilgin Ibryam and Roland Hu?, 978-1-098-13168-5。另外, 你也可以在本书的主页上添加链接以及版权声明并链接到许可证(地址:https://k8spatterns.io/)。我们欢迎你为本书贡献代码!如果你认为我们的示例有待改进,那么衷心希望能够收到您的来信。你只需在GitHub 上建立问题票,或创建一个拉取请求,就可以与我们取得联系。OReilly 在线学习平台(OReilly Online Learning)近40 年来,OReilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过OReilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。OReilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自OReilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司这本书有专属网页,你可以在那儿找到本书的勘误、示例和其他信息。地址是:https://oreil.ly/kubernetes_patterns-2e。如果你对本书有一些评论或技术上的建议,请发送电子邮件到 errata@oreilly.com.cn。要了解OReilly 图书、培训课程、会议和新闻的更多信息,请访问我们的网站,地址是:http://www.oreilly.com。我们的LinkedIn:https://linkedin.com/company/oreilly-media。我们的Twitter:http://twitter.com/oreillymedia。我们的Youtube:http://www.youtube.com/oreillymedia。本书作者的Twitter:https://twitter.com/bibryam,https://twitter.com/ro14nd。本书作者的Mastodon:https://fosstodon.org/@bilgin,https://hachyderm.io/@ro14nd。本书作者的GitHub:https://github.com/bibryam,https://github.com/rhuss。本书作者的博客:https://www.ofbizian.com,https://ro14nd.de。致谢作者Bilgin 非常感激妻子Ayshe。在他撰写本书期间,妻子给予了无尽的支持和耐心。他还想感谢可爱的女儿Selin 和Esin,她们总能让他露出笑容。两个女儿是他的一切。最Z后,Bilgin 还想感谢合著伙伴Roland,感谢他的付出,本书才能顺利完结。作者Roland 向妻子Tanja 表示深深的感谢。感谢妻子在他撰写本书期间给予的支持和宽容,并感谢儿子Jakob 的鼓励。此外,Roland 还特别感谢Bilgin,本书得以付梓,Bilgin 的真知灼见以及出色的写作功不可没。两版书的撰写经历了漫长的岁月,我们要感谢在整个过程中帮助我们始终朝着正确方向前进的评审员们。对于第d一版,特别感谢Paolo Antinori 和Andrea Tarocchi 在创作过程中给予的帮助。感谢Marko Luk?a、Brandon Philips、Michael Httermann、Brian Gracely、Andrew Block、Jiri Kremser、Tobias Schneck 和Rick Wagner,他们为我们提供了专业知识和建议。最Z后,还要感谢孜孜不倦的编辑Virginia Wilson、John Devins、Katherine Tozer、Christina Edwards,以及OReilly 所有人帮助我们出版本书。第二版的创作绝非易事,我们感谢所有在整个过程中支持我们的人。感谢我们的技术评审员Ali Ok、Dávid ?imansk?、Zbyněk Roubalík、Erkan Yanar、Christoph St?bler、Andrew Block 和Adam Kaplan,以及我们的开发编辑Rita Fernando 在整个过程中给予的耐心和鼓励。非常感谢OReilly 生产团队,尤其是Beth Kelly、Kim Sandoval 和Judith McConville,感谢他们在最Z终定稿时对细节的一丝不苟。我们特别感谢Abhishek Koserwal 为第26 章创作付出的不懈努力。他为我们提供了及时的帮助,并推动了本书的出版。 Bilgin Ibryam是Diagrid的产品经理,负责公司的产品战略。Roland Hu?博士是红帽的高级首席软件工程师,OpenShift无服务器的架构师。 目录
你还可能感兴趣
我要评论
|