Kubernetes 是一个开源系统,它自动化了容器化应用的部署、扩展和管理。如果您运行的不仅仅是几个容器,或者想要自动化容器的管理,那么您需要 Kubernetes。这本书的重点是指导你通过 Kubernetes 集群的高级管理。
这本书首先解释了 Kubernetes 架构背后的基本原理,并详细介绍了 Kubernetes 的设计。您将发现如何在 Kubernetes 上运行复杂的有状态微服务,包括水平 pod 自动缩放、滚动更新、资源配额和持久存储后端等高级功能。使用真实的用例,您将探索网络配置的选项,并了解如何设置、操作、保护和排除 Kubernetes 集群的故障。最后,您将了解一些高级主题,如自定义资源、应用编程接口聚合、服务网格和无服务器计算。所有内容都是最新的,并且符合 Kubernetes 1.18。到这本书的最后,你会知道从中级到高级所需要知道的一切。
这本书是为系统管理员和开发人员编写的,他们对 Kubernetes 有中级知识,现在正在等待掌握它的高级功能。你还应该有基本的网络知识。这本高级书籍提供了一条掌握 Kubernetes 的途径。
第 1 章、了解 Kubernetes 架构,在这一章中,我们将共同构建必要的基础,以充分利用 Kubernetes 的潜力。我们将首先了解什么是 Kubernetes,什么不是 Kubernetes,以及容器编排的确切含义。然后,我们将涵盖重要的 Kubernetes 概念,这些概念将形成我们将在整本书中使用的词汇。
第二章、创建 Kubernetes 集群,在这一章中,我们将卷起袖子,使用 minikube、KinD 和 k3d 构建一些 Kubernetes 集群。我们将讨论和评估其他工具,如 Kubeadm、Kube-spray、bootkube 和 stackube。我们还将研究部署环境,如本地、云和裸机。
第三章、高可用性和可靠性,在本章中,我们将深入探讨高可用性集群的话题。这是一个复杂的话题。Kubernetes 项目和社区还没有确定一个真正的方法来实现高可用性涅槃。高可用性 Kubernetes 集群有许多方面,例如确保控制平面在出现故障时能够保持正常运行,保护 etcd 中的集群状态,保护系统数据,以及快速恢复容量和/或性能。不同的系统会有不同的可靠性和可用性要求。
第四章**保卫 Kubernetes,在这一章中,我们将探讨安全这个重要话题。Kubernetes 集群是由多层相互作用的组件组成的复杂系统。运行关键应用时,不同层的隔离和划分非常重要。为了保护系统并确保对资源、功能和数据的正确访问,我们必须首先了解 Kubernetes 作为运行未知工作负载的通用编排平台所面临的独特挑战。然后,我们可以利用各种安全、隔离和访问控制机制来确保集群、其上运行的应用和数据都是安全的。我们将讨论各种最佳实践,以及何时适合使用每种机制。
第五章、在实践中使用 Kubernetes 资源,在这一章中,我们将设计一个虚构的大规模平台,挑战 Kubernetes 的能力和可扩展性。Hue 平台就是要打造一个无所不知、无所不能的数字助理。色调是你的数字延伸。色相会帮你做任何事情,找到任何东西,而且,在很多情况下会代表你做很多事情。它显然需要存储大量信息,与许多外部服务集成,响应通知和事件,并明智地与您交互。
第 6 章、管理存储,在本章中,我们将了解 Kubernetes 如何管理存储。存储与计算有很大不同,但从更高的层面来说,它们都是资源。Kubernetes 作为一个通用平台,采用了在编程模型和一组存储提供者插件后面抽象存储的方法。
第 7 章,用 Kubernetes 运行有状态应用,在这一章中,我们将学习如何在 Kubernetes 上运行有状态应用。Kubernetes 根据复杂的需求和配置(如名称空间、限制和配额),根据需要自动启动和重新启动集群节点上的 pods,这让我们不用做很多工作。但是当 pod 运行存储感知软件时,例如数据库和队列,重新定位 pod 会导致系统崩溃。
第 8 章、部署和更新应用,在本章中,我们将探讨 Kubernetes 提供的自动化 pod 可扩展性,它如何影响滚动更新,以及它如何与配额交互。我们将讨论资源调配这一重要主题,以及如何选择和管理集群的大小。最后,我们将讨论 Kubernetes 团队如何提高 Kubernetes 的性能,以及他们如何使用 Kubemark 工具测试 Kubernetes 的极限。
第 9 章、打包应用,在这一章中,我们将探讨 Kubernetes 包管理器 Helm。每一个成功的、不平凡的平台都必须有一个好的包装系统。Helm 由 Deis 开发(2017 年 4 月 4 日被微软收购),后来直接促成了 Kubernetes 项目。它于 2018 年成为 CNCF 的一个项目。我们将从了解 Helm 的动机、架构和组件开始。
第十章、探索高级联网,在这一章中,我们将考察联网的重要话题。Kubernetes 作为一个编排平台,管理运行在不同机器(物理或虚拟)上的容器/pods,并且需要一个明确的网络模型。
第 11 章、在多个云上运行 Kubernetes 和集群联邦,在这一章,我们将更上一层楼,在多个云、多个集群和集群联邦上运行 Kubernetes。Kubernetes 集群是一个紧密结合的单元,其中所有组件运行在相对接近的位置,并通过快速网络(通常是物理数据中心或云提供商可用性区域)连接在一起。这对于许多用例来说非常好,但是有几个重要的用例,系统需要扩展到单个集群之外。
第 12 章**Kubernetes 上的无服务器计算,在这一章中,我们将探索云端无服务器计算的迷人世界。“无服务器”这个术语正受到很多关注,但它是一个用于描述两种不同范式的误称。真正的无服务器应用在用户的浏览器或移动应用中作为 web 应用运行,并且只与外部服务交互。我们在 Kubernetes 上构建的无服务器系统的类型是不同的。
第 13 章、监控 Kubernetes 集群,在这一章中,我们将讨论如何确保您的系统正常启动和运行,以及如何在系统不正常时做出响应。在第三章、*高可用性和可靠性、*中,我们讨论了相关主题。这里的重点是了解您的系统中发生了什么,以及您可以使用哪些实践和工具。
第 14 章、利用服务网格,在这一章中,我们将学习服务网格如何允许您从应用代码中外部化交叉关注点,如监控和可观察性。服务网格是您在 Kubernetes 上设计、发展和操作分布式系统的一个真正的范式转变。我喜欢把它看作云原生分布式系统的面向方面编程。
第十五章**延伸 Kubernetes,在这一章,我们将深入挖掘 Kubernetes 的内脏。我们将从 Kubernetes API 开始,学习如何通过直接访问 API、Python 客户端和自动化 Kubernetes 来以编程方式使用 Kubernetes。然后,我们将研究用定制资源扩展 Kubernetes API。最后一部分是关于 Kubernetes 支持的各种插件。Kubernetes 操作的许多方面都是模块化的,并且是为扩展而设计的。我们将检查 API 聚合层和几种类型的插件,例如自定义调度器、授权、准入控制、自定义指标和卷。最后,我们将研究扩展 Kubectl 并添加您自己的命令。
第 16 章**Kubernetes 的未来,在这一章中,我们将从多个角度来看 Kubernetes 的未来。我们将从 Kubernetes 成立以来的势头开始,跨越社区、生态系统和思想共享等维度。剧透提醒:Kubernetes 以一个陆地滑梯赢得了容器编排战。随着 Kubernetes 的成长和成熟,战线从击败竞争对手转向与自身的复杂性作斗争。可用性、工具和教育将发挥主要作用,因为容器编排仍然是新的、快速发展的,并且不是一个很好理解的领域。然后我们将看一些非常有趣的模式和趋势,最后,我们将回顾我在第二版中的预测,我将做出一些新的预测。
为了遵循每章中的示例,您需要在机器上安装 Docker 和 Kubernetes 的最新版本,最好是 Kubernetes 1.18。如果您的操作系统是 Windows 10 Professional,则可以启用虚拟机管理程序模式;否则,您将需要安装 VirtualBox 并使用 Linux 来宾操作系统。如果你用苹果电脑,那你就可以走了。
你可以从你在http://www.packtpub.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册http://www.packtpub.com。
- 选择支持选项卡。
- 点击代码下载&勘误表。
- 在搜索框中输入图书名称,并按照屏幕上的说明进行操作。
下载文件后,请确保使用最新版本的解压缩文件夹:
- 视窗系统的 WinRAR / 7-Zip
- zipeg/izp/un ARX for MAC OS
- 适用于 Linux 的 7-Zip / PeaZip
这本书的代码包也托管在 GitHub 上,网址为https://GitHub . com/packt publishing/Mastering-Kubernetes-第三版。我们还有来自丰富的图书和视频目录的其他代码包,可在https://github.com/PacktPublishing/获得。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色映像。可以在这里下载:https://static . packt-cdn . com/downloads/9781839211256 _ color images . pdf。
本书通篇使用了许多文本约定。
CodeInText
:如果选择 HyperKit 而不是 VirtualBox,则需要在启动集群时添加标志--vm-driver=hyperkit
。
代码块设置如下:
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
name: "example-etcd-cluster"
spec:
size: 3
version: "3.2.13"
当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
name: "example-etcd-cluster"
spec:
size: 3
version: "3.2.13"
任何命令行输入或输出都编写如下:
$ k get pods
NAME READY STATUS RESTARTS AGE
echo-855975f9c-r6kj8 1/1 Running 0 2m11s
粗体:表示一个新的术语,一个重要的词,或者你在屏幕上看到的词,比如在菜单或者对话框中,也是这样出现在文本中的。例如:“从管理面板中选择系统信息
警告或重要注意事项是这样出现的。
提示和技巧是这样出现的。
我们随时欢迎读者的反馈。
综合反馈:发邮件feedback@packtpub.com
,在你的留言主题中提到书名。如果您对本书的任何方面有疑问,请发电子邮件至questions@packtpub.com
。
勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问,http://www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。
盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com
联系我们,并提供材料链接。
如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或者投稿一本书,请访问http://authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packtpub.com。