关于我们
书单推荐
新书推荐
|
|
定 价:98 元
- 作者:Brendan Burns, Joe Beda,Kelsey Hightower, Lachlan Evenson 著 马晶慧 译
- 出版时间:2024/10/1
- ISBN:9787519891787
- 出 版 社:中国电力出版社
- 中图法分类:TP316.85
- 页码:
- 纸张:胶版纸
- 版次:
- 开本:16开
本书的主要内容包括:创建一个简单的集群,了解Kubernetes的基本工作原理。深入了解使用Kubernetes部署应用程序的细节。学习Kubernetes的专属对象,如守护进程集、作业、ConfigMap以及机密等。探索如何通过部署组织应用程序的整个生命周期。学习如何保护应用程序部署的安全。学习部署多集群应用程序,以及通过编程语言访问Kubernetes。
编辑推荐 Kubernetes从根本上改变了开发人员和运维人员在云中构建、部署以及维护应用程序的方式。无论你是分布式系统的新手,还是多年来一直在部署云原生应用程序的老手,这款流行的容器编排器都可以帮助你在速度、敏捷性、可靠性以及效率等方面更上一层楼。 本书讲解了如何将Kubernetes融入分布式应用程序的生命周期。无论你是软件开发人员、工程师还是架构师,无论你的系统是在线服务、机器学习应用程序,还是树莓派计算机集群,都可以通过本书学习如何使用各种工具以及API来实现可扩展分布式系统的自动化。
专家推荐 本书由四位最z权c威的云原生系统专家撰写而成,为学习Kubernetes概念打下坚实的基础,书中提供了大量示例可以帮助读者自行探索Kubernetes。 Liz Rice, Isovalent
前言Kubernetes 要感谢所有在凌晨三点醒来重启进程的系统管理员。感谢所有将代码推送到生产环境,却发现代码无法像在笔记本电脑上那样运行的开发人员。感谢所有由于未能更新主机名而错误地将负载测试指向生产服务的系统架构师。当然,这些经历非常痛苦、让人摸不着头脑,但正是受到了这些奇怪的错误的启发,我们才开发出了Kubernetes。用一句话来总结就是,Kubernetes 的目的是从根本上简化构建、部署和维护分布式系统的任务。它的灵感来自几十年来人们为构建可靠的系统而积累的经验,而Kubernetes 的设计目标就是让那些痛苦的经历变成愉悦,甚至是欣喜。希望你能喜欢这本书!本书面向的读者群无论你是分布式系统的新手,还是多年来一直在部署云原生应用程序的老手,容器和Kubernetes 都可以帮助你在速度、敏捷性、可靠性以及效率等方面更上一层楼。本书介绍了Kubernetes 集群编排器,以及如何利用Kubernetes 工具和API来改善分布式应用程序的开发、交付、安全以及维护。尽管本书不要求读者有Kubernetes 方面的经验,但为了充分理解书中的内容,我们希望读者熟悉基于服务器的应用程序的构建和部署。最好能够熟悉负载均衡以及网络存储等知识,但不是必需的。同样,拥有Linux、Linux 容器以及Docker 方面的经验能够帮助你充分理解本书。本书的创作缘由从Kubernetes 问世到现在,我们一直在跟它打交道。我们亲眼目睹了它从好奇心驱使下的实验,逐步蜕变成关键性的生产级基础设施,为从机器学习到在线服务等各个领域的大规模生产应用程序提供动力。随着这种转变的发生,我们越来越明显地感觉到,如果能够编写一本书涵盖Kubernetes 核心概念的使用方法,同时又能介绍这些概念开发背后的动机,那么就是对云原生应用程序开发做出的重大贡献。我们希望,通过阅读本书,你不仅可以学习如何在Kubernetes 之上构建可靠、可扩展的应用程序,而且还可以洞悉分布式系统所面临的核心挑战,因为正是这些挑战促进了分布式系统的发展。本书更新至第三版的原因自从本书第一版以及第二版发行以来,Kubernetes 生态系统一直在蓬勃发展。Kubernetes 本身已经发布了许多版本,而且许多使用Kubernetes 的工具和模式也成为事实上的标准。在第三版中,我们重点介绍了Kubernetes 生态系统越来越感兴趣的主题,包括安全性、通过编程语言访问Kubernetes 以及跨多集群应用程序部署。此外,我们还更新了所有现有章节,以反映自第一版和第二版以来Kubernetes 的发展与演变。随着Kubernetes 的不断发展,我们希望几年后再次修订本书。当前云原生应用程序简介从第一门编程语言问世到面向对象编程,再到虚拟化以及云基础设施的发展,计算机科学的历史就是一部抽象发展史,抽象不仅可以隐藏复杂性,还可以赋予你构建更复杂的应用程序的能力。尽管如此,可靠的、可扩展的应用程序的开发仍然面临着许多重大挑战。近年来,事实证明,Kubernetes 之类的容器以及容器编排API 已成为一个重要的抽象,它能从根本上简化可靠的、可扩展的分布式系统的开发。容器和编排器能够让开发人员以快速、灵活又可靠的方式构建和部署应用程序,这放在几年前简直就像科幻小说。本书的主要内容本书的组织结构如下。第1 章概述了Kubernetes 的各种优点,但我们不会深入细节。如果你是Kubernetes 新手,最好从第1 章开始阅读,以了解本书后续章节的大致内容。第2 章详细介绍了容器以及容器化应用程序开发。如果你以前从未真正接触过Docker,那么本章将是一个不错的入门。如果你已是Docker 专家,那么也可以温习一下大部分内容。第3 章介绍了如何部署Kubernetes。虽然本书的大部分内容都侧重于Kubernetes的使用方式,但在开始使用之前,你首先需要建立并运行一个集群。尽管运行生产集群的知识不在本书的讨论范围内,但本章介绍了几种简单的创建集群的方法,为的是方便你了解如何使用Kubernetes。第4 章涵盖了与Kubernetes 集群交互时常用的一系列命令。从第5 章开始,我们将深入探讨使用Kubernetes 部署应用程序的细节。我们介绍了Pod(第5 章)、标签和注释(第6 章)、服务(第7 章)、Ingress(第8 章)和副本集(第9 章)。这些构成了在Kubernetes 中部署服务所需的核心基础。接下来,我们还介绍了部署(第10 章),它将整个应用程序的生命周期联系在一起。在这些章节之后,我们将介绍Kubernetes 的一些专属对象:守护进程集(第11 章)、作业(第12 章)、ConfigMap 与机密(第13 章)。虽然这些章节对于许多生产应用程序来说必不可少,但如果只是为了学习Kubernetes,你可以暂时跳过这些内容,等到以后积累到更多经验和专业知识之后,再回过头来阅读。接下来,我们还会介绍基于角色的访问控制(第14 章)、服务网格(第15 章)以及将存储集成到Kubernetes(第16 章)。此外,我们还将讨论扩展Kubernetes(第17 章),通过编程语言访问Kubernetes(第18 章)。然后,我们还会介绍Pod 的安全(第19 章)以及Kubernetes 的策略(第20 章)。最后,我们还会通过一些例子来说明如何开发和部署多集群应用程序(第21 章),并讨论如何在源代码控制中组织应用程序(第22 章)。在线资源你需要安装Docker(地址:https://docker.com),可能还需要熟悉一下相关的Docker 文档。同样,你还需要安装kubectl 命令行工具(地址:https://kubernetes.io)。你也可以加入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 的形式销售或者分发OReilly 书中的示例代码则需要获得许可。回答问题时援引本书内容以及书中示例代码,无需获得许可。在你自己的项目文档中使用本书大量的示例代码时,则需要获得许可。我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准图书编号。例如:Kubernetes: Up and Running, 3rd edition,by Brendan Burns, Joe Beda, Kelsey Hightower, and Lachlan Evenson (OReilly).Copyright 2019 Brendan Burns, Joe Beda, Kelsey Hightower, and Lachlan Evenson,978-1-098-11020-8。如果你觉得自身情况不在合理使用或上述允许的范围内,请通过邮件和我们联系,地址是 permissions@oreilly.com。OReilly 在线学习平台(OReilly Online Learning)近40 年来,OReilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过OReilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。OReilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自OReilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司这本书有专属网页,你可以在那儿找到本书的勘误、示例和其他信息。地址是:https://oreil.ly/kubernetesUR3。如果你对本书有一些评论或技术上的建议,请发送电子邮件到errata@oreilly.com.cn。要了解OReilly 图书、培训课程、会议和新闻的更多信息,请访问我们的网站,地址是:http://www.oreilly.com。我们的Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的Youtube:http://youtube.com/oreillymedia。致谢本书得以付梓,我们要感谢所有帮助我们编写本书的人,其中包括我们的编辑Virginia Wilson 和Sarah Grey,还有OReilly 全体工作人员,以及技术评审员,他们提供了大量的反馈意见,对我们更好地完成本书的创作给予了极大的帮助。最后,我们要感谢所有第一版和第二版的读者,你们报告的勘误已在第三版中得到了修正。谢谢你们!我们非常感谢。
Brendan Burns是Kubernetes的合伙创始人,微软Azure的杰出工程师,主要负责领导开发运维、开源以及微服务等团队。Joe Beda是Kubernetes的合伙创始人,曾任VMware的首席工程师,最z近刚刚退休。Kelsey Hightower是谷歌云计算部门的工程师兼开发倡导者,主要负责领导软件开发与发行工作。Lachlan Evenson是微软Azure容器计算团队的首席产品经理。他通过实践教学帮助很多人学会了使用Kubernetes。
目录 前言 1 第1 章 概述 9 1.1 速度 .10 1.1.1 不可变性的价值 11 1.1.2 声明式配置 12 1.1.3 自我修复系统 13 1.2 扩展服务和团队 14 1.2.1 解耦 15 1.2.2 轻松扩展应用程序和集群 15 1.2.3 通过微服务扩展开发团队 16 1.2.4 统一性与扩展的关注点分离 .17 1.3 基础设施的抽象 19 1.4 效率 .20 1.5 云原生生态系统 21 1.6 小结 .22 第2 章 创建和运行容器 .23 2.1 容器镜像25 2.2 使用Docker 构建应用程序镜像 27 2.2.1 Dockerfiles .27 2.2.2 优化镜像的大小 29 2.2.3 镜像安全 .31 2.3 多阶段镜像构建 31 2.4 将镜像存储到远程仓库 .34 2.5 容器运行时接口 35 2.5.1 通过Docker 运行容器 35 2.5.2 探索kuard 应用程序 .36 2.5.3 限制资源使用 36 2.6 清理 .37 2.7 小结 .38 第3 章 部署Kubernetes 集群 .39 3.1 在公共云上安装Kubernetes 40 3.1.1 Google Kubernetes Engine .40 3.1.2 使用Azure Kubernetes 服务安装Kubernetes 41 3.1.3 在AWS 上安装Kubernetes 42 3.2 使用minikube 在本地安装Kubernetes 42 3.3 在Docker 中运行Kubernetes .43 3.4 Kubernetes 客户端 44 3.4.1 检查集群状态 44 3.4.2 列出Kubernetes 的节点 45 3.5 集群组件47 3.5.1 Kubernetes 代理 48 3.5.2 Kubernetes DNS 48 3.5.3 Kubernetes 用户界面 .49 3.6 小结 .49 第4 章 常用的kubectl 命令 51 4.1 命名空间51 4.2 上下文 51 4.3 查看Kubernetes API 对象 52 4.4 创建、更新和销毁Kubernetes 对象 53 4.5 对象的标签与注释 55 4.6 调试命令55 4.7 集群管理58 4.8 自动补齐命令 .58 4.9 查看集群的其他方法 59 4.10 小结 59 第5 章 Pod .61 5.1 Kubernetes 中的Pod 62 5.2 Pod 的应用思路 .63 5.3 Pod 清单 63 5.3.1 创建Pod 64 5.3.2 创建Pod 清单 65 5.4 运行Pod 66 5.4.1 查询Pod 列表 66 5.4.2 Pod 的详细信息 67 5.4.3 删除Pod 68 5.5 访问Pod 69 5.5.1 通过日志获取更多信息 69 5.5.2 使用exec 在容器中运行命令 70 5.5.3 在容器之间复制文件.70 5.6 健康检查70 5.6.1 存活探针 .71 5.6.2 就绪探针 .72 5.6.3 启动探针 .73 5.6.4 高级探针配置 73 5.6.5 其他类型的健康检查.73 5.7 资源管理73 5.7.1 资源请求:所需的最少资源量 .74 5.7.2 通过约束限制资源使用量 76 5.8 利用卷持久保存数据 77 5.8.1 在Pod 中使用卷 77 5.8.2 Pod 中卷的不同使用方式 78 5.9 综合讨论79 5.10 小结 81 第6 章 标签与注释 83 6.1 标签 .83 6.1.1 应用标签 .85 6.1.2 修改标签 .86 6.1.3 标签选择器 87 6.1.4 API 对象中的标签选择器 89 6.1.5 Kubernetes 架构中的标签 90 6.2 注释 .90 6.3 清理 .92 6.4 小结 .92 第7 章 服务发现 95 7.1 什么是服务发现 95 7.2 服务对象96 7.2.1 DNS 服务 97 7.2.2 就绪检查 .98 7.3 向外公开集群服务 .100 7.4 负载均衡器整合 .102 7.5 高级集成.104 7.5.1 端点 .105 7.5.2 手动发现服务 .106 7.5.3 kube-proxy 与集群IP .107 7.5.4 集群IP 环境变量 .108 7.6 连接到其他环境 .109 7.6.1 连接到集群外部的资源 .109 7.6.2 将外部资源连接到集群内部的服务 110 7.7 清理 110 7.8 小结 110 第8 章 Ingress 的HTTP 负载均衡 . 113 8.1 Ingress 规范与Ingress 控制器 . 114 8.2 安装Contour 115 8.2.1 配置DNS . 116 8.2.2 配置本地hosts 文件 117 8.3 使用Ingress 117 8.3.1 最简单的用法 . 118 8.3.2 使用主机名 . 119 8.3.3 使用路径 121 8.3.4 清理 .122 8.4 Ingress 的高级话题和技巧 .122 8.4.1 运行多个Ingress 控制器 122 8.4.2 多个Ingress 对象 .123 8.4.3 Ingress 与命名空间 .123 8.4.4 改写路径 124 8.4.5 提供TLS 124 8.5 其他Ingress 实现 126 8.6 Ingress 的未来 .126 8.7 小结 127 第9 章 副本集 . 129 9.1 协调循环.130 9.2 Pod 与副本集的关系 130 9.2.1 采用现有的容器 131 9.2.2 隔离容器 131 9.3 副本集的设计思想 .132 9.4 副本集的规范 132 9.4.1 Pod 模板 133 9.4.2 标签 .133 9.5 创建副本集 134 9.6 检查副本集 134 9.6.1 根据Pod 查找副本集 .135 9.6.2 查找副本集管理的Pod 集合 135 9.7 副本集的伸缩 135 9.7.1 副本集的命令式伸缩:kubectl scale 136 9.7.2 副本集的声明式伸缩:kubectl apply .136 9.7.3 自动伸缩副本集 137 9.8 删除副本集 139 9.9 小结 139 第10 章 部署 141 10.1 首次部署 142 10.2 创建部署 144 10.3 管理部署 146 10.4 更新部署 147 10.4.1 扩展部署 148 10.4.2 更新容器镜像 148 10.4.3 推出的历史记录 .150 10.5 部署策略 153 10.5.1 重建策略 153 10.5.2 滚动更新策略 153 10.5.3 放慢部署速度以确保服务健康 157 10.6 删除部署 158 10.7 监控部署 159 10.8 小结 159 第11 章 守护进程集 161 11.1 守护进程集调度器 162 11.2 创建守护进程集 163 11.3 将守护进程集限制到特定节点 .165 11.3.1 向节点添加标签 .165 11.3.2 节点选择器 166 11.4 更新守护进程集 167 11.5 删除守护进程集 169 11.6 小结 169 第12 章 作业 171 12.1 作业对象 171 12.2 作业模式 172 12.2.1 一次性作业172 12.2.2 并行性 .177 12.2.3 工作队列 179 12.3 定时作业 184 12.4 小结 185 第13 章 ConfigMap 与机密 187 13.1 ConfigMap 187 13.1.1 创建ConfigMap .188 13.1.2 使用ConfigMap .189 13.2 机密 192 13.2.1 创建机密 193 13.2.2 消费机密 194 13.2.3 私有容器仓库 195 13.3 命名约束 197 13.4 管理ConfigMap 和机密 197 13.4.1 显示列表 198 13.4.2 创建 198 13.4.3 更新 199 13.5 小结 201 第14 章 基于角色的访问控制 203 14.1 基于角色的访问控制 .204 14.1.1 Kubernetes 中的身份 204 14.1.2 角色和角色绑定 .205 14.1.3 Kubernetes 中的角色和角色绑定 205 14.2 RBAC 的管理技巧 208 14.2.1 使用can-i 测试授权 .208 14.2.2 通过源代码控制管理RBAC 209 14.3 高级主题 209 14.3.1 聚合集群角色 210 14.3.2 分组绑定 210 14.4 小结 212 第15 章 服务网格 213 15.1 双向TLS 加密与身份验证 .214 15.2 流量整形 214 15.3 内省 215 15.4 你真的需要服务网格吗 216 15.5 服务网格的实现 216 15.6 服务网格的发展前景 .217 15.7 小结 218 第16 章 存储解决方案与Kubernetes 的集成 . 219 16.1 导入外部服务 220 16.1.1 没有选择器的服务 221 16.1.2 外部服务的局限性:健康检查 223 16.2 运行可靠的单例 224 16.2.1 运行MySQL 单例服务 224 16.2.2 动态卷供应228 16.3 利用状态集实现Kubernetes 原生存储 .230 16.3.1 状态集的属性 230 16.3.2 利用状态集手动复制MongoDB.231 16.3.3 自动化MongoDB 集群的创建 234 16.3.4 持久卷与状态集 .237 16.3.5 最后一步:存活探针 238 16.4 小结 238 第17 章 扩展Kubernetes 239 17.1 扩展Kubernetes 意味着什么 .239 17.2 可扩展点 240 17.3 自定义资源的模式 250 17.3.1 仅有数据 250 17.3.2 编译器 .250 17.3.3 操作器 .251 17.3.4 如何入门 251 17.4 小结 .251 第18 章 利用常见的编程语言访问Kubernetes . 253 18.1 Kubernetes API:客户端的视角 253 18.1.1 OpenAPI 与生成的客户端库 254 18.1.2 kubectl 命令 .254 18.2 Kubernetes API 编程 255 18.2.1 安装客户端库 255 18.2.2 Kubernetes API 的身份验证 .256 18.2.3 访问Kubernetes API 258 18.2.4 综合所有步骤:使用Python、Java 或.NET 列出和创建Pod 258 18.2.5 对象的创建与部分更新 260 18.2.6 监控Kubernetes API 的变化 263 18.2.7 与Pod 互动 265 18.3 小结 268 第19 章 Kubernetes 应用程序的安全 269 19.1 安全上下文 .269 19.2 Pod 安全 277 19.2.1 Pod 安全是什么 277 19.2.2 应用Pod 安全标准 278 19.3 服务账号管理 281 19.4 基于角色的访问控制 .282 19.5 运行时类 282 19.6 网络策略 284 19.7 服务网格 288 19.8 安全基准工具 288 19.9 镜像安全 290 19.10 小结 .290 第20 章 Kubernetes 集群的管理策略 291 20.1 策略的重要性 291 20.2 准入流程 292 20.3 Gatekeeper 的策略 293 20.3.1 开放策略代理 294 20.3.2 安装Gatekeeper .294 20.3.3 配置策略 296 20.3.4 约束模板 300 20.3.5 创建约束 300 20.3.6 审计 301 20.3.7 变更 303 20.3.8 数据复制 305 20.3.9 指标 307 20.3.10 策略库 307 20.4 小结 307 第21 章 多集群应用程序的部署 309 21.1 打好基础 310 21.2 负载均衡 312 21.3 构建跨多个集群的应用程序 313 21.3.1 复制孤岛:最简单的跨区域模型 315 21.3.2 分片:区域数据 .316 21.3.3 更好的灵活性:微服务路由 317 21.4 小结 318 第22 章 组织应用程序 . 319 22.1 指导原则 319 22.1.1 将文件系统作为唯一可信的真相来源.319 22.1.2 代码审查的作用 .320 22.1.3 特性门控 321 22.2 在源代码管理中管理应用程序 .322 22.2.1 文件系统的布局 .322 22.2.2 管理周期性的版本 323 22.3 从开发、测试与部署的角度组织应用程序的结构 .325 22.3.1 目标 326 22.3.2 发布的进展326 22.4 使用模板为应用程序添加参数 .328 22.4.1 使用Helm 和模板实现参数化 .328 22.4.2 文件系统布局的参数化 329 22.5 部署全球性的应用程序 330 22.5.1 全球部署架构 330 22.5.2 实现全球部署 332 22.5.3 面向全球部署的仪表板和监视 333 22.6 小结 334 附录 构建自己的Kubernetes 集群 335
|