内容简介
Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。《Kubernetes指南:从Docker到Kubernetes实践全接触(纪念版)》从架构师、开发人员和运维人员的角度,阐述了Kubernetes的基本概念、实践指南、核心原理、开发指导、运维指南及源码分析等内容,图文并茂、内容丰富、由浅入深、讲解全面;围绕着生产环境中可能出现的问题,给出了大量的典型案例,比如安全配置、网络方案、共享存储方案、高可用性方案及Trouble Shooting技巧等,有很强的实战指导意义。本书随着Kubernetes版本更新不断完善,目前涵盖了Kubernetes从v1.0到v1.6版本的全部特性,尽力为Kubernetes用户提供全方位的指南。无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理,还是对于IT人士来说,本书都极具参考价值。
图书目录
第1章 Kubernetes入门1
1.1 Kubernetes是什么1
1.2 为什么要用Kubernetes4
1.3 从一个简单的例子开始5
1.3.1 环境准备6
1.3.2 启动MySQL服务6
1.3.3 启动Tomcat应用9
1.3.4 通过浏览器访问网页10
1.4 Kubernetes基本概念和术语12
1.4.1 Master12
1.4.2 Node12
1.4.3 Pod15
1.4.4 Label(标签)18
1.4.5 Replication Controller22
1.4.6 Deployment26
1.4.7 Horizontal Pod Autoscaler28
1.4.8 StatefulSet29
1.4.9 Service(服务)30
1.4.10 Volume(存储卷)37
1.4.11 Persistent Volume41
1.4.12 Namespace(命名空间)42
1.4.13 Annotation(注解)43
1.4.14 小结44
第2章 Kubernetes实践指南45
2.1 Kubernetes安装与配置45
2.1.1 系统要求45
2.1.2 使用kubeadm工具快速安装Kubernetes集群46
2.1.3 以二进制文件方式安装Kubernetes集群51
2.1.4 Kubernetes集群的安全设置59
2.1.5 Kubernetes集群的网络配置64
2.1.6 内网中的Kubernetes相关配置64
2.1.7 Kubernetes的版本升级65
2.1.8 Kubernetes核心服务配置详解66
2.2 kubectl命令行工具用法详解86
2.2.1 kubectl用法概述86
2.2.2 kubectl子命令详解88
2.2.3 kubectl参数列表90
2.2.4 kubectl输出格式90
2.2.5 kubectl操作示例92
2.3 深入掌握Pod93
2.3.1 Pod定义详解93
2.3.2 Pod的基本用法98
2.3.3 静态Pod103
2.3.4 Pod容器共享Volume104
2.3.5 Pod的配置管理106
2.3.6 在容器内获取Pod信息(Downward API)119
2.3.7 Pod生命周期和重启策略124
2.3.8 Pod健康检查125
2.3.9 玩转Pod调度127
2.3.10 Init Container(初始化容器)149
2.3.11 Pod的升级和回滚152
2.3.12 Pod的扩容和缩容166
2.3.13 使用StatefulSet搭建MongoDB集群171
2.4 深入掌握Service180
2.4.1 Service定义详解181
2.4.2 Service基本用法182
2.4.3 Headless Service187
2.4.4 集群外部访问Pod或Service192
2.4.5 DNS服务搭建指南196
2.4.6 自定义DNS和上游DNS服务器204
2.4.7 Ingress:HTTP 7层路由机制208
第3章 Kubernetes核心原理226
3.1 Kubernetes API Server 原理分析226
3.1.1 Kubernetes API Server概述226
3.1.2 独特的Kubernetes Proxy API接口229
3.1.3 集群功能模块之间的通信230
3.2 Controller Manager 原理分析231
3.2.1 Replication Controller232
3.2.2 Node Controller234
3.2.3 ResourceQuota Controller235
3.2.4 Namespace Controller237
3.2.5 Service Controller与Endpoint Controller237
3.3 Scheduler原理分析238
3.4 kubelet运行机制分析242
3.4.1 节点管理242
3.4.2 Pod管理243
3.4.3 容器健康检查244
3.4.4 cAdvisor资源监控245
3.5 kube-proxy 运行机制分析247
3.6 深入分析集群安全机制251
3.6.1 API Server认证管理(Authentication)251
3.6.2 API Server授权管理(Authorization)253
3.6.3 Admission Control(准入控制)272
3.6.4 Service Account274
3.6.5 Secret私密凭据279
3.7 网络原理282
3.7.1 Kubernetes网络模型282
3.7.2 Docker的网络基础284
3.7.3 Docker的网络实现296
3.7.4 Kubernetes的网络实现304
3.7.5 Pod和Service网络实战308
3.7.6 CNI网络模型321
3.7.7 Kubernetes网络策略331
3.7.8 开源的网络组件333
3.8 共享存储原理363
3.8.1 共享存储机制概述363
3.8.2 PV详解364
3.8.3 PVC详解368
3.8.4 PV和PVC的生命周期370
3.8.5 StorageClass详解373
3.8.6 动态存储管理实战:GlusterFS376
第4章 Kubernetes开发指南388
4.1 REST简述388
4.2 Kubernetes API详解390
4.2.1 Kubernetes API概述390
4.2.2 API版本395
4.2.3 API Groups(API组)395
4.2.4 API方法说明397
4.2.5 API响应说明398
4.3 使用Java程序访问Kubernetes API400
4.3.1 Jersey401
4.3.2 Fabric8412
4.3.3 使用说明413
第5章 Kubernetes运维指南434
5.1 Kubernetes集群管理指南434
5.1.1 Node的管理434
5.1.2 更新资源对象的Label436
5.1.3 Namespace:集群环境共享与隔离437
5.1.4 Kubernetes资源管理441
5.1.5 资源紧缺时的Pod驱逐机制475
5.1.6 Pod Disruption Budget(主动驱逐保护)483
5.1.7 Kubernetes集群的高可用部署方案485
5.1.8 Kubernetes集群监控496
5.1.9 集群统一日志管理513
5.1.10 Kubernetes审计日志(Audit Log)522
5.1.11 使用Web UI(Dashboard)管理集群523
5.1.12 Helm:Kubernetes应用包管理工具527
5.2 Trouble Shooting指导538
5.2.1 查看系统Event事件538
5.2.2 查看容器日志540
5.2.3 查看Kubernetes服务日志541
5.2.4 常见问题542
5.2.5 寻求帮助546
5.3 Kubernetes开发中的新功能546
5.3.1 Pod Preset(运行时参数注入策略)546
5.3.2 Cluster Federation(集群联邦)553
5.3.3 容器运行时接口(Container Runtime Interface-CRI)557
5.3.4 对GPU的支持561
5.3.5 Kubernetes的演进路线(Roadmap)和开发模式565
第6章 Kubernetes源码导读568
6.1 Kubernetes源码结构和编译步骤568
6.2 kube-apiserver进程源码分析572
6.2.1 进程启动过程572
6.2.2 关键代码分析574
6.2.3 设计总结589
6.3 kube-controller-manager进程源码分析592
6.3.1 进程启动过程592
6.3.2 关键代码分析595
6.3.3 设计总结603
6.4 kube-scheduler进程源码分析605
6.4.1 进程启动过程605
6.4.2 关键代码分析610
6.4.3 设计总结617
6.5 kubelet进程源码分析619
6.5.1 进程启动过程619
6.5.2 关键代码分析624
6.5.3 设计总结647
6.6 kube-proxy进程源码分析648
6.6.1 进程启动过程648
6.6.2 关键代码分析650
6.6.3 设计总结665
6.7 kubectl进程源码分析666
6.7.1 kubectl create命令667
6.7.2 rolling-update命令671