猜你喜欢
Kubernetes进阶实战

Kubernetes进阶实战

书籍作者:马永亮 ISBN:9787111614456
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:8346
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
全书分为3篇。第壹篇详细讲解Kubernetes系统基础架构及核心概述,并提供一个Kubernetes快速部署和应用的入门指南。第二篇剖析分Kubernetes系统的核心组件,对Pod、Controller、Service、Network Policy、Volume、ConfigMap和Secret等都有着深入讲解。第三篇主要关注实际应用,以DevOps为主线讲解Kubernetes在企业落地应用的解决方案示例。
编辑推荐
适读人群 :云计算工程师;运维工程师;系统开发工程师;程序架构师;计划考取CKA认证的用户;其他对容器编排感兴趣的人员
1)马哥教育CEO马哥(马永亮)撰写,渐进式铺陈,适合入门与进阶
2)涵盖Kubernetes架构、部署、核心/自定义资源、扩缩容、存储卷、网络插件与策略、安全、调度策略、监控、日志等话题
3)渐进式讲解,手把手示范,大量实操案例,随时动手验证
前言
为什么要写这本书
作为置身于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月
目录
前言
第1章Kubernetes系统基础 1
1.1容器技术概述 1
1.1.1容器技术的功用 2
1.1.2容器简史 3
1.1.3Docker的功能限制 4
1.2Kubernetes概述 4
1.2.1Kubernetes简史 4
1.2.2Kubernetes特性 5
1.2.3Kubernetes概念和术语 6
1.3Kubernetes集群组件 10
1.3.1Master组件 10
1.3.2Node组件 12
1.3.3核心附件 13
1.4Kubernetes网络模型基础 13
1.4.1网络模型概述 13
1.4.2集群上的网络通信 15
1.5本章小结 16
第2章Kubernetes快速入门 17
2.1Kubernetes的核心对象 17
2.1.1Pod资源对象 18
2.1.2Controller 19
2.1.3Service 20
2.1.4部署应用程序的主体过程 21
2.2部署Kubernetes集群 22
2.2.1kubeadm部署工具 22
2.2.2集群运行模式 24
2.2.3准备用于实践操作的集群环境 25
2.2.4获取集群环境相关的信息 26
2.3kubectl使用基础与示例 26
2.4命令式容器应用编排 29
2.4.1部署应用(Pod) 30
2.4.2探查Pod及应用详情 33
2.4.3部署Service对象 36
2.4.4扩容和缩容 38
2.4.5修改及删除对象 40
2.5本章小结 41
第3章资源管理基础 42
3.1资源对象及API群组 42
3.1.1Kubernetes的资源对象 43
3.1.2资源及其在API中的组织形式 46
3.1.3访问Kubernetes REST API 48
3.2对象类资源格式 49
3.2.1资源配置清单 50
3.2.2metadata嵌套字段 51
3.2.3spec和status字段 52
3.2.4资源配置清单格式文档 53
3.2.5资源对象管理方式 54
3.3kubectl命令与资源管理 56
3.3.1资源管理操作概述 56
3.3.2kubectl的基本用法 57
3.4管理名称空间资源 59
3.4.1查看名称空间及其资源对象 60
3.4.2管理Namespace资源 61
3.5Pod资源的基础管理操作 61
3.5.1陈述式对象配置管理方式 62
3.5.2声明式对象配置管理方式 64
3.6本章小结 65
第4章管理Pod资源对象 66
4.1容器与Pod资源对象 66
4.2管理Pod对象的容器 68
4.2.1镜像及其获取策略 69
4.2.2暴露端口 70
4.2.3自定义运行的容器化应用 71
4.2.4环境变量 72
4.2.5共享节点的网络名称空间 73
4.2.6设置Pod对象的安全上下文 74
4.3标签与标签选择器 75
4.3.1标签概述 75
4.3.2管理资源标签 77
4.3.3标签选择器 78
4.3.4Pod节点选择器nodeSelector 79
4.4资源注解 80
4.4.1查看资源注解 81
4.4.2管理资源注解 82
4.5Pod对象的生命周期 82
4.5.1Pod的相位 82
4.5.2Pod的创建过程 83
4.5.3Pod生命周期中的重要行为 84
4.5.4容器的重启策略 87
4.5.5Pod的终止过程 87
4.6Pod存活性探测 88
4.6.1设置exec探针 89
4.6.2设置HTTP探针 90
4.6.3设置TCP探针 92
4.6.4存活性探测行为属性 93
4.7Pod就绪性探测 94
4.8资源需求及资源限制 96
4.8.1资源需求 96
4.8.2资源限制 98
4.8.3容器的可见资源 99
4.8.4Pod的服务质量类别 100
4.9本章小结 101
第5章Pod控制器 103
5.1关于Pod控制器 103
5.1.1Pod控制器概述 104
5.1.2控制器与Pod对象 105
5.1.3Pod模板资源 106
5.2ReplicaSet控制器 106
5.2.1ReplicaSet概述 107
5.2.2创建ReplicaSet 108
5.2.3ReplicaSet管控下的Pod对象 109
5.2.4更新ReplicaSet控制器 111
5.2.5删除ReplicaSet控制器资源 114
5.3Deployment控制器 114
5.3.1创建Deployment 115
5.3.2更新策略 116
5.3.3升级Deployment 119
5.3.4金丝雀发布 121
5.3.5回滚Deployment控制器下的应用发布 123
5.3.6扩容和缩容 123
5.4DaemonSet控制器 124
5.4.1创建DaemonSet资源对象 124
5.4.2更新DaemonSet对象 126
5.5Job控制器 127
5.5.1创建Job对象 128
5.5.2并行式Job 129
5.5.3Job扩容 130
5.5.4删除Job 130
5.6CronJob控制器 131
5.6.1创建CronJob对象 131
5.6.2CronJob的控制机制 132
5.7ReplicationController 133
5.8Pod中断预算 133
5.9本章小结 134
第6章Service和Ingress 136
6.1Service资源及其实现模型 136
6.1.1Service资源概述 136
6.1.2虚拟IP和服务代理 138
6.2Service资源的基础应用 140
6.2.1创建Service资源 140
6.2.2向Service对象请求服务 141
6.2.3Service会话粘性 142
6.3服务发现 143
6.3.1服务发现概述 143
6.3.2服务发现方式:环境变量 145
6.3.3ClusterDNS和服务发现 146
6.3.4服务发现方式:DNS 146
6.4服务暴露 147
6.4.1Service类型 147
6.4.2NodePort类型的Service资源 149
6.4.3LoadBalancer类型的Service资源 150
6.4.4ExternalName Service 151
6.5Headless类型的Service资源 152
6.5.1创建Headless Service资源 153
6.5.2Pod资源发现 153
6.6Ingress资源 154
6.6.1Ingress和Ingress Controller 154
6.6.2创建Ingress资源 155
6.6.3Ingress资源类型 157
6.6.4部署Ingress控制器(Nginx) 159
6.7案例:使用Ingress发布tomcat 161
6.7.1准备名称空间 161
6.7.2部署tomcat实例 162
6.7.3创建Service资源 163
6.7.4创建Ingress资源 164
6.