Kubernetes实战:构建生产级应用平台
上QQ阅读APP看书,第一时间看更新

前言

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在我写这本书期间给予的爱和耐心。还要感谢我的亲密朋友和家人多年来的不断支持和鼓励。