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

Kubernetes实战:构建生产级应用平台
作者 : [美]乔希·罗索(Josh Rosso),[美]里奇·兰德(Rich Lander),[美]亚历山大·布兰德(Alexander Brand),[美]约翰·哈里斯(John Harris) 著
译者 : 赵强 王浩然 孟博 译
出版日期 : 2022-05-31
ISBN : 978-7-111-70552-9
定价 : 149.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 403
开本 : 16
原书名 : Production Kubernetes
原出版社: O'Reilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书探讨了通往Kubernetes生产环境成功道路中所涉及的多种技术、模式和抽象方面的考虑与权衡。主要内容包括基于Kubernetes构建应用平台、部署模型、容器运行时、容器存储、Pod、服务路由、密码管理、准入控制、可观测性、身份认证、构建平台服务、多租户问题、工作负载的自动缩放、在Kubernetes上运行应用程序时应该考虑的各种注意事项、在Kubernetes上从开发人员获取代码到生产的实际过程以及平台抽象。

图书特色

图书前言

Kubernetes是一项非常强大的技术,并且在飞速地推广和普及。它为我们创新地管理软件部署方式奠定了基础。当Kubernetes出现的时候,API驱动的软件和分布式系统尽管没有被广泛采用,但也已经很成熟了。对这些思想进行出色的诠释是Kubernetes成功的基础,另外它也提供了一些其他至关重要的东西。过去,只有拥有优秀工程团队的大型技术公司才有可能达到自主控制软件的理想状态。现在,由于Kubernetes项目的存在,每个组织都可以实现高度可用(highly available)、自我修复(self-healing)、自动缩放(autoscaling)的软件部署。在不远的未来,软件系统将能够接受来源广泛的(broad)、高层次(high-level)的指令,并且根据这些指令执行;通过“条件发现”寻找不断变化的问题并修复问题来实现预期的结果,而无须我们干预。此外,这些系统将比我们的人工操作更快、更可靠地完成任务。然而,这种能力是以一些额外的复杂性为代价的。我们希望分享我们的实践经验,从而帮助其他人解决这种复杂性,这就是我们决定写这本书的原因。
如果你想使用Kubernetes来构建一个生产级的应用平台,你应该阅读这本书。如果你正在寻找一本帮助你开始学习使用Kubernetes的书,或者一本关于Kubernetes如何工作的书,抱歉,本书并不适合你。在其他的书籍、官方文档、无数的博客文章和源代码中,都有大量关于这些主题的信息。另外,我们建议在阅读本书的同时,对我们讨论的解决方案进行研究和测试,所以我们很少深入介绍“一步步”教程式的例子。我们尽量涵盖必要的理论,并将大部分的实现工作留给读者去做。
纵观本书,你会发现选项、工具、模式和实践等形式的指导。重要的是,在阅读这些指导时,首先要了解作者对这种应用平台构建方法的看法。我们的工程师和架构师受雇于许多《财富》500强公司,帮助构建应用平台。早在2015年发布Kubernetes 1.0时,我们就开始使用Kubernetes来作为构建应用平台的基础。我们尽可能地把重点放在模式和理念而不是工具上,因为新的工具出现的速度比我们编写工具的速度还要快。然而,我们不可避免地要用当前最合适的工具来实现这些模式。
我们已经在指导团队完成云原生的旅程上取得了重大的成功,并彻底改变了它们构建和交付软件的方式。尽管如此,我们也有失败的时候,一个常见原因是企业对Kubernetes可以解决的问题有误解。这就是为什么我们在早期就深入研究这个概念。在这段时间里,我们发现有些领域对客户来说是特别有趣的。了解这些可以帮助客户在生产道路上走得更远,甚至帮助他们重新定义如何构建生产环境。这些对话变得如此普遍,以至于我们决定也许是时候写一本书了!
虽然我们一次又一次地与企业一起构建生产环境,但它们之间只有一点是相同的,那就是无论我们多么希望所有企业的构建过程都是一样的,但结果却总是不尽如人意,总会出现各种各样的问题。考虑到这一点,如果你开始阅读这本书的时候期望得到一些例如“构建生产环境的5步计划”或者“每个Kubernetes用户应该知道的10件事” 等结论的话,你将会感到沮丧,因为我们只会在本书中谈论一些决策和我们经历过的陷阱,并在适当的时候举出一些具体的例子和逸事。虽然最佳实践是存在的,但必须始终从实用主义的角度来看待。对于在构建生产环境时遇到的许多问题,我们虽然没有一个放之四海而皆准的方法,但本书的案例可以给予你很多启示。
也就是说,我们非常鼓励你去挑战这本书! 当与客户一起工作时,我们总是鼓励他们挑战和改进我们的方法。因为知识是流动的,所以我们总是根据新的特点、信息和限制条件来更新我们的方法。随着云原生空间的不断发展,你决定采取的道路肯定会与我们推荐的不同。我们在这里告诉你我们曾经走过的路,这样你就可以用我们的观点来衡量你自己的观点。
排版约定
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于展示程序列表,以及在段落中指代程序元素,如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。
等宽粗体(Constant width bold)
用于展示命令或其他应该由用户直接输入的文本。
等宽斜体(Constant width italic)
用于展示应该由用户提供的值或由上下文确定的值替换的文本。
Kubernetes项目中的一些组件或概念名都是首字母大写的,如Pod、Service和StatefulSet。
表示提示或建议。
表示一般性说明。
表示警告或需要谨慎对待的内容。
示例代码
可以从https://github.com/production-kubernetes下载补充材料(示例代码、练习、勘误等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布本书中的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Production Kubernetes,作者Josh Rosso、Rich Lander、Alexander Brand和John Harris,由O’Reilly出版,书号978-1-492-09230-8
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O’Reilly 在线学习平台(O’Reilly Online Learning)
40多年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
本书配套网站https://oreil.ly/production-kubernetes上列出了勘误表、示例以及其他
信息。
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
首先,感谢Katie Gamanji、Michael Goodness、Jim Weber、Jed Salazar、Tony Scully、Monica Rodriguez、Kris Dockery、Ralph Bankston、Steve Sloka、Aaron Miller、Tunde Olu-Isa、Alex Withrow、Scott Lowe、Ryan Chapple和Kenan Dervisevic对稿件的审查和反馈。感谢Paul Lundin鼓励我们写作本书,并在Heptio建立了卓越的现场工程团队。团队中的每个人都对本书中所涉及的想法和经验做出了贡献。还要感谢VMware的Joe Beda、Scott Buchanan、Danielle Burrow和Tim Coventry-Cox在我们启动和致力于这个项目时给予的支持。最后,感谢O’Reilly公司的John Devins、Jeff Bleiel和Christopher Faucher一直以来的支持和反馈。
Josh:我想感谢Jessica Appelbaum在我写作本书的时候给予我无理由的支持,特别是好吃的蓝莓煎饼。我还要感谢我的母亲Angela和父亲Joe,他们是我坚实的后盾。
Rich:我要感谢我的妻子Taylor和孩子们Raina、Jasmine、Max和John在我写作本书时给予的支持和理解。我还要感谢我的母亲Jenny和父亲Norm,他们是伟大的榜样。
Alexander:我要感谢我了不起的妻子Anais,在我花时间写这本书时,她给予了我无理由的支持。我还要感谢我的家人、朋友和同事,正是他们的帮助成就了今天的我。
John:我要感谢我美丽的妻子Christina在我写这本书期间给予的爱和耐心。还要感谢我的亲密朋友和家人多年来的不断支持和鼓励。

