描述
开 本: 128开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787115435040丛书名: 图灵原创
基于Docker 1.10和Kubernetes 1.2全面更新
一本书讲透Docker和Kubernetes
从源码层面深度解析Docker核心原理
Kubernetes源码完全解读 *实践
广泛涵盖Docker高级实践技巧
全面梳理主流容器云技术架构方法
本书适用于有一定Docker基础的开发者、架构师、IT专业学生以及探索基于Docker构建云计算平台的技术人员,也非常适合作为高校教材或培训资料。
第一部分 Docker深入解读
第1章 从容器到容器云 2
1.1 云计算平台 2
1.2 容器,新的革命 3
1.3 进化:从容器到容器云 7
第2章 Docker 基础 8
2.1 Docker的安装 8
2.2 Docker操作参数解读 9
2.3 搭建你的第一个Docker应用栈 16
2.3.1 Docker集群部署 16
2.3.2 第一个Hello World 17
2.3.3 开发、测试和发布一体化 27
第3章 Docker核心原理解读 28
3.1 Docker背后的内核知识 28
3.1.1 namespace资源隔离 28
3.1.2 cgroups资源限制 45
3.2 Docker架构概览 53
3.2.1 Docker daemon 54
3.2.2 Docker client 54
3.2.3 镜像管理 54
3.2.4 execdriver、volumedriver、graphdriver 55
3.2.5 network 55
3.3 client和daemon 56
3.3.1 client模式 56
3.3.2 daemon模式 58
3.3.3 从client到daemon 64
3.4 libcontainer 67
3.4.1 libcontainer的工作方式 69
3.4.2 libcontainer实现原理 70
3.4.3 使用runC与libcontainer进行交互 75
3.5 Docker镜像管理 77
3.5.1 什么是Docker镜像 77
3.5.2 Docker镜像关键概念 80
3.5.3 Docker镜像构建操作 81
3.5.4 Docker镜像的分发方法 84
3.6 Docker存储管理 87
3.6.1 Docker镜像元数据管理 87
3.6.2 Docker存储驱动 89
3.7 Docker数据卷 99
3.7.1 数据卷的使用方式 100
3.7.2 数据卷原理解读 105
3.8 Docker网络管理 108
3.8.1 Docker网络基础 108
3.8.2 Docker daemon网络配置原理 116
3.8.3 libcontainer网络配置原理 119
3.8.4 传统的link原理解析 125
3.8.5 新的link介绍 127
3.9 Docker与容器安全 129
3.9.1 Docker的安全机制 129
3.9.2 Docker安全问题 135
3.9.3 Docker安全的解决方案 139
第4章 Docker 高级实践技巧 151
4.1 容器化思维 151
4.1.1 SSH服务器的替代方案 151
4.1.2 Docker内应用日志管理方案 152
4.1.3 容器化思维及更多 153
4.2 Docker高级网络实践 153
4.2.1 玩转Linux networknamespace 154
4.2.2 pipework原理解析 159
4.2.3 pipework跨主机通信 165
4.2.4 OVS划分VLAN 170
4.2.5 OVS隧道模式 174
4.3 Dockerfile最佳实践 187
4.3.1 Dockerfile的使用 187
4.3.2 Dockerfile实践心得 191
4.4 Docker容器的监控手段 193
4.4.1 Docker容器监控维度 194
4.4.2 容器监控命令 195
4.4.3 常用的容器监控工具 197
4.5 容器化应用构建的基础:高可用配置中心 201
4.5.1 etcd经典应用场景 201
4.5.2 etcd实现原理 206
第二部分 Docker云平台解读
第5章 构建自己的容器云 222
5.1 再谈云平台的层次架构 222
5.2 从小工到专家 225
第6章 专注编排与部署:三剑客与Fleet 230
6.1 编排小神器Fig/Compose 230
6.1.1 再谈容器编排与部署 230
6.1.2 Compose原理:一探究竟 233
6.2 跨平台宿主环境管理工具Machine 237
6.2.1 Machine与虚拟机软件 237
6.2.2 Machine与IaaS平台 238
6.2.3 Machine小结 239
6.3 集群抽象工具Swarm 240
6.3.1 Swarm简介 240
6.3.2 试用Swarm 241
6.3.3 Swarm集群的多种创建方式 243
6.3.4 Swarm对请求的处理 245
6.3.5 Swarm集群的调度策略 245
6.3.6 Swarm集群高可用(HA) 246
6.3.7 Swarm与Machine 247
6.3.8 Swarm小结 248
6.4 编排之秀Fleet 248
6.4.1 旧问题新角度:Docker distro 249
6.4.2 Fleet的原理剖析 252
第7章 专注应用支撑和运行时:Flynn和Deis 258
7.1 Flynn,一个小而美的两层架构 258
7.1.1 第0层:容器云的基础设施 259
7.1.2 第1层:容器云的功能框架 259
7.1.3 Flynn体系架构与实现原理 260
7.2 谈谈Deis与Flynn 270
7.2.1 应用发布上的比较 271
7.2.2 关于Deis的一些思考 273
第8章 一切皆容器:Kubernetes 274
8.1 Kubernetes是个什么样的项目 274
8.2 Kubernetes的设计解读 275
8.2.1 一个典型案例:Guestbook 275
8.2.2 pod设计解读 277
8.2.3 replication controller设计解读 288
8.2.4 service的设计解读 294
8.2.5 新一代副本控制器replica set 306
8.2.6 Deployment 307
8.2.7 DaemonSet 312
8.2.8 ConfigMap 312
8.2.9 Job 317
8.2.10 Horizontal Pod Autoscaler 318
8.3 Kubernetes核心组件解读 320
8.3.1 Kubernetes的整体架构 320
8.3.2 APIServer 321
8.3.3 scheduler 328
8.3.4 controller manager 338
8.3.5 kubelet 346
8.3.6 kube-proxy 352
8.3.7 核心组件协作流程 362
8.4 Kubernetes存储核心原理 366
8.4.1 volume设计解读 366
8.4.2 volume实现原理分析 367
8.4.3 volume使用案例 368
8.4.4 persistent volume 371
8.5 Kubernetes网络核心原理 372
8.5.1 单pod单IP模型 373
8.5.2 pod和网络容器 374
8.5.3 实现Kubernetes的网络模型 377
8.6 Kubernetes多租户管理与资源控制 381
8.6.1 namespace设计解读 381
8.6.2 Kubernetes用户认证机制 385
8.6.3 Kubernetes用户授权机制 387
8.6.4 Kubernetes多维资源管理机制admission control 390
8.7 Kubernetes高级实践 402
8.7.1 应用健康检查 402
8.7.2 高可用性 405
8.7.3 日志 408
8.7.4 集成DNS 410
8.7.5 容器上下文环境 412
8.8 Kubernetes未来动向 414
8.8.1 Ubernetes 414
8.8.2 petSet 415
8.8.3 performance 417
8.8.4 rescheduler 417
8.8.5 OCI标准 419
8.9 不要停止思考 419
第三部分 附录
附录A Docker的安装 424
附录B 阅读Docker源代码的神兵利器 432
附录C 快速熟悉开源项目 441
附录D cgroups的测试与使用 444
附录E cgroups子系统配置参数介绍 448
附录F Kubernetes的安装 453
后记 457
本书的写作目的不仅是在技术层面深入分析Docker背后的技术原理和设计思想,更在于从我们团队自2011年以来在云计算方面的积累出发,理清当前以Docker、Kubernetes为代表的“容器云”技术的发展脉络,以期对IT企业的开发运维人员、容器云服务提供商以及Docker技术爱好者在技术选型、技术路线规划上有所帮助。
2013年是Docker正式开源发布的年份,也是我们团队开始使用Docker的时间。当时Docker作为一个单机版轻量级虚拟化工具,并没有像当前这样活跃的生态圈。我们使用Docker处理Cloud Foundry这类复杂分布式系统的快速部署和迁移,结果我们体验到了惊喜,但也有遗憾。确实,那时候Docker 1.0尚未发布,作为最先吃螃蟹的人之一,我们除了能感受到Docker相比虚拟机在资源利用率和性能上的巨大优势以及在使用方式上的高效便捷之外,还不得不忍受当时的Docker与一个完整的数据中心运维系统之间的差距。比如网络,跨宿主机间的通信在很长一段时间都困扰着我们;比如容器内部不能单独配置内核参数,一旦应用对性能有特殊要求的时候,就无法单独进行优化定制;再比如维护,时常需要手动清理僵尸容器、镜像等。
在随后的一整年里,我们真真切切地感受到了Docker是如何从一个开发运维人员略有耳闻的工具成长为一个技术圈里家喻户晓的名词。基于Docker的公有云、私有云项目也如雨后春笋般涌现;各大知名技术社区都为Docker开辟专栏,甚至出现了专为讨论Docker而生的技术社区。基于Docker的中国本土化也开始萌芽,各类国内镜像托管和加速服务层出不穷。Docker官方也没有闲着,前不久,Docker的各类邮件列表中都出现了招聘中国区执行官的消息。Docker生态系统的建立已经是不争的事实,我们团队也从Docker的使用者,成为了Docker、Kubernetes、libcontainer等开源项目的特性维护者(maintainer)和代码贡献者(contributor)。
当前Docker已绝不仅仅是一项轻量级虚拟化技术,官方的Docker运维三件套、来自第三方的Kubernetes、OpenShift v3、Flynn、Deis等项目已经基于Docker这种容器技术构建出各种各样的容器云服务平台,关于Docker等容器技术的讨论重心也已经从“容器”转变为“容器云”。Docker对于IT行业的价值也从节省资源这一方面扩展到对整个软件开发运维生命周期的改造。
作为软件行业多年的实践者和教育者,我们一直试图探索这样一些问题:云计算除了当前被广为接受的基础设施云平台(IaaS)的形态,是否还有更加贴近开发人员和运维人员的形态?云计算如何以更好的形态服务于互联网 这样一个以软件连接人与人、人与企业、企业与企业的时代?正是Docker这类容器技术的出现,使得这样的探索成为了可能。
本书结构
本书共分两部分,沿着从容器到容器云的发展脉络,从“概念用法解析”到“核心原理分析”,然后到“高级实践技巧”,层层推进,全面介绍了Docker以及围绕Docker构建的各类容器云平台技术,深入分析了Kubernetes背后的技术原理和设计思想。
第一部分讲解了Docker容器的核心原理和实践技巧。其中第1章和第2章能够让读者在短时间内体验这场IT界的风暴,并且初步了解Docker的使用方法,为后续的源码解析做铺垫。第3章是本书第一部分的核心,这一章以Docker 1.10版本源码为基础,深入分析了容器的namespace和cgroups原理,紧接着我们以docker run命令为线索,一路贯穿Docker的容器创建、镜像组织、联合文件系统以及容器网络初始化的源码,深入透彻地向读者展示了从一条指令到最终Linux容器生成的整个过程中,Docker源码的设计原理和执行路线。第4章则介绍了当前时髦的“容器化思维”以及Docker相关的几类实践技巧,包括网络、监控、服务发现等。值得一提的是,在上述代码走读的过程中,本书几乎没有贴出任何一部分Docker源码或者函数,而是力图使用平实的语言和生动的图示来展示代码背后的执行逻辑和设计思想。Docker的源码字字珠玑,我们希望能够使用这样的解读方式使读者真正理解Docker和容器背后的设计方法和技术本质,而不是变成一本单纯的技术手册。
第二部分深入分析基于Docker的各类“容器云”平台的架构细节和背后的设计理念,这些容器云虽然在底层技术上都基于Docker这样的容器技术,但在背后的设计思想上却存在很大的差异。我们将看到一个因颠覆了原有IaaS、PaaS云计算生硬的分类方式而精彩纷呈的容器云世界。其中第5章介绍了一个最简单的容器云解决方案作为引子;第6章和第7章分析和比较了几类典型的容器云开源项目,包括了Docker官方的“三剑客”项目、Fleet以及更类似经典PaaS的Flynn和Deis;第8章是本书第二部分的重点,我们以Kubernetes 1.2版本源码为基础,从核心概念到架构梳理,再到深入到组件级别的Kubernetes源码解析,从多个维度详细讲解了Kubernetes容器云平台的各种技术细节,这在国内尚属首次。我们希望通过容器云平台的源码解读,能够带领读者从纷繁复杂的容器云项目中梳理出一个细致的脉络,让读者在选型和二次开发的过程中减少迷茫和试错成本。而作为Kubernetes项目的贡献者和特性维护者,我们希望有更多的技术人员能够从源码层面对Kubernetes有更深刻的理解和认识,并且同我们一起来推动这个优秀的开源项目在国内的进步和落地。在第二部分的结尾,我们试图回答之前的提问,即容器云应该以何种形态来更好地支撑当今时代。
第2版的改进
自本书第1版出版以来,容器生态圈已经发生了翻天覆地的变化。新的开源项目层出不穷,各个开源项目都在快速迭代演进。Docker已经从本书第1版里的1.6.2发展为当前的1.10。Kubernetes也从本书第1版里的0.16发展到了现在的1.2,并且在1.0.1版本时宣布其已经正式进入可投入生产环境(production ready)的状态。
第3章是本书第一部分的重点。Docker 1.10版相对于本书第1版中的1.6.2版,主要的更新包括如下几个方面。
Docker在架构方面不断将自身解耦,逐步发展成容器运行时(runtime)、镜像构建(builder)、镜像分发(distribution)、网络(networking)、数据卷(volume)等独立的功能组件,提供daemon来管理,并通过Engine暴露一组标准的API来操作这些组件(详见本书3.2节)。
将网络和数据卷提升为“一等公民”,提供了独立子命令进行操作,网络和数据卷具备独立的生命周期,不再依赖容器的生命周期(详见本书3.7节、3.8节)。
网络实现方面,Docker将网络相关的实现解耦为独立的组件libnetwork,抽象出一个通用的容器网络模型(CNM),功能上也终于原生支持了跨主机通信(详见本书3.8节)。
在扩展性方面,在1.7.0版本后就开始支持网络、volume和存储驱动(仍处于实验阶段)的插件化,开发者可以通过实现Docker提供的插件标准来定制自己的插件(详见本书3.6节、3.7节、3.8节)。
在Docker安全方面,Docker支持了user namespace和seccomp来提高容器运行时的安全,在全新的镜像分发组件中引入可信赖的分发和基于内容存储的机制,从而提高镜像的安全性(详见本书3.5节、3.6节、3.9节)。
需要特别指出的一点是,随着容器如火如荼的发展,为了推动容器生态的健康发展,促进生态系统内各组织间的协同合作,容器的标准化也显得越来越重要。Linux基金会于2015年6月成立OCI(Open Container Initiative)组织,并针对容器格式和运行时制定了一个开放的工业化标准,即OCI标准。Docker公司率先贡献出满足OCI标准的容器运行时runC,HyperHQ公司也开源了自己的OCI容器运行时runV,相信业界会有越来越多的公司加入这个标准化浪潮中。Docker公司虽然没有在Docker 1.10版本中直接使用runC作为容器的运行时,但是已经将“修改Docker engine来直接调用runC的二进制文件为Docker提供容器引擎”写入到了1.10版本的roadmap中。本书在3.4.3节中对runC的构建和使用进行了介绍。
第8章是本书第二部分的重点。由于Kubernetes的代码始终处于积极更新之中,自本书第1版截稿以来,Kubernetes又相继发布了0.17、0.18、0.19、0.20、0.21、1.0、1.1与1.2等几个版本。主要的更新包括如下几个方面。
大大丰富了支撑的应用运行场景。从全面重构的long-running service的replicaSet,到呼声渐高的支持batch job的Job、可类比为守护进程的DaemonSet、负责进行应用更新的Deployment、具备自动扩展能力的HPA(Horizontal Pod Autoscaler),乃至于有状态服务的petSet,都已经或者即将涵盖在Kubernetes的支撑场景中(详见本书8.2节)。
加强各个组件的功能扩展或者性能调优。apiserver和controller manager为应对全新的resource和API有显著的扩展;scheduler也在丰富调度策略和多调度器协同调度上有积极的动作;kubelet在性能上也有长足的进步,使得目前单个节点上支持的pod从原来的30个增长到了110个,集群工作节点的规模也从100个跃升为1000个;多为人诟病的kube-proxy如今也鸟枪换炮,默认升级为iptables模式,在吞吐量上也更为乐观;在可以预期的未来,rescheduler将成为Kubernetes家庭中的新成员,使得重调度成为可能(详见本书8.3节)。
兼容更多的容器后端模型、网络及存储方案。从Docker到rkt,Kubernetes展示了对容器后端开放姿态,同时它还准备以C/S模式实现对其他容器的支撑。在网络方面,Kubernetes引入了网络插件,其中最为瞩目的当属CNI;存储上的解决方案更是层出不穷,flocker、Cinder、CephFS不一而足,还增加了许多特殊用途的volume,如secret、configmap等(详见本书8.4节、8.5节)。
增加了OpenID、Keystone等认证机制、Webhook等授权机制,以及更为丰富的多维资源管理机制admission
controller(详见本书8.6节)。
另外,作为Kubernetes社区的积极参与者,我们还专门增加了8.8节,讨论当前社区正在酝酿中的一些新特性,如Ubernetes、petSet、rescheduler。我们还讨论了Kubernetes性能优化,以及Kubernetes与OCI的关系等话题。
除了全面更新这两个重点章节之外,我们还在第1章中更新了Docker近期的“大事记”并重新整理了容器生态圈,加入了许多重要的容器云技术开源项目,以及OCI、CNCF等国际标准化组织;在第2章中,我们将Docker命令行工具的基础用法更新到了Docker 1.10版;在第4章中完善了对时下火热的“容器化思维”和“微服务”的讨论;在第6章中更新了对Docker“三剑客”——Compose、Swarm和Machine的讨论;在附录中以Docker 1.10版为标准更新了附录A的Docker安装指南,以Kubernetes 1.2为标准,更新了附录F中Kubernetes的安装指南。
致谢
对于能够编写国内第一本在源代码层面深度解析Docker和Kubernetes,并揭秘基于Docker容器的云计算生态圈底层技术的图书,我们感到非常荣幸。浙江大学SEL实验室云计算团队在此向所有支持帮助我们的朋友表达最诚挚的谢意,没有大家的支持,我们很可能无法顺利地完成这项工作。
感谢浙江大学软件学院杨小虎院长对云计算团队一直以来的关怀和支持,杨院长的远见卓识和诲人不倦令人钦佩。
感谢以极大热情参与到本书写作中的浙江大学计算机学院、软件学院的各位博士、硕士研究生:张磊、何思玫、高相林、张浩、孙健波、王哲、冯明振、乔刚、杜军、仇臣、周宇哲、叶瑞浩、赖春彬、孙宏亮、陈星宇。他们的热情是我们团队活力的源泉,他们使那些分散在各个领域的技术得以整合。在本书编写过程中,他们不计个人得失地精诚合作,这是本书得以成书的基石。
特别要感谢不辞辛劳为本书出谋划策、日以继夜不断审阅修改的图灵公司的编辑们。在整个写作过程中,我们团队得到了出版方的大力支持。他们认真负责的态度是本书顺利出版的保证。
感谢InfoQ主编郭蕾一直以来对浙江大学SEL实验室技术分享工作所做出的支持和推广,他和InfoQ同事们的鼓励是推动本书发起的一大动力。
感谢《第一本Docker书》的译者刘斌为本书进行了细致的审读,并为我们提出了宝贵的修订建议。
感谢浙江大学SEL实验室云计算团队的其他所有人,他们认真负责的工作态度和令人满意的工作成果是本书不可或缺的支持力量。
感谢大家的共同努力,让我们的成果得以面世,在Docker布道之路上贡献出了自己的光和热,传播惠及当下的云计算前沿技术。
丁轶群
于浙江大学玉泉校区
“虽然在此之前已经有了由Docker团队出的第一本Docker书,但是这是国内第一本深入解读Docker与Kubernetes原理的原创图书,这一点意义重大。本书比较完整地介绍了Docker与Kubernetes的工作原理和生态,非常有借鉴意义。”——许式伟,七牛云存储CEO
“Docker容器技术已经在国内如火如荼地流行起来,浙江大学SEL实验室目前是国内掌握Docker技术最熟练的技术团队之一,他们在国内Docker技术界一直产生着重要影响。这次他们把Docker的实战经验汇编成书,可以帮助更多的Docker爱好者学习到一手的实战经验。”——肖德时,数人科技CTO
“本书非常细致地讲解了Docker技术的来龙去脉和技术细节,更为难得是还加入了Docker生态当中的其他技术。Docker这项技术本身就是将多种思想和技术融合的产物,从生态的视角去解读技术的来龙去脉将极大地促进读者对云计算和容器技术的重新思考。”——程显峰,火币网CTO
“本书宏观上描绘了容器和容器云技术发展的浪潮和生态系统,微观上以Docker和Kubernetes为典型进行了深度分析。无论是Docker技术爱好者,还是系统架构师、云端开发者、系统管理和运维人员,都能在本书中找到适合自己阅读的要点。浙江大学SEL实验室云计算团队是一支非常优秀的云计算研究团队,很多85后、90后人才活跃在*社区前沿,感谢他们能将多年的知识和智慧积累分享出来!”——刘俊,百度运维部高级架构师,两次百度最高奖获得者
“本书是浙江大学SEL实验室云计算团队多年深耕Docker及背后的容器技术的结晶。*的特点就是深入,并且有各种实用案例和细致讲解。另外,这本书在怎样真正地把Docker及周边产品落地以构建灵活多变的云平台方面也进行了生动的阐释。”——郝林,微影时代架构师,《Go并发编程实战》作者
“Docker颠覆了容器技术,也将容器技术带到了新的高度。InfoQ从2014年初就开始密切关注容器技术,见证并切身参与了容器技术的发展。作为我们的优秀作者,浙江大学SEL实验室在InfoQ撰写了很多与Docker、Kubernetes相关的技术文章,得到了广大读者的肯定。希望这本书能推动容器技术在中国的落地。”——郭蕾,InfoQ主编
“浙江大学SEL实验室属于国内较早接触并研究开源PaaS技术的团队之一,从传统PaaS的开源代表CloudFoundry、OpenShift,到新一代基于Docker的PaaS平台如DEIS、Flynn等,他们均有深入的研究和实践经验。更为难得的是,他们不仅参与开源贡献,而且笔耕不辍,通过博客、论坛等方式积极分享有深度、有内涵的技术文章,并广泛参与国内PaaS届各种技术交流会议。华为PaaS团队也在与之交流中汲取了不少营养。此次,他们将近年来对Docker容器和Kubernetes、DEIS、Flynn等PaaS开源平台的研究成果结集成册,内容详尽且深入浅出。我相信,无论是入门者还是老手,都能够从中获益。”——刘赫伟,华为中央软件院
“容器技术在大型互联网企业中已广泛应用,而Docker是容器技术中的杰出代表。本书不仅介绍了Docker基础知识,而且进行了代码级的深入分析,并通过对Kubernetes等技术的讲解延伸至集群操作系统以及对Docker生态领域的思考,同时结合了大量实践,内容丰富,值得拥有。”——王炜煜,百度运维部高级架构师,JPaaS项目负责人
“Docker作为操作系统层面轻量级的虚拟化技术,凭借简易的使用、快速的部署以及灵活敏捷的集成支持等优势,奠定了Docker如今在PaaS领域的江湖地位。
浙江大学SEL实验室在云计算和 PaaS领域耕耘多年,
积累了丰富的经验。本书既有对Docker源代码层面的深度解读,也有实战经验的分享,希望这本书能够帮助Docker开发者在技术上更上一层楼。”——李三红,蚂蚁金服基础技术部JVM Architect
评论
还没有评论。