为什么要写这本书
作为置身于IT技术领域多年的实践者和教育者,我们一直盼望着行业迎来这样一个时刻:异构的IT基础设施环境所造成的开发和部署系统应用纷繁复杂的局面终于迎来了终结者,开发人员无须再考虑复杂多样的运行环境下软件程序的移植问题,运维人员不用再手动解决运行环境中组件间的依赖关系等,从而让各自的核心职责都回归到开发和保证系统稳定运行本身。终于,以Docker为首的容器技术为此带来了基础保障,并在容器编排技术的支撑下尘埃落定,甚至连IT管理者心心念念多年的DevOps文化运动也借此找到了易于落地的实现方案。于是,系统运行割据多年的局面终于将走向天下一统。
尽管距Kubernetes 1.0的发布不过三四年的光景,但其如今的影响力在IT技术领域完全算得上空前绝后,目前,一众大小公司都在使用或正筹划使用这一IT技术发展史上可能最为成功的开源项目。Linux软件基金会的常务董事Jim Zemlin在Google Cloud Next 17大会上曾表示,Kubernetes是“云时代的Linux”。的确,Kubernetes应该是开源世界有史以来迭代最快的项目,而且在几乎所有需要采用容器技术的场景里成为占统治地位的解决方案,其发展速度恐怕也仅有Linux内核项目可堪匹敌。2018年3月,Kubernetes成为CNCF旗下“毕业”的第一个项目,并荣获2018年 OSCON最具影响力奖项。
目前,Kubernetes保持着每年发布四个重要版本的节奏,版本的每次更新都会引入数个新特性。这种快速迭代的机制在为用户不断带来惊喜的同时,也给他们在学习和使用上造成了一些困扰:相关领域的可参考书籍仍不丰富,互联网上可以得到的众多文档并非源于同一个版本,以及厘清脉络拼凑成完整的知识框架所需的时间成本较大。因此,我在课程以及直接或间接参与生产或测试环境的交付之余便萌生了撰写一本Kubernetes入门、进阶与实战的书籍的想法,将自己学习和使用的经验总结、沉淀并分享给更多有此需求的技术同行,帮助大家快速找到入门路径,降低时间成本,并迅速投入测试和生产之用。
的确,在写作过程中,Kubernetes这种快速迭代的机制,以及每每引入的新特性,在小惊喜之余带给笔者更多的却是真真切切的梦魇般的恐惧感:在一年多的写作时间里,许多章节几易其稿,却也依然无法确保能够涵盖即将成为核心功能的特性,于是沮丧感几度如影随形,直到自我安慰着“基础的核心特性基本不会发生大的变动,只要能帮助读者弄清楚Kubernetes系统的基础架构及核心工作逻辑就算工夫没有白费”之后方才释然。于是便有了这本力图尽量多地包罗Kubernetes系统目前主流特性及实践路径的入门和进阶之书、工具之书。
本书特色
本书致力于帮助容器编排技术的初级和中级用户循序渐进地理解与使用Kubernetes系统,因此本书的编写充分考虑到初学者进入新知识领域时的茫然,采用由浅入深、提纲挈领、再由点到面的方式讲解每一个知识细节。对于每个知识点,不仅介绍了其概念和用法,还分析了为什么要有这个概念,实现的方式是什么,背后的逻辑为何,等等,使读者不仅能知其然,还能知其所以然。
本书不仅要带领读者入门,更是一本可以随时动手加以验证的实践手册,而且对于部分重要的内容还会专门一步步地给出具体的实操案例,帮助读者在实践中升华对概念的理解。本书几乎涵盖了应用Kubernetes系统的所有主流知识点,它甚至可以作为计划考取CKA认证的读者的配套参考图书。
读者对象
云计算工程师
运维工程师
系统开发工程师
程序架构师
计划考取CKA认证的人员
其他对容器编排感兴趣的人员
如何阅读本书
阅读使用本书之前,读者需要具备Docker容器技术的基础使用能力。本书逻辑上共分为五大部分,15章。
第一部分(第1~2章),介绍Kubernetes系统的基础概念及其基本应用。
第1章介绍容器编排系统出现的背景,以及Kubernetes系统的功能、特性、核心概念、系统组件及应用模型。
第2章讲解Kubernetes的核心对象,以及直接使用命令管理资源对象的快速入门技巧。
第二部分(第3~6章),介绍核心资源类型及其应用。
第3章介绍资源管理模型、陈述式与声明式资源管理接口,并通过命令对比说明两种操作方式的不同之处。
第4章介绍Pod资源的常用配置、生命周期、存储状态和就绪状态检测,以及计算资源的需求及限制等。
第5章介绍Pod控制器资源类型,重点讲解了控制无状态应用的ReplicaSet、Deployment、DaemonSet控制器,并介绍了Job和CronJob控制器。
第6章介绍Service和Ingress资源类型,涵盖Service类型、功用及其实现,以及Ingress控制器、Ingress资源的种类及其实现,并通过案例详细说明了Ingress资源的具体使用方式。
第三部分(第7~9章),介绍存储卷及StatefulSet控制器。
第7章主要介绍存储卷类型及常见存储卷的使用方式、PV和PVC出现的原因及应用,以及存储类资源的应用和存储卷的动态供给。
第8章介绍使用一等资源类型Conf?igMap和Secret为容器应用提供配置及敏感信息的方式。
第9章主要介绍有状态应用的Pod控制器资源StatefulSet,包括基础应用、动态扩缩容及更新机制等。
第四部分(第10~11章),介绍安全相关的话题,主要涉及认证、授权、准入控制、网络模型与网络策略。
第10章重点讲解认证方式、Service Account和TLS认证、授权插件类型及RBAC,并于章节的最后介绍LimitRanger、ResourceQuota和PodSecurityPolicy三种类型的准入控制器及相关的资源类型。
第11章主要介绍网络插件基础及f?lannel的三种后端实现与应用、借助Canal插件实现网络策略的方式,以及Calico网络插件的基础使用。
第五部分(第12~15章),介绍Kubernetes系统的高级话题。
第12章介绍Pod资源的调度策略及高级调度方式的应用,包括节点亲和、Pod资源亲和以及基于污点和容忍度的调度。
第13章介绍系统资源的扩展方式,包括自定义资源类型、自定义资源对象、自定义API及控制器、Master节点的高可用、基于Kubernetes的PaaS系统等话题。
第14章介绍资源指标、自定义指标、监控系统及HPA控制器的应用。
第15章介绍简化应用管理的工具Helm,并基于Helm介绍如何为Kubernetes系统提供统一的日志收集与管理工具栈EFK。
有一定Kubernetes使用经验的读者可以挑选感兴趣的章节阅读。而对于初学者,建议从基础部分逐章阅读,但构建在Kubernetes系统之上的应用多数都要求读者能熟练使用相关领域的知识和技能,如果对某些内容的理解比较困难,那么可能是由于相关知识欠缺,建议读者通过其他资料补充学习相关知识后再阅读本书。编撰本书的主要意图是为初学者提供一个循序渐进的实操手册,不过,任何读者也都可以将它作为一本案头的工具书随时进行查阅。
排版约定
本书中所有的命令都附带了或长格式或短格式的命令提示符,以便读者区分文中正常使用的“#”和“$”,命令提示格式为“~]#”或“~]$”,较长的命令使用了“”为续行符,且命令及其输出使用了有别于正文的字体。
更多内容和附带代码
本书相关的配置清单等都放置于https://github.com/ikubernetes/的相关仓库中,在实践中需要时可直接克隆至本地实验环境中使用。
勘误和支持
尽管进行授课及技术写作已十数年,但动笔著书尚属首次,考虑到排版印刷后的表述无可更改,整个写作过程战战兢兢、如履薄冰。进行每一个关键话题的表述之前都查阅了大量资料,并且反复斟酌,既期望能够将知识点清晰、准确地加以描述,也试图避免因自己的理解偏差而误导读者。尽管如此,由于笔者水平有限,加之编写时间仓促,书中难免存在不妥之处,恳请读者批评指正。如果读者有更多的宝贵意见,请通过邮箱
[email protected]联系我,期待能够得到你们的真挚反馈,在技术之路上互勉共进。另外,本书的勘误将会发布在笔者的博客(http://www.ilinux.io)或本书专用的GitHub主页(https://github.com/ikubernetes)上,欢迎读者朋友们关注并留言讨论。
参考资料
对于具有不同知识基础和结构的读者来说,仅凭一本书的内容根本不足以获取所需的全部信息,大家还可以通过以下信息获取关于Kubernetes系统的更多资料,本书在写作期间也从这些参考资料中获得了很大的帮助。
Kubernetes Documentation和Kubernetes API Reference,这是提供Kubernetes领域相关知识最全面、最深入和最准确的参考材料。
《Kubernetes in Action》,本书的谋篇布局及写作理念与此书不谋而合,因此笔者在本书中对许多概念的理解和验证也以此书为素材,并且在写作之时有多处概念的描述也借鉴了此书的内容。
Red Hat Openshift Documentation,Red Hat公司的产品文档规范、权威、细致且条理清晰,是不可多得的参考材料。
The New Stack的技术文章及调研报告是了解Kubernetes系统技术细节和行业应用现状及趋势的不可多得的优秀资源。
Bitnami及Heptio站点上的博客文章提供了深入了解和学习Kubernetes系统某个特定技术细节的可靠资料。
另外,本书还大量借鉴了通过搜索引擎所获取到的不少技术文章和参考文档,在这里一并向这些书籍和文章的作者表示深深的谢意!
致谢
感谢Kubernetes社区创造性的劳动成果和辛苦付出,我们因此有了学习和使用如此优秀的开源系统的可能性,这也是本书得以编撰的基石。
感谢我的同事们在我写作期间给予的支持和理解,他们的努力让我拥有了得以放心写作的时间和精力。感谢提供了相关行业信息并促使我下定决心开始编写此书的张常安和张士杰先生,本书的写作过程中也得到了他们支援的宝贵素材。
感谢参加了我的课程(马哥教育)的学员朋友们,大家的学习热情及工作中源源不断反馈而来的信息与需求在不同程度上帮助我一直保持着对技术的追求和热忱,教学相长在此得到了充分的体现。
感谢机械工业出版社华章公司高婧雅女士对本书写作的悉心指导,以及对我本人的包容和理解。
最后要特别感谢我的家人,为写作这本书,我牺牲了很多陪伴他们的时间,也正因为他们在生活中的关怀和鼓励才使我能够踏踏实实地完成本书内容的编写。
马永亮
2018年10月