上架指导

计算机/云计算

封底文字

虽然Kubernetes已经成为主要的容器编排器,但是许多组织仍难以将这个较新的系统运行在实际的生产环境中。在本书中,来自VMware的软件工程师Josh Rosso、Rich Lander、Alexander Brand和John Harris分享了他们在生产环境中运行Kubernetes的经验并提供了一些关键问题和最佳实践的洞见。
Kubernetes的卓越之处在于从可插拔运行时到存储集成的可配置性和可扩展性。本书探讨了利用Kubernetes构建生产级应用平台所涉及的多种技术、模式和抽象以及各方面的考虑与权衡,对于平台工程师、软件开发人员、信息安全人员、网络工程师和存储工程师来说是不可多得的参考资料。
通过阅读本书,你将:
? 了解如何构建鲁棒的Kubernetes平台。
? 从实践经验中学习,避免在构建Kubernetes平台时掉入陷阱。
? 了解Kubernetes的架构和设计如何支持可扩展的平台开发。
? 分析内部和外部用户的需求,以开发满足需求的平台。
? 通过对工具和抽象做出合理的决策来控制Kubernetes平台的复杂性。
? 检查构建Kubernetes生产环境的路径,并了解常见的工具和各种权衡。
“本书提供了许多好的建议。真希望我在第一次设计集群时就能拥有这本书。”
——Michael Goodness
 MLB首席DevOps工程师
“如果你的任务是重新构建平台或评估基础设施团队采用 Kubernetes 所涉及的工作,强烈建议阅读这本书。”
——Duffie Cooley
云原生计算基金会(CNCF)大使
Josh Rosso是一名工程师,曾任职于CoreOS(Red Hat)、Heptio和 VMware,致力于Kubernetes的应用。
Rich Lander是VMware现场工程师,致力于帮助企业采用Kubernetes和云原生技术。
Alexander Brand是一名专注于Kubernetes和云原生技术的软件工程师。
John Harris是一名资深工程师,曾在VMware(Heptio)和Docker从事云原生工具、平台和模式方面的工作。

