新書推薦:
《
大家小书 译馆 骑士:历史与文化
》
售價:HK$
56.4
《
没有一种人生是完美的:百岁老人季羡林的人生智慧(读完季羡林,我再也不内耗了)
》
售價:HK$
56.9
《
日耳曼通识译丛:复原力:心理抗逆力
》
售價:HK$
34.3
《
海外中国研究·未竟之业:近代中国的言行表率
》
售價:HK$
135.7
《
我们为何建造(城市与生态文明丛书)
》
售價:HK$
89.7
《
算法经济 : 商业逻辑与人类生活的智能演进(生动呈现AI与算法的创新应用与商业价值)
》
售價:HK$
79.4
《
家书中的百年史
》
售價:HK$
79.4
《
偏爱月亮
》
售價:HK$
45.8
|
編輯推薦: |
基于Docker 1.10和Kubernetes 1.2全面更新
一本书讲透Docker和Kubernetes
从源码层面深度解析Docker核心原理
Kubernetes源码完全解读 *实践
广泛涵盖Docker高级实践技巧
全面梳理主流容器云技术架构方法
|
內容簡介: |
本书根据Docker 1.10版和Kubernetes 1.2版对第1版进行了全面更新,从实践者的角度出发,以Docker和Kubernetes为重点,沿着基本用法介绍到核心原理解读到高级实践技巧的思路,一本书讲透当前主流的容器和容器云技术,有助于读者在实际场景中利用Docker容器和容器云解决问题并启发新的思考。全书包括两部分,首部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,介绍了几种典型场景下的Kubernetes实践。 本书适用于有一定Docker基础的开发者、架构师、IT专业学生以及探索基于Docker构建云计算平台的技术人员,也非常适合作为高校教材或培训资料。
|
關於作者: |
浙江大学软件工程实验室(Software Engineering Lab,SEL)云计算团队组建于2011年,组织博士和硕士研究生搭建、分析和钻研开源的云计算技术,包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,积极为开源社区贡献代码,管理和参与线上线下讨论社区,参加国内外云计算技术峰会并发言。以开源社区为技术交流研发平台,浙江大学SEL实验室在4年多的时间里成长为一个充满热情、富有能力的云计算研发团队,也在国内外开源云计算社区,尤其是在Docker、Kubernetes和Cloud Foundry社区得到了广泛认可。
|
目錄:
|
第一部分 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 World17
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 daemon54
3.2.2 Docker client54
3.2.3 镜像管理54
3.2.4 execdriver、volumedriver、graphdriver55
3.2.5 network55
3.3 client和daemon56
3.3.1 client模式56
3.3.2 daemon模式58
3.3.3 从client到daemon64
3.4 libcontainer67
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 networknamespace154
4.2.2 pipework原理解析159
4.2.3 pipework跨主机通信165
4.2.4 OVS划分VLAN170
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章 专注编排与部署:三剑客与Fleet230
6.1 编排小神器FigCompose230
6.1.1 再谈容器编排与部署230
6.1.2 Compose原理:一探究竟233
6.2 跨平台宿主环境管理工具Machine237
6.2.1 Machine与虚拟机软件237
6.2.2 Machine与IaaS平台238
6.2.3 Machine小结239
6.3 集群抽象工具Swarm240
6.3.1 Swarm简介240
6.3.2 试用Swarm241
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与Machine247
6.3.8 Swarm小结248
6.4 编排之秀Fleet248
6.4.1 旧问题新角度:Docker distro249
6.4.2 Fleet的原理剖析252
第7章 专注应用支撑和运行时:Flynn和Deis258
7.1 Flynn,一个小而美的两层架构258
7.1.1 第0层:容器云的基础设施259
7.1.2 第1层:容器云的功能框架259
7.1.3 Flynn体系架构与实现原理260
7.2 谈谈Deis与Flynn270
7.2.1 应用发布上的比较271
7.2.2 关于Deis的一些思考273
第8章 一切皆容器:Kubernetes274
8.1 Kubernetes是个什么样的项目274
8.2 Kubernetes的设计解读275
8.2.1 一个典型案例:Guestbook275
8.2.2 pod设计解读277
8.2.3 replication controller设计解读288
8.2.4 service的设计解读294
8.2.5 新一代副本控制器replica set306
8.2.6 Deployment307
8.2.7 DaemonSet312
8.2.8 ConfigMap312
8.2.9 Job317
8.2.10 Horizontal Pod Autoscaler318
8.3 Kubernetes核心组件解读320
8.3.1 Kubernetes的整体架构320
8.3.2 APIServer321
8.3.3 scheduler328
8.3.4 controller manager338
8.3.5 kubelet346
8.3.6 kube-proxy352
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 volume371
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 control390
8.7 Kubernetes高级实践402
8.7.1 应用健康检查402
8.7.2 高可用性405
8.7.3 日志408
8.7.4 集成DNS410
8.7.5 容器上下文环境412
8.8 Kubernetes未来动向414
8.8.1 Ubernetes414
8.8.2 petSet415
8.8.3 performance417
8.8.4 rescheduler417
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展示了对容器后端开放姿态,同时它还准备以CS模式实现对其他容器的支撑。在网络方面,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布道之路上贡献出了自己的光和热,传播惠及当下的云计算前沿技术。
丁轶群
于浙江大学玉泉校区
|
|