前言
Kubernetes:献辞
Kubernetes 要感谢所有在凌晨三点醒来重启进程的系统管理员。感谢所有将代码推送到生产环境,却发现代码没有像在笔记本电脑上那样运行的开发人员。感谢所有由于未能更新主机名而错误地将负载测试指向生产服务的系统架构师。当然,这些经历非常痛苦、让人摸不着头脑,但正是受到了这些奇怪的错误的启发,Kubernetes 才得以发展。用一句话来总结就是:Kubernetes的目的是从根本上简化构建、部署和维护分布式系统的任务。它的灵感来自几十年来人们为构建可靠的系统而积累的经验。Kubernetes 的设计目标就是让那些痛苦的经历变成愉悦(甚至欣喜)。希望你喜欢这本书!
本书面向的读者对象
无论你是分布式系统的新手,还是多年来一直在部署云原生应用程序的老手,Kubernetes 都可以帮助你在速度、敏捷性、可靠性以及效率等方面更上一层楼。本书介绍了Kubernetes 集群编排器,以及如何利用其工具和API 来改善分布式应用程序的开发、交付和维护。尽管本书不要求读者有Kubernetes 方面的经验,但为了充分理解本书,希望读者熟悉基于服务器的应用程序的构建和部署。最好能够熟悉负载均衡以及网络存储等知识,但不是必需的。同样,拥有Linux、Linux 容器以及Docker 方面的经验能够帮助你充分理解本书。
本书的创作原因
从Kubernetes 问世到现在,我们一直在跟它打交道。我们见证了它从好奇心驱使下的实验,逐步蜕变成关键性的生产级基础设施,为从机器学习到在线服务等各个领域的大规模生产应用程序提供动力。随着这种转变的发生,我们越来越明显地感觉到,如果能够编写一本书涵盖Kubernetes 核心概念的使用方法,同时又能介绍这些概念开发背后的动机,那么就是对云原生应用程序开发做出的重大贡献。我们希望,通过阅读本书,你不仅可以学习如何在Kubernetes 之上构建可靠、可扩展的应用程序,而且还可以洞悉分布式系统所面临的核心挑战,因为正是这些挑战促进了分布式系统的发展。
本书更新至第二版的原因
自从本书第一版发行以来,在过去的几年里,Kubernetes 生态系统蓬勃发展。Kubernetes 本身已经发布了许多版本,而且许多使用Kubernetes 的工具和模式也成为事实上的标准。在更新本书时,我们添加了有关HTTP 负载均衡、基于角色的访问控制(RBAC)、扩展Kubernetes API,以及如何在源代码管理中组织应用程序等内容。此外,我们还更新了所有现有章节,以反映自第一版以来Kubernetes 的发展与演变。随着Kubernetes 的不断发展,我们希望几年后再次修订本书。
当前云原生应用程序简介
从第一门编程语言问世到面向对象编程,再到虚拟化和云基础设施的发展,计算机科学的历史就是一部抽象发展史,抽象不仅可以隐藏复杂性,还可以赋予你构建更复杂的应用程序的能力。尽管如此,可靠的、可扩展的应用程序的开发仍然面临着许多重大挑战。近年来,事实证明,像Kubernetes 这样的容器以及容器编排API 已成为一个重要的抽象,它能从根本上简化可靠的、可扩展的分布式系统的开发。尽管容器和编排器尚未完全成为主流,但它们已经能够让开发人员以快速、灵活和可靠的方式构建和部署应用程序,这放在几年前简直就是科幻小说。
本书的主要内容
本书的组织结构如下。第1 章概述了Kubernetes 的各种优点,但我们不会深入细节。如果你是Kubernetes 新手,最好从这一章开始阅读,从而了解本书后续章节的大致内容。
第2 章详细介绍了容器以及容器化应用程序开发。如果你以前从未真正接触过Docker,那么本章将是一个不错的入门。如果你已是Docker 专家,那么也可以温习一下大部分内容。
第3 章介绍了如何部署Kubernetes。虽然本书的大部分内容都侧重于Kubernetes 的使用方式,但在开始使用之前,你首先需要建立并运行一个集群。尽管运行生产集群的知识不在本书的讨论范围内,但本章介绍了几种简单的创建集群的方法,为的是方便你了解如何使用Kubernetes。第4 章涵盖了与Kubernetes 集群交互时常用的一系列命令。
从第5 章开始,我们将深入探讨使用Kubernetes 部署应用程序的细节。我们介绍了Pod(第5 章)、标签和注释(第6 章)、服务(第7 章)、Ingress(第8 章)和副本集(第9 章)。这些构成了在Kubernetes 中部署服务所需的核心基础。接下来,我们还介绍了部署(第10 章),它将整个应用程序的生命周期联系在一起。
在这些章节之后,我们将介绍Kubernetes 中的一些更专业的对象:守护进程集(第11 章)、作业(第12 章)、ConfigMap 与Secret(第13 章)。虽然这些章节对于许多生产应用程序来说必不可少,但如果只是为了学习Kubernetes,那么可以暂时跳过,等到以后积累到更多经验和专业知识之后,再回过头来阅读。
接下来,我们介绍将存储集成到Kubernetes(第15 章)。我们还将在第16章中讨论扩展Kubernetes。最后,我们还会通过一些例子来说明如何利用Kubernetes 来开发和部署实际应用程序(第17 章),并讨论如何在源代码控制中组织应用程序(第18 章)。
在线资源
你需要安装Docker,可能还需要熟悉一下相关的Docker 文档。
同样,你还需要安装kubectl 命令行工具。你也可以加入Kubernetes Slack 频道(地址:http://slack.kubernetes.io/),这是一个庞大的用户社区,每天都有很多人在其中探讨和回答问题。
最后,随着你获得的相关技术知识不断增多,将来可能还想涉足GitHub 上的开源Kubernetes 代码库(地址:https://github.com/kubernetes/kubernetes)。
排版约定
本书使用了下述排版约定。
斜体(Italic)
表示新术语、URL、示例电子邮件地址、文件名和扩展名。
等宽字体(Constant Width)
表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
加粗等宽字体(constant width bold)
表示应该由用户输入的命令或其他文本。
等宽斜体(constant width italic)
表示应该由用户输入的值或根据上下文确定的值替换的文本。
使用代码示例
你可以通过如下链接下载本书的补充材料(代码示例,练习等):https://github.com/kubernetes-up-and-running/examples.
本书的目的是帮助你完成工作。一般来说,你可以在自己的程序或者文档中使用本书附带的示例代码。你无需联系我们获得使用许可,除非你要复制大量的代码。例如,使用本书中的多个代码片段编写程序就无需获得许可。但以CD-ROM 的形式销售或者分发O’Reilly 书中的示例代码则需要获得许可。回答问题时援引本书内容以及书中示例代码,无需获得许可。在你自己的项目文档中使用本书大量的示例代码时,则需要获得许可。
我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准图书编号。例如:“Kubernetes: Up and Running,2nd edition, by Brendan Burns, Joe Beda, and Kelsey Hightower (O’Reilly).Copyright 2019 Brendan Burns, Joe Beda, and Kelsey Hightower, 978-1-492-04653-0”。
如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系,地址是: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://www.oreilly.com/library/view/kubernetes-up-and/9781492046523/。
如果你对本书有一些评论或技术上的建议, 请发送电子邮件到:bookquestions@oreilly.com。
要了解O’Reilly 图书、培训课程、会议和新闻的更多信息,请访问我们的网站,地址是:http://www.oreilly.com
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的Youtube:http://www.youtube.com/oreillymedia。
致谢
本书得以付梓,我们要感谢所有帮助我们编写本书的人。其中包括我们的编辑Virginia Wilson 和O’Reilly 全体工作人员,以及技术评审员,他们提供了大量的反馈意见,对我们更好地完成本书的创作给予了极大的帮助。最后,我们要感谢所有第一版的读者,你们报告的勘误已在第二版中得到了修正。
谢谢你们!我们非常感谢。