图书序言

自从我们公开发布Kubernetes以来,已经有6年多的时间了。事实上,我是第一个向Kubernetes项目提交代码的人。(还记得那是为发布版本创建仓库的工作,因此它并不像听起来那么令人印象深刻。)虽然我们发布Kubernetes时便希望它能取得成功,但这个愿望当时并没有那么强烈。Kubernetes的成功基于一个庞大的社区,该社区是由一些优秀且热心的贡献者和一批现实世界中的实践者组成的。
我很荣幸能与本书的作者一起工作,我们共同创立创业公司(Heptio)的使命便是将 Kubernetes 带到一些典型的企业。Heptio的成功在很大程度上归功于我的同事们。我很感谢他们中的每一个人。他们努力与Kubernetes的用户建立直接联系,去解决用户所面临的现实问题。这本书总结了他们的实践经验,为想在生产环境中使用Kubernetes的团队提供所需的工具。
回想过去,我的整个职业生涯都在构建团队应用和开发人员协作系统,从微软的IE浏览器开始,到Windows Presentation Foundation,再到Google Compute Engine和Kubernetes的云服务。我一次又一次地看到那些构建平台的人受到我所说的“平台构建者诅咒”的困扰。该“诅咒”可以解释为:构建平台的人经常专注于在较长的时间跨度内构建一个能持续几十年的基础服务,但是这种专注却忽略了用户现在所遇到的问题。
打破“平台构建者诅咒”的唯一方法是积极地从我们这个构建者圈子之外去寻求信息,这就是Heptio现场工程团队(以及后来的VMware Kubernetes架构团队(KAT))所做的事情。除了帮助各行各业的客户成功使用Kubernetes之外,该团队还承担“将平台理论应用到现实中”的责任。
围绕Kubernetes和云原生计算基金会(CNCF)所建立的庞大生态系统只会使这个“诅咒”所描述的问题更加严重。这个生态系统既包括属于CNCF的项目,也包括一些其他的大型项目,我把这个系统描述为 “美好的混乱”( beautiful chaos )。它就像是一个热带雨林,有不同程度的重复或完整的东西。此外,探索这个生态系统也像探索热带雨林一样,需要花费大量时间,并且伴随着风险。一些进入Kubernetes世界的新用户通常没有时间或能力成为这个大生态系统的专家。
本书描绘了该生态系统的各个部分,说明了一些工具和插件适合在何时使用,并演示了如何针对读者面临的问题选择合适的工具。这些建议不仅仅是告诉读者要使用某个特定的工具,更是一个大型知识框架,用于帮助读者理解一类工具如何解决问题,分析当前系统是否有问题,并熟悉不同解决方法的优势和劣势,进而提供实用的建议。对于那些希望将Kubernetes带入生产环境的团队来说,这些知识就像金子一样重要。
最后,我想向Josh、Rich、Alexander和John表示衷心的感谢。他们的实践经验让许多用户获得了成功,并且让我们对该项目有了更多的了解。现在,通过这本书,我们将为更多的用户提供重要的建议。

Joe Beda
VMware Tanzu首席工程师
Kubernetes的创造者之一
2021年1月于西雅图

推荐序

