前言
Kubernetes是否已经准备好处理有状态工作负载?
可能是这个问题让你翻开了本书。自从云计算首次出现以来,数据基础设施(NoSQL/NewSQL、流式处理、分析)和应用基础设施(Docker、Kubernetes)都在迅速发展,但它们发展的方向有所不同。人们认为,是时候正式将这两个领域融合起来了。这不仅仅是对未来的渴望,目前已经有多个社区正在开展合作。那些试图为数据和应用而管理两套不同技术栈的组织很快就会发现自己处于竞争劣势。
Kubernetes于2014年正式发布,在此之后的几年中,几乎没有人会认为它能够存放数据和有状态工作负载。2018年Kelsey Hightower的推文(见网址列表条目[2])代表了当时的主流观点:
Kubernetes在运行有状态工作负载方面取得了巨大的进展,包括数据库和消息队列等,但人们仍然更倾向于不在Kubernetes上运行它们。
在过去的几年中,形势已经发生逆转。解决问题的工程师接受了Kelsey的挑战并付诸行动。Kubernetes支持有状态工作负载的完善度可以说是毫不令人意外的,这是因为需求实在太旺盛了。如果还有人争论为什么数据库必须在裸金属机器上运行,或为什么不应该在容器内部部署数据基础设施等问题,那么他们可以关注本书。
人们还了解到,“永不”和“尚未”之间存在巨大的差异。计算、存储、网络现在被看作商品,为什么数据管理就是一个例外呢?Kubernetes在降低成本和简化应用开发流程方面的价值导向意味着数据基础设施向Kubernetes的迁移是不可避免的。不仅是Kubernetes在发生变化,人们还将看到数据基础设施的项目也在发生变化。
写作本书的目的
DataStax的“日常工作”要求我们在Kubernetes上有效地部署和操作Apache Cassandra,这让我们产生了将有状态工作负载转移到Kubernetes上的想法。本着开源开发的精神,我们寻找了其他数据库和其他在有状态工作负载方面尝试过类似举措(并取得成功)的从业者,我们找到了一群志同道合的人,并在2020年推出了Kubernetes数据社区(DoKC)(见网址列表条目[3])。DoKC现在是一个独立的组织,已经举办了100多场交流会和一些现场活动。D o K C交流会上的各类主题和演讲者(见网址列表条目[4])是这个社区充满活力的证据,大家协同工作来建立标准和最佳实践。最重要的是,大家正一起努力学习,吸取过去的经验教训,并在打造新事物的过程中互帮互助。
随着参加的交流会越来越多,一些共同的主题便开始浮现。我们一遍又一遍地听到持久卷(PersistentVolume,PV)子系统的好处,StatefulSet的优点和缺点,使数据库操作更易于管理的Operator模式的承诺,以及萌生的新型数据管理的想法。随着时间的推移,我们坚信这个新兴的从业者社区需要一个地方来将分散在多个演示文稿和博客文章中的要点收集起来,并将其提炼成易于理解的形式。本书就是这一过程的产物。
“路漫漫其修远兮,吾将上下而求索”,云原生数据领域还有很多工作要做,包括Operator、机器学习、数据API、数据集的声明式管理等。我们希望本书能为其他更多图书、博客、演示文稿和学习资源打开“大门”。
本书的受众人群
本书的主要读者包括从事云端设计、构建和运行应用的开发人员与架构师。如果你恰好是其中一员并手捧本书,那你很可能早已听闻许多采用Kubernetes的机构,你或许已经加入了这个行列或至少正在考虑加入它。当然,你可能也对在Kubernetes上运行有状态工作负载持保留态度,并企图寻求帮助以走出困境。那你就来对地方了!本书将提供以下信息:
• 了解基本的Kubernetes资源及如何运用它们来构建数据基础设施
• 了解使用Helm和Operator等工具在Kubernetes上自动部署和操作数据基础设施的方法
• 针对应用,拥有评估和选用数据基础设施技术的能力
• 掌握将这些数据基础设施技术集成到整个技术栈中的方法
• 洞察新兴技术,有助于在未来提升基于Kubernetes的应用
我们通过DoKC认识了许多Kubernetes的核心开发人员和数据基础设施开发人员,他们虽然人数不多但也是本书十分重要的受众。我们希望创建一套通用的准则和最佳实践,并将其用作框架来推动Kubernetes的核心发展,以优化为了在Kubernetes上运行而构建的数据基础设施。让我们团结一致,推进Kubernetes云原生数据的实践。
本书开诚布公,直截了当——我们会告诉你哪些技术已经成熟稳固,也会告诉你有很多领域的技术还处于新兴阶段。我们将重点突出那些需要改进的领域。
如何阅读本书
建议通读本书,尤其是对Kubernetes经验不丰富的读者更要如此。本书先介绍了有关Kubernetes的术语和概念,随着话题的深入,它们将贯穿本书的其余部分。以下是本书的组织结构。
第1章 云原生数据基础设施:持久化、流式传输与批量分析
本章阐述了通过在Kubernetes上运行无状态工作负载和有状态工作负载来实现云原生应用现代化的目标。读者应该从该章节开始阅读,因为其中定义了关键的目标和术语,为所有读者提供了一致的环境。具体来说,本章介绍了云原生数据的定义,并给出了云原生数据基础设施准则,本书的其余部分将使用这些准则来衡量有关技术。
第2章 通过Kubernetes管理数据存储
本章探讨了Kubernetes上数据基础设施的基本领域之一:存储。本章从存储在容器化系统中的工作方式开始介绍,首先以Docker为例介绍,然后转向Kubernetes及其PV子系统。本章讨论了各种可用的存储类型,包括文件、块和对象存储,以及如何权衡使用本地和远程存储解决方案。
第3章 打造Kubernetes数据库
本章介绍了Kubernetes的计算资源,如Pod、Deployments和StatefulSet,并引导读者逐步完成使用这些资源部署数据库,如部署MySQL和Apache Cassandra的过程。通过学习本章,读者将了解StatefulSet在管理分布式数据库方面的优势和劣势。
第4章 通过Helm在Kubernetes上自动部署数据库
本章延续上一章的主题,重新回顾了在Kubernetes上部署MySQL和Cassandra的过程,此次是通过Helm包管理器以更自动化的方式进行的。通过学习本章,读者还将了解有助于配置的Kubernetes资源,包括ConfigMap和Secret。本章还介绍了Helm在整个DevOps流程和CI/CD工具集中的作用,以及Helm在管理数据库操作方面的一些缺点。
第5章 通过Operator自动管理Kubernetes数据库
本章通过介绍Operator模式和演示如何使用Operator帮助管理日常的数据库操作来总结数据库的部署步骤。本章以Vitess(MySQL)和Cass Operator(Apache Cassandra)为例,阐述了Operator是如何扩展Kubernetes控制平面并管理数据库的。通过学习本章,读者将了解如何评估Operator的成熟度,学习如何使用Operator SDK等构建自己的Operator。
第6章 在Kubernetes上集成数据基础设施
本章开始将关注点从部署和操作数据库扩展到把数据库和其他数据基础设施整合到整个应用技术栈中。本章研究了一个名为K8ssandra的项目,它集成了Apache Cassandra,以及用于管理监控、安全和数据库备份的工具,并提供了一个API层用于轻松访问的数据。
第7章 Kubernetes原生数据库
本章总结了本书前半部分有关云原生数据管理的知识,并运用这些知识来讨论“什么是Kubernetes原生数据库”。这不仅仅是关于行业流行语的讨论,对选择数据基础设施和开发该数据基础设施的人来说,这一讨论也很重要。
第8章 Kubernetes数据流式传输
本章从流式传输开始,研究其余数据基础设施。云原生应用中数据的移动和处理同数据库持久化一样普遍,但需要不同的部署策略:安全地连接端点并构建默认的自愈性和弹性。本章使用了Apache Pulsar和Apache Flink来演示这些重要实践。
第9章 Kubernetes数据分析
讽刺的是,对大规模分析部署的需求只是现如今Kubernetes方法论的起源故事中的一部分,即编排和资源管理。环顾四周,在Kubernetes上运行分析任务是现在许多机构的首要任务。本章强调了Apache Spark中的差异点,为介绍用例提供了良好的开端,并通过Dask和Ray项目介绍了Kubernetes上数据分析的最新进展。
第10章 机器学习及其他新兴用例
目前有关人工智能和机器学习的话题已处于数据基础设施领域的前沿位置。可以考虑将过去研发出的项目运行到Kubernetes上,这一举措十分有价值。当然,还有其他类型的项目选用了云原生技术,并为数据未来指明了方向。本章旨在调查这些项目,集思广益,为云原生数据提供帮助。
第11章 将数据工作负载迁移到Kubernetes上
如果不付诸实践,那么对本书的学习将变为徒劳。本章强调了前几章的关键内容,并提供了一个关于人员、流程和技术变革的框架,用它来协助将有状态工作负载成功地迁移到Kubernetes上。此外,本章展望了组织机构的数据基础设施在不久的将来可能的形态。
在Kubernetes上管理数据是一个新兴课题,某些领域会发生巨大改变。就像任何技术图书一样,本书在特定时间点(2022年年末)总结了可以参考的相关知识。事实上,针对一个快速发展的主题撰写一本书是极具挑战的,这是因为很难保障信息的时效性。
为了更好地应对这一处境,本书采取这样一种模式:在提供大量示例的同时强调基础知识。随着内容的深入,本书研究的技术将显得越来越不成熟。在此,希望读者紧扣核心要义并将其应用于每个单独的用例,而不是照搬照抄或寻找“万能解”。
特别地,由于第2章至第5章中的内容涉及的主题已经非常成熟,所以在这些章节中会提供更深入的阐述和实战示例。而第8章至第10章介绍的数据基础设施还在不断地演进中,至少在Kubernetes部署方面是如此。对于这种情况,本书将提供更多的第三方学习资源,以确保读者了解最新进展。本书的初衷是鼓励读者与他人分享发现的新资源,以更好地一同进步。
格式说明
本书使用如下格式:
斜体或楷体(Italic)
用于新术语、邮箱、文件名及文件扩展名。
等宽体(Constant width)
用于示例代码及正文中引用的代码元素,如变量名、函数名、数据库、数据类型、环境变量、声明和关键字。
粗等宽体(Constant width bold)
用于展示由用户输入的命令或其他文本。
斜等宽体(Constant width italic)
用于表示应替换为用户提供的值或由上下文确定的值。
表示提示或建议。
表示通用的注释。
表示警告或注意。
所用示例代码
补充材料(示例代码、练习等)可以访问网址列表条目[5]下载。
在使用示例代码的过程中,如有技术问题或疑问,请发送电子邮件至bookquestions@oreilly.com。
本书旨在帮助读者完成相关工作。在通常情况下,读者可以在程序或文档中使用本书提供的示例代码。除非要使用大量示例代码,否则无须联系我们获得许可。例如,在编写一个程序时要使用本书中的几段示例代码不需要获得许可,而销售或分发本书中的示例代码则需要获得许可。引用本书中的内容和示例代码来回答问题不需要获得许可,而将本书中的大量示例代码合并到读者的产品文档中则需要获得许可。
在引用本书中的内容时,我们鼓励注明出处但通常不强制要求,包括标题、作者、出版商和ISBN等。例如,《Kubernetes云原生数据管理》(978-1-098-11139-7),作者为Jeff Carpenter与Patrick McFadin,2023年出版,版权归作者所有。
如果不确定对示例代码的使用是否超出上述许可范围,那么请随时通过permissions@oreilly.com与我们联系。
O’Reilly在线学习
40多年来,O’Reilly Media始终坚持提供技术和业务培训,传递知识和见解来帮助各行各业的公司不断取得成功。
专家和创作者们构成了独特的学习网络,他们通过书本、文章和在线学习平台分享知识和专业技能。O’Reilly的在线学习平台可以让你按需访问实时的培训课程、详尽的学习路径、交互式的编程环境,以及大量来自O’Reilly及200多家其他出版商的文本和视频。欲了解更多信息,请访问网址列表条目[6]。
联系我们
如对本书有建议、意见或疑问,请通过如下方式与出版商联系:
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
请访问网址列表条目[7]获取有关本书的勘误表、示例和任何其他信息。如有相关建议、意见或技术问题,请发送电子邮件至errata@oreilly.com.cn。
欲获取有关图书和课程的新闻与信息,请访问网址列表条目[8]。
LinkedIn链接见网址列表条目[9]。
Twitter链接见网址列表条目[10]。
YouTube链接见网址列表条目[11]。
致谢
首先要感谢Jess Haberman女士,她从我们第一次谈话起就认同了本书的理念,并为之努力;其次要感谢Jill Leonard先生不断的鼓励和提出的真知灼见。
本书的一大特色是囊括了与专家技术人员及从业人员的对话花絮。我们尽可能原汁原味地保留了原始内容。在此,我们衷心地感谢以下人士花费宝贵的时间提出了见解:Rick Vasquez、Kiran Mova、Maciej Szulik、John Sanda、Deepthi Sigireddi、Umair Mufti、Irfan Ur Rehman、Dongxu(Ed)Huang、Jake Luciani、Jesse Anderson、Josh van Leeuwen、Holden Karau、Dean Wampler、Theofilos Papapanagiotou、Willem Pienaar、Xiaofan Luan、Josh Patterson、Adi Polak和Craig McLuckie。
这些人士不仅建言献策,还为我们的研究指明了方向并为我们选择的技术提出了讨论话题。Deepthi、Jesse、Umair和Rick还担任了本书技术审阅的双重职责。此外,我们还对以下几位提出见解的技术审稿人一并表示感谢:Wei Deng、Ali Ok、Aaron Morton和Noah Gift。
DoKC为本书提供了巨大的灵感源泉。在此,特别感谢Bart Farrell、Demitrios Brinkmann和Melissa Logan为我们联系了许多其他社区的成员并给予了我们鼓励和支持。还要特别感谢Evan Powell,是他找到Demetrios,资助最初的交流会并创立了DoKC。这就是所谓的“星星之火,可以燎原”。
此外,也要感谢Sam Ramji对本书的卓越贡献,他不仅撰写了前言,而且不忘时常提醒我们“实践才能出真知”并以此衡量我们的思维方式。Sam总是非常乐意接听电话、介绍相关话题或一边喝啤酒一边分享想法。
这本书诞生于全球新型冠状病毒感染大流行的初期,并在全球和个人层面的不确定性、挑战和更新的各个季节中孕育而生。我们非常感谢许多朋友和家人的支持,他们与我们一起度过了这些时光,并时刻关注这本书的进展。