书籍作者:[美] Brendan Burns | ISBN:9787111672128 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:8128 |
创建日期:2021-10-07 | 发布日期:2021-10-07 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书适合哪些人来读?
l 这本书并不是Kubernetes的入门介绍,它的目的不是告诉读者Kubernetes是什么,而是怎么使用Kubernetes,尤其是如何结合持续交付和DevOps实践来使用Kubernetes。
l 想要深入了解如何在Kubernetes上部署特定应用程序和工作负载的人。
l 面向已经熟悉Kubernetes 的基本概念,想进一步学习通用的最佳实践的读者。
本书与市面上其他讲解Kubernetes的书籍有何不同?
本书并非局限于Kubernetes本身的诸多最佳实践,更多的是从实际场景出发,详细介绍如何在Kubernetes上构建应用,包括开发者工作流、镜像分发、持续部署、网络安全、运维监控等应用交付和运维全生命周期的方方面面,甚至还包括很多Kubernetes生态圈中的优秀工具与发展趋势,以帮助我们更好地管理集群。无论你是Kubernetes的初学者还是经验丰富的工程师,相信都能从本书中找到一些解决实际问题的灵感。
如何阅读使用?
即使在第1章,对于一个简单的博客应用,作者也没有仅仅以使其能够启动运行作为目标,而是引出了制成品版本回溯、应用与配置分离、配置即代码等持续交付和DevOps的最佳实践在Kubernetes中的落地方式。
如果读者已经在其他平台有这些实践的实施经验,那么本书是一本极具针对性的工具书,比起从网络各处质量参差不齐的资料中自行筛选和识别要高效得多。也正是因为这样的写作理念,本书的最佳实践才不容易过时。
Brendan Burns,微软Azure的杰出工程师,也是Kubernetes开源项目的联合创始人,现为微软副总裁,从事云应用的开发工作已有十多年。
Eddie Villalba,微软商业软件工程部门的软件工程师,专注于开源云和Kubernetes。他帮助过许多用户将Kubernetes 用于应用程序。
Dave Strebel,微软Azure的全球云原生架构师,专注于开源云和Kubernetes。他深度参与了Kubernetes开源项目,为Kubernetes发布团队提供帮助并领导SIG-Azure工作组。
Lachlan Evenson,微软Azure的容器计算团队的首席开发经理,他通过动手实操教学和会议演讲帮助许多人去了解Kubernetes。
译者简介
陈亮 前ThoughtWorks 高级咨询师、资深Tech Lead、全栈工程师。十年以上软件开发经验,领导过众多国内外高端定制项目交付,覆盖通信、互联网、房地产、汽车、制造等行业。曾为多家大型企业提供Cloud Native、质量内建、DDD等相关咨询与培训服务,对于敏捷开发管理、敏捷工程实践、DevOps流程与技术、DDD、微服务架构有着丰富经验。
王磊 资深技术咨询师。十年以上软件开发经验,覆盖金融、通信、互联网、汽车等行业。带队交付了多个国内外项目,对于微服务架构、DDD、敏捷工程实践、DevOps流程与技术、分布式开发、数据库性能调优、开发有着丰富经验。
张扬 ThoughtWorks 资深 DevOps 咨询师,十余年 IT 行业工作经验,曾任职 IBM, DaoCloud 等企业。近几年主要围绕企业 DevOps 转型和云原生相关技术咨询、方案设计和实施交付等工作。热衷技术交流和分享,中国 DevOps 社区核心组织者,社区文化的忠实拥趸。
推荐序一
Kubernetes,数字化转型浪潮下你必须了解的技术
从这几年应用开发的发展看,从传统的单体应用升级到微服务架构已是大势所趋。抛开巨型互联网企业不谈,大中型企业也已将微服务架构作为企业开发的首选,就连小公司对于微服务开发也跃跃欲试。微服务架构一统企业开发的时代已经到来。
如果你的企业还在进行传统的单体应用开发,那么你必须意识到你已经落后了,落后是要挨打的。
一项新技术的崛起是鼓舞人心的,但是在这个过程中必然会遇到很多挑战。微服务之间的服务通信、水平扩展、服务治理等是应用架构升级之后技术层面面临的重大挑战。同时相比传统单体应用的部署来说,微服务的发布和持续集成是软件工程层面面临的重大挑战。
而今,随着容器技术的崛起,这些问题迎刃而解。在容器技术之前,我们更多的是应用虚拟机技术。在一个服务器上可以开辟多个虚拟机,每一个虚拟机就相当于一个小型的服务器,虚拟机之间互相通信,虚拟机内部安装对应的软件和应用。
容器相当于在主机内运行的一个隔离的进程,它单独消耗该容器内应用所需要的资源。相比于虚拟机,容器不需要额外的进程,更轻量,能够运行更多的应用。
容器技术的崛起离不开Docker。不得不说,Docker已经成为容器技术的事实标准。要维护那么多微服务的容器,而且它们之间又有着错综复杂的依赖关系,是一件非常复杂且耗时的事情。如果节点有上千个,就变成了一个不可能完成的任务。因此,我们需要一个好的容器编排和管理系统。
Kubernetes是当前被业界广泛认可和看好的基于Docker的大规模容器化分布式系统解决方案。它是谷歌Borg(谷歌久负盛名的大规模集群管理系统)的一个开源版本。它不局限于任何一种语言,没有限定任何编程接口。Java、Go、C++、Python等语言编写的服务,都可以被映射为Kubernetes的服务。
Kubernetes具有以下优势:
简化了应用部署。Kubernetes将所有的工作节点暴露为一个单独的部署平台,开发人员不需要知道服务器的细节。
提高了硬件的利用率,让你从基础架构解耦。Kubernetes会根据你描述的需求,从现有的节点中挑选出最合适的节点来运行应用程序。Kubernetes能让应用移动,找到最优的节点。
健康检查和自愈。Kubernetes监控应用,一旦发生节点故障,会自动把应用调度到其他节点。这让运维团队把精力放在修复坏掉的节点上,而不是去重新分配节点。如果你的应用有足够的闲置节点,甚至可以暂时不用理会故障,比如在凌晨。
自动扩容。Kubernetes监控应用,自动调整应用的实例数量。如果Kubernetes运行在云架构上,弹性扩容会变得更加容易。
本书的译者对微服务架构、领域驱动架构、敏捷管理、DevOps持续交付有着非常丰富的实战经验。相信通过阅读他们翻译的这本书,会让你在数字化转型的新基建建设浪潮中拥有一项基础而强大的技能。
刘翔
明源云CTO
推荐序二
2014年,我加入ThoughtWorks的第一个项目是交付一个微服务架构风格的应用。在我加入时,该项目已经进行了一段时间,我的第一个任务是在自己的笔记本上搭建开发环境,验收标准是可以独立在笔记本上实现本地部署。我原以为这需要一个下午的时间,因为在此之前我对如何部署软件一窍不通,在上一份工作里,我把需要部署的软件包用邮件发给运维团队就行了。结果和我结对的同事从代码库中检出了一些奇怪的配置文件和脚本,操作Vagrant创建了三台基于VirtualBox的虚拟机,不一会儿就把所有三个服务部署好了。如果我修改了代码,再次部署所需要做的仅仅是再次执行那些脚本。
随后,我了解到这是源于ThoughtWorks一直秉持的持续交付理念—尽可能减少各个环境间的差异,配合自动化以减少最终部署到生产环境时遇到的“意外”。我喜欢这样的理念,但我不喜欢刚拿到手的笔记本变得反应迟缓,显然三台虚拟机消耗了它太多资源。两个月后,我接触到Docker,这是一种新兴的应用容器技术,我成功地在自己的笔记本上将那三个服务移植到Docker上,效果非常明显,笔记本不再咔咔作响。但当时这种技术还不够成熟,我们还无法把它应用到生产环境。而仅仅在开发环境使用容器技术显然增加了不同环境间的差异,进而增加了部署的风险。我意识到,虽然微服务架构风格已经引起人们的关注,但以容器技术为代表的配套基础设施还没有跟上节奏。
在随后的几年中,我们对容器技术保持关注。在ThoughtWorks于2017年11月发布的技术雷达中,容器技术借由Kubernetes平台达到了“采纳”级别,它已生产就绪。Kubernetes是云原生计算基金会(CNCF)致力于培育和维护的一个厂商中立的开源生态系统,也是该组织孵化的第一个“毕业”项目,可以认为Kubernetes是云原生基础设施的事实标准。我们这两年明显感觉到业界将Kubernetes投入生产的热情,各公有云服务商推出的Kubernetes托管服务更是大幅降低了其采纳门槛,无论是成本上还是技术上。
本书并不是Kubernetes的入门介绍,它的目的不是告诉读者Kubernetes是什么,而是怎么使用Kubernetes,尤其是如何结合持续交付和DevOps实践来使用Kubernetes。即使在第1章,对于一个简单的博客应用,作者也没有仅仅以使其能够启动运行作为目标,而是引出了制成品版本回溯、应用与配置分离、配置即代码等持续交付和DevOps的最佳实践在Kubernetes中的落地方式。如果读者已经在其他平台有这些实践的实施经验,那么本书是一本极具针对性的工具书,比起从网络各处质量参差不齐的资料中自行筛选和识别要高效得多。也正是因为这样的写作理念,本书的最佳实践才不容易过时。作为一个活跃的开源项目,Kubernetes仍在快速演进,也许在不久的将来,本书中的一些实践细节将不再适用,但本书中构建、运维应用的实践仍将有效。
本书的译者有丰富的应用交付、运维经验,也长期作为咨询师帮助客户解决实际问题,熟悉如何在中文环境中布道Kubernetes及其所代表的容器技术。相信他们的这一译作能给中文读者带来更好的阅读体验。
周宇刚
ThoughtWorks资深架构师
译者序
容器技术在IT世界里并不是什么新鲜事物,最早可追溯到20世纪70年代。在数字化时代的大背景下,蒙尘多年的容器开始绽放光彩,恰逢其时地出现在大众面前。容器对应用开发和运维方式的改变,成为企业业务模式快速创新和重塑不可或缺的支点。在它蓬勃发展的几年里,有两个极具意义的里程碑:一个是2013年 Docker 的横空出世,它基于容器镜像带来的标准化,帮助开发者解决了应用打包、分发和部署的问题,真正实现了应用的一次构建、随处部署;另一个则是2016年的三大编排之争,容器编排帮助运维人员大幅降低了应用运行、管理和维护的复杂度,实现了单容器到容器云的跨越,为容器的投产奠定了坚实的基础。而在这场经典之争中脱颖而出,最终成为容器编排事实标准的就是 Kubernetes,也是本书的主角。
作为译者,我们对 Kubernetes 并不陌生。在经历众多国内外交付项目的同时,我们也亲眼见证了 Kubernetes 在企业里一步步被采纳的全过程。从早期的谨小慎微到如今的标准配备,我们也不可避免地经历了一些至暗时刻。例如:缺乏良好的资源管理,导致应用不稳定、调度不可控、资源利用率低等问题;没有在最初就建立起集中监控和日志系统,故障出现时难以定位和排查,导致过长的服务恢复时间;代码化和自动化的程度不足导致环境不一致,进而影响应用部署、发布的速度和稳定。尽管通过不断的探索,我们最终识别并解决了这些问题。但是在翻译的过程中,我们也不禁多次感慨—如果能够早点遇到本书就好了。
在这个知识大爆炸的时代,通过搜索引擎、官方文档以及市面上涌现出来的大量关于Kubernetes的书籍,我们能够轻而易举地获得Kubernetes的各种资料,但这些精华总是零散地分布在各类知识库中,我们很难找到将它们体系化地应用于实践,并成功适配不同需求场景的最佳姿势。基于多年的软件交付、运维经验,我们深刻地体会到,对于绝大多数的新技术来说,学习它们的知识并不那么难,但是掌握将它们成功用于实践的技能却总会面临各种挑战,Kubernetes也不例外。本书的原作者均是专注于开源云和 Kubernetes 的专家,他们将实际工作中的经验教训提炼、总结并分享出来,对于读者来说,这是一笔宝贵的财富。
本书并非局限于Kubernetes本身的诸多最佳实践,更多的是从实际场景出发,详细介绍如何在Kubernetes上构建应用,包括开发者工作流、镜像分发、持续部署、网络安全、运维监控等应用交付和运维全生命周期的方方面面,甚至还包括很多Kubernetes生态圈中的优秀工具与发展趋势,以帮助我们更好地管理集群。无论你是Kubernetes的初学者还是经验丰富的工程师,相信都能从本书中找到一些解决实际问题的灵感。
在本书的翻译及出版过程中,我们非常感谢机械工业出版社华章公司的编辑们,他们在本书的翻译和校对过程中提供了巨大帮助。同时也特别感谢万学凡、周训杰、黄亚铭、杨佳欢等同事和好友的热情付出,他们在翻译流程和内容审校方面给出了很多宝贵的建议。
限于水平和时间,译文中难免存在疏漏,希望读者不吝赐教,发现问题请发送邮件至[email protected],我们将不胜感激。
陈亮 王磊 张扬
2020年6月15日
前言
目标读者
Kubernetes是云原生开发的事实标准。它是一个功能强大的工具,可以使应用程序开发更容易、部署更快、运行更可靠。但是,只有正确使用Kubernetes才能发挥它最大的价值。本书的目标读者是那些需要将应用程序部署到Kubernetes,并且有兴趣学习可用于构建在Kubernetes之上的应用程序的模式和实践的人。
值得指出的是,本书并不是Kubernetes的入门指南。我们假设你对Kubernetes API和工具有基本的了解,并且知道如何创建Kubernetes集群并与之交互。如果你想学习Kubernetes,可以找到很多优秀的资源,例如Kubernetes:Up and Running(O’Reilly)。
这本书面向的是那些想要深入了解如何在Kubernetes上部署特定应用程序和工作负载的人。无论你是刚准备将第一个应用程序部署到Kubernetes,还是已经使用Kubernetes多年,本书都会对你有帮助。
为什么写这本书
我们四人对如何帮助人们将应用程序部署到Kubernetes有着丰富的经验。基于这些经验,我们清楚地知道人们的痛点在哪里,然后帮助他们找到成功之道。在编写本书时,我们试图总结这些经验,以便更多的人可以学习在实践中积累的知识。同时我们希望能够将这些经验记录下来并且传播出去,使人们能够独立地在Kubernetes上成功部署和管理应用程序。
本书概览
很可能你会一口气就把整本书从头到尾浏览完,但这并不是我们真正希望的。相反,我们将本书设计成一个独立章节的集合。每一章都完整阐述了可能需要使用Kubernetes完成的特定任务。你可以根据需要学习本书以了解某个特定的主题或感兴趣的部分,然后将它放在一边,直到有新的主题要了解时再拿起它。
尽管采用了这种章节独立的组织方法,但还是会有一些主题贯穿多个章节。有几章是关于Kubernetes上的应用程序开发的。第2章介绍开发者工作流。第5章探讨持续集成和测试。第15章介绍如何在Kubernetes上构建更高层的平台。第16章论述状态管理和有状态应用。除了应用程序开发之外,还有几章是关于Kubernetes中的服务运维的。第1章介绍如何搭建一个基本服务。第3章介绍监控和度量指标。第4章介绍配置管理。第6章介绍版本控制与发布。第7章介绍应用程序的全球化部署。
还有一些关于集群管理的章节,包括关于资源管理的第8章、关于网络的第9章、关于Pod安全的第10章、关于集群策略与治理的第11章、关于多集群管理的第12章以及关于准入控制与授权的第17章。最后,有几章是完全独立的,其中包括外部服务集成(第13章)和机器学习(第14章)。
尽管在付诸实践之前先阅读所有章节可能会很有用,但我们更希望你能将本书当作参考手册来使用。它旨在作为指南,为你在实际工作中实践这些主题时提供指导。
目录
前言1
第1章 搭建一个基本服务7
1.1 应用程序概览7
1.2 配置文件管理7
1.3 使用Deployment创建多副本服务9
1.4 为HTTP流量配置外部Ingress12
1.5 使用ConfigMap配置应用程序13
1.6 使用Secret管理认证15
1.7 部署简单的有状态数据库18
1.8 使用服务创建TCP负载均衡器21
1.9 使用Ingress将流量路由到静态文件服务器22
1.10 使用Helm参数化应用程序24
1.11 部署服务的最佳实践26
1.12 小结27
第2章 开发者工作流29
2.1 目的29
2.2 搭建开发集群30
2.3 为多个开发者搭建共享集群31
2.4 启动开发者工作流38
2.5 环境初始化38
2.6 启动开发39
2.7 启动测试与调试40
2.8 搭建开发环境的最佳实践40
2.9 小结41
第3章 监控与日志43
3.1 指标与日志43
3.2 监控技术43
3.3 监控模式44
3.4 Kubernetes指标概述45
3.5 应该监控什么指标48
3.6 监控工具49
3.7 使用Prometheus监控Kubernetes51
3.8 日志概述55
3.9 日志工具57
3.10 使用EFK记录日志58
3.11 告警60
3.12 监控、日志及告警的最佳实践62
3.13 小结63
第4章 配置、机密以及RBAC65
4.1 通过ConfigMap和Secret配置应用65
4.2 ConfigMap和Secret API的最佳实践67
4.3 RBAC73
4.4 小结78
第5章 持续集成、测试和部署79
5.1 版本控制80
5.2 持续集成80
5.3 测试81
5.4 镜像构建81
5.5 为镜像标记标签82
5.6 持续部署83
5.7 部署策略84
5.8 生产环境中的测试88
5.9 搭建流水线并进行混沌试验89
5.10 CI/CD的最佳实践94
5.11 小结95
第6章 版本控制、发布和部署97
6.1 版本控制97
6.2 发布98
6.3 部署99
6.4 综合示例100
6.5 小结104
第7章 全球化应用的分发和预演105
7.1 镜像的分发106
7.2 参数化部署107
7.3 全球流量负载均衡107
7.4 可靠的全球化部署108
7.5 如何应对出现的问题113
7.6 全球化部署的最佳实践114
7.7 小结115
第8章 资源管理117
8.1 Kubernetes Scheduler117
8.2 高级调度技术119
8.3 Pod资源管理122
8.4 资源管理的最佳实践136
8.5 小结136
第9章 网络、网络安全与服务网格137
9.1 Kubernetes的网络原则137
9.2 网络插件139
9.3 Kubernetes中的服务142
9.4 网络安全策略149
9.5 服务网格153
9.6 小结155
第10章 Pod和容器安全157
10.1 PodSecurityPolicy API157
10.2 工作负载隔离和RuntimeClass170
10.3 其他Pod和容器安全注意事项172
10.4 小结173
第11章 集群的策略和治理175
11.1 为什么策略和治理很重要175
11.2 这里所说的策略有何不同175
11.3 云原生策略引擎176
11.4 Gatekeeper简介176
11.5 审计181
11.6 策略和治理的最佳实践183
11.7 小结184
第12章 多集群管理185
12.1 为什么需要多集群185
12.2 多集群设计的考量187
12.3 多集群部署管理189
12.4 GitOps集群管理方式191
12.5 多集群管理工具194
12.6 Kubernetes Federation194
12.7 多集群管理的最佳实践197
12.8 小结198
第13章 集成外部服务和 Kubernetes199
13.1 将外部服务导入Kubernetes199
13.2 将Kubernetes服务导出到外部203
13.3 在Kubernetes之间共享服务207
13.4 第三方工具207
13.5 连接集群和外部服务的最佳实践208
13.6 小结208
第14章 在Kubernetes上运行机器学习工作负载209
14.1 为什么Kubernetes非常适合机器学习209
14.2 机器学习工作流210
14.3 Kubernetes集群管理员与机器学习211
14.4 数据科学家关心的事218
14.5 在Kubernetes上运行机器学习工作负载的最佳实践219
14.6 小结220
第15章 在Kubernetes上构建高层应用的模式221
15.1 开发高层抽象的方法221
15.2 扩展Kubernetes222
15.3 构建平台时的设计考量224
15.4 构建应用平台的最佳实践226
15.5 小结227
第16章 管理状态和有状态应用229
16.1 卷和卷挂载230
16.2 Kubernetes存储231
16.3 有状态应用235
16.4 小结240
第17章 准入控制和授权241
17.1 准入控制241
17.2 授权248
17.3 小结251
第18章 总结253
一直在关注这本书,终于出版了,这本书对提高k8s的实战有很大的指导作用,是一本非常棒的案头经典
2021-03-12 14:47:04
这本书的内容很实用,作者是业界大咖,翻译得也很流畅,大大滴推荐
2021-03-12 15:03:18
东西挺好的 送货速度也快
2021-03-04 08:58:38
赶上活动,先买了,有时间再学习。
2021-03-01 12:45:24
Kubernetes实战这本书毫无体系, 内容非常浅,概要都谈不上, 建议另外一本: kubernetes in action
2021-03-04 13:36:16
你多久多久电脑打打闹闹你电脑的嘟嘟囔囔电脑打打闹闹时间电脑觉得就是今生今世嫁鸡随鸡电视剧绝对绝对绝对亟待解决的绝大多数经济数据收集今生今世
2021-03-01 19:01:57
非常不错的书。
2021-02-27 23:08:52