距离第一次了解到 Kubernetes已经近6 年时间了。当时CNCF(云原生计算基金会)刚刚成立,谷歌也把它内部使用的容器编排工具Borg进行了重写,形成了Kubernetes开源项目并把它捐献给了CNCF,它成为基金会最重要的基石项目。当时,我正带领「DaoCloud道客」技术团队开发一套基于容器技术的新一代云平台,那时的Kubernetes还处于早期孵化阶段,并不具备大规模生产使用的成熟度,但是它开放的体系架构设计、声明式的API、可扩展的控制器模式都给我留下了非常深刻的印象。后面我也就一直非常关注它的发展,也见证了它从一个容器编排工具发展成为云生态系统核心的成长过程。一年之后,我们正式把 Kubernetes作为核心编排技术,重构了公司面向企业的云原生应用平台产品,并且汇聚了一支对开源极富热情的开源开发者团队,投入Kubernetes相关开源项目的工作,从此开始全面拥抱 Kubernetes技术生态。
「DaoCloud道客」作为最早在国内推广云原生技术的科技公司之一,在2017年就已经帮助银行把支付系统这样的关键应用生产环境迁移到容器平台上了,并构建了数百台物理服务器规模的金融级容器云平台。我个人作为早期的技术布道者和架构师,也非常有幸参与了多个大型企业的容器云平台建设项目,在这个过程中深深体会到一个社区开源项目和企业级云平台之间的鸿沟。相比其他软件工具项目,企业对 Kubernetes的定位往往是支撑其分布式应用的企业级云平台,因此它在企业的落地,不仅仅需要考虑云平台本身的功能、可靠性、健壮性,往往还需要伴随一个全新 IT运维运营体系的建设,覆盖分布式应用交付的全流程。因此,在过去的几年里,通过大量的企业云原生落地实践,我们也在不断探索和完善围绕 Kubernetes的企业级 IT体系蓝图,并把这些蓝图分解成可阶段性落地的最佳实践和路线图,然后通过产品功能和服务流程进行固化。
当然,绝大部分企业不可能组建一个像「DaoCloud道客」这样数百人的云原生技术团队,也无法接受长期的探索试错,而这本书就为企业云原生体系建设弯道超车提供了指引。在这本书中,作者不仅介绍了Kubernetes平台本身的生产级落地的关键技术选型和架构设计,还站在企业应用支撑平台的高度阐述了围绕 Kubernetes的生产级平台体系建设的关键考量点。而且,这些设计并不仅仅停留在技术研究层面的探讨,而是结合Kubernetes社区生态的发展状况,提炼成平台体系建设的普适性实践总结。无论Kubernetes技术爱好者,还是企业架构师或者技术决策者,相信通过阅读本书,你都可以对围绕Kubernetes的生产级运维运营体系建设有一个清晰而全面的认识,清楚体系中各个技术考量点的社区趋势和最佳实践,构建出清晰的企业级Kubernetes建设的规划蓝图。

郭峰
「DaoCloud道客」联合创始人兼首席技术官

图书目录

序言1
前言3
第1章 生产环境构建之路9
1.1 Kubernetes 的定位9
1.2 定义应用平台14
1.3 基于Kubernetes构建应用平台18
1.4 总结25
第2章 部署模型26
2.1 托管服务对比自建服务26
2.2 自动化28
2.3 架构和拓扑结构30
2.4 基础设施36
2.5 机器安装45
2.6 容器化组件48
2.7 附加组件48
2.8 升级50
2.9 触发机制57
2.10 总结57
第3章 容器运行时58
3.1 容器的出现58
3.2 开放容器倡议59
3.3 容器运行时接口63
3.4 选择容器运行时65
3.5 总结71
第4章 容器存储72
4.1 存储注意事项72
4.2 Kubernetes 存储基元76
4.3 容器存储接口79
4.4 实现存储即服务81
4.5 总结89
第5章 Pod网络通信90
5.1 网络因素90
5.2 容器网络接口99
5.3 CNI插件103
5.4 总结111
第6章 服务路由112
6.1 Kubernetes Service113
6.2 Ingress134
6.3 服务网格148
6.4 总结162
第7章 秘密管理163
7.1 深度防御164
7.2 Kubernetes Secret API166
7.3 外部服务商177
7.4 声明式世界中的秘密184
7.5 秘密的最佳实践188
7.6 总结189
第8章 准入控制190
8.1 Kubernetes 的准入链191
8.2 树内准入控制器192
8.3 webhook193
8.4 如何编写变更webhook197
8.5 集中式策略系统203
8.6 总结208
第9章 可观测性209
9.1 日志记录机制209
9.2 指标216
9.3 分布式追踪231
9.4 总结233
第10章 身份认证235
10.1 用户身份236
10.2 应用程序/工作负载的身份247
10.3 总结267
第11章 构建平台服务268
11.1 扩展点269
11.2 operator 模式271
11.3 operator 用例276
11.4 开发operator278
11.5 扩展调度器297
11.6 总结300
第12章 多租户301
12.1 隔离的等级301
12.2 命名空间边界304
12.3 Kubernetes中的多租户305
12.4 总结320
第13章 自动缩放321
13.1 缩放类型322
13.2 应用程序架构323
13.3 工作负载自动缩放323
13.4 集群自动缩放331
13.5 总结336
第14章 应用程序注意事项337
14.1 将应用程序部署到 Kubernetes337
14.2 摄取配置和秘密339
14.3 处理重新安排事件342
14.4 状态探测器346
14.5 Pod 资源请求和限制350
14.6 应用程序日志351
14.7 公开指标352
14.8 为分布式追踪适配服务355
14.9 总结358
第15章 软件供应链359
15.1 构建容器镜像360
15.2 镜像注册表366
15.3 持续交付370
15.4 总结378
第16章 平台抽象379
16.1 平台曝光379
16.2 自助式上线服务380
16.3 抽象频谱382
16.4 总结391

教学资源推荐
参考读物推荐
作者: Marina Fisher;Ray Lai;Sonu Sharma;Laurence Moroney
作者: 快学习教育 编著
作者: 邱铁 周玉 张民垒 等编著