目 录
第 一部分 基础知识
第 1章 容器的发展史 3
1.1 开发过程的发展 3
1.1.1 瀑布式开发 3
1.1.2 敏捷式开发 4
1.1.3 DevOps 5
1.2 应用架构的发展 6
1.2.1 单体架构与多层架构 6
1.2.2 微服务架构 7
1.3 部署/打包的发展 9
1.3.1 物理机和虚拟机 9
1.3.2 容器 10
1.3.3 容器的舵手—Kubernetes 11
第 2章 Kubernetes的核心概念 12
2.1 Kubernetes的设计架构 12
2.1.1 Master 13
2.1.2 Node 15
2.1.3 组件间的基本交互流程 16
2.2 Kubernetes的核心对象 17
2.2.1 Pod 17
2.2.2 控制器 18
2.2.3 服务与存储 20
2.2.4 资源划分 22
2.3 本章小结 23
第二部分 应用
第3章 Kubernetes的安装与部署 27
3.1 Master与Node都要安装的
基础组件 28
3.1.1 在Debian、Ubuntu系统上安装
基础组件 28
3.1.2 在CentOS以及RHEL和Fedora
系统上安装基础组件 28
3.2 Master的安装与配置 29
3.2.1 如何解决CPU数量
不够的问题 29
3.2.2 如何解决不支持交换
内存的问题 29
3.2.3 如何解决网络连接
错误的问题 30
3.3 Node的安装与配置 32
3.4 本章小结 36
第4章 Pod—Kubernetes的基本单位 37
4.1 Pod的基本操作 37
4.1.1 创建Pod 37
4.1.2 查询Pod 38
4.1.3 修改Pod 40
4.1.4 删除Pod 41
4.2 Pod模板详解 41
4.3 Pod与容器 45
4.3.1 Pod创建容器的方式 45
4.3.2 Pod组织容器的方式 50
4.4 Pod的生命周期 55
4.4.1 Pod的相位 55
4.4.2 Pod的重启策略 56
4.4.3 Pod的创建与销毁过程 57
4.4.4 Pod的生命周期事件 58
4.5 Pod的健康检查 63
4.6 本章小结 68
第5章 控制器—Pod的管理 70
5.1 Deployment控制器 70
5.1.1 Deployment控制器的
基本操作 71
5.1.2 Deployment控制器的模板 75
5.1.3 Deployment控制器的伸缩 76
5.1.4 Deployment控制器的更新 77
5.1.5 Deployment控制器的回滚 84
5.2 DaemonSet控制器 85
5.2.1 DaemonSet控制器的基本操作 86
5.2.2 DaemonSet控制器的更新 88
5.3 Job与CronJob控制器 90
5.3.1 Job控制器的基本操作 90
5.3.2 Job的异常处理 95
5.3.3 CronJob控制器的基本操作 98
5.4 其他控制器 101
5.5 本章小结 102
第6章 Service和Ingress—
发布Pod提供的服务 103
6.1 Service 103
6.1.1 向外发布—通过
ClusterIP发布 107
6.1.2 向外发布—通过
NodePort发布 110
6.1.3 向外发布—通过
LoadBalancer发布 112
6.1.4 向内发布—通过
无头Service 115
6.1.5 向内发布—通过
ExternalName 117
6.1.6 服务发现 119
6.1.7 其他配置方式 121
6.2 Ingress 124
6.2.1 Ingress控制器的安装 126
6.2.2 Ingress的基本操作 127
6.3 本章小结 137
第7章 存储与配置 138
7.1 本地存储卷 138
7.1.1 emptyDir 139
7.1.2 hostPath 140
7.2 网络存储卷 142
7.2.1 安装NFS 142
7.2.2 使用NFS 144
7.3 持久存储卷 146
7.3.1 PV与PVC 147
7.3.2 StorageClass 154
7.4 StatefulSet控制器 159
7.4.1 StatefulSet控制器的
基本操作 161
7.4.2 PVC及PV的使用 163
7.4.3 无头Service的访问 165
7.4.4 Pod的重建 167
7.4.5 StatefulSet控制器的
伸缩与更新 168
7.5 配置存储卷 168
7.5.1 ConfigMap 169
7.5.2 Secret 174
7.5.3 Downward API 181
7.6 本章小结 184
第8章 Kubernetes资源的管理及调度 186
8.1 资源调度—为Pod设置
计算资源 186
8.2 资源管理—命名空间 190
8.2.1 命名空间的基本操作 190
8.2.2 命名空间的资源配额 193
8.2.3 命名空间中单个资源的
限额范围 197
8.3 资源管理—标签、
选择器及注解 202
8.3.1 标签 202
8.3.2 选择器 204
8.3.3 注解 207
8.4 资源调度—Pod调度
策略详解 208
8.4.1 调度过程 208
8.4.2 节点选择调度 211
8.4.3 节点亲和性调度 212
8.4.4 Pod亲和性与反亲和性调度 215
8.4.5 污点与容忍度 219
8.4.6 优先级与抢占式调度 222
8.5 本章小结 224
第三部分 进阶
第9章 API Server 227
9.1 API Server的基本操作 227
9.1.1 写操作 228
9.1.2 读操作 234
9.1.3 独有操作 237
9.1.4 状态操作 241
9.2 API Server的身份认证、授权、
准入控制 245
9.2.1 身份认证 246
9.2.2 RBAC授权 253
9.3 本章小结 260
第 10章 Kubernetes的扩展 261
10.1 可视化管理—
Kubernetes Dashboard 261
10.1.1 安装Kubernetes Dashboard 261
10.1.2 使用Kubernetes Dashboard 264
10.2 资源监控—Prometheus与
Grafana 269
10.2.1 安装与配置Prometheus 269
10.2.2 安装与配置Grafana 270
10.3 日志管理—ElasticSearch、
Fluentd、Kibana 275
10.4 本章小结 277
第四部分 实践
第 11章 项目部署案例 281
11.1 无状态项目的部署案例 281
11.2 有状态项目的部署案例 287
11.3 使用Helm部署项目 292
11.3.1 Helm简介 293
11.3.2 Helm的安装 294
11.3.3 Helm Chart的基本操作 296
11.3.4 将Chart打包到
Chart仓库中 306
11.3.5 发布版本的更新、
回滚和删除 308
11.3.6 使用Helm部署的项目案例 310
11.4 本章小结 313