第 1章 Kubernetes基本环境搭建 1
1.1 本地主机 1
1.2 虚拟机软件 2
1.3 Linux发行版 2
1.4 创建虚拟机 3
1.5 安装操作系统 4
1.6 常用的Linux操作 5
1.7 小结 6
第 2章 Kubernetes底层基础:容器技术 7
2.1 认识Docker 7
2.1.1 Docker的诞生 7
2.1.2 Docker的形态 8
2.1.3 Docker的安装 9
2.1.4 Docker Engine的架构 10
2.1.5 Docker的基本用法 12
2.1.6 小结 13
2.2 理解容器的本质 13
2.2.1 容器究竟是什么 14
2.2.2 为什么要隔离 15
2.2.3 容器与虚拟机的区别 16
2.2.4 隔离是怎么实现的 17
2.2.5 小结 18
2.3 容器化的应用 18
2.3.1 容器与镜像 19
2.3.2 常用的镜像操作命令 20
2.3.3 常用的容器操作命令 21
2.3.4 小结 23
2.4 创建应用镜像 24
2.4.1 镜像内部机制 24
2.4.2 什么是Dockerfile 26
2.4.3 编写Dockerfile 27
2.4.4 镜像构建工流程 29
2.4.5 小结 30
2.5 镜像仓库 31
2.5.1 什么是Docker Hub 31
2.5.2 在Docker Hub上挑选镜像 32
2.5.3 Docker Hub镜像的命名规则 34
2.5.4 向Docker Hub上传镜像 37
2.5.5 离线环境使用Docker Hub 38
2.5.6 小结 38
2.6 容器与外界的通信 39
2.6.1 容器内外的文件拷贝 39
2.6.2 共享宿主机的文件 40
2.6.3 网络互联互通 41
2.6.4 小结 44
2.7 实战演练 44
2.7.1 要点回顾 45
2.7.2 私有镜像仓库 46
2.7.3 WordPress网站 47
2.7.4 小结 51
第3章 Kubernetes实验环境搭建 52
3.1 认识Kubernetes 52
3.1.1 什么是容器编排 52
3.1.2 什么是Kubernetes 53
3.1.3 小结 54
3.2 使用Minikube 54
3.2.1 什么是Minikube 54
3.2.2 安装Minikube 55
3.2.3 运行Minikube 56
3.2.4 小结 58
3.3 使用kubeadm 59
3.3.1 什么是kubeadm 59
3.3.2 集群架构 60
3.3.3 准备工作 61
3.3.4 安装kubeadm 62
3.3.5 安装控制面节点 63
3.3.6 安装网络插件 65
3.3.7 安装数据面节点 65
3.3.8 安装操作台节点 66
3.3.9 小结 66
第4章 Kubernetes运行机制和基本API对象 67
4.1 Kubernetes工作机制 67
4.1.1 云时代的操作系统 67
4.1.2 总体架构 68
4.1.3 控制面 70
4.1.4 数据面 70
4.1.5 工作流程 71
4.1.6 扩展 71
4.1.7 小结 73
4.2 工作语言YAML 73
4.2.1 声明式与命令式 73
4.2.2 什么是YAML 74
4.2.3 什么是API对象 76
4.2.4 用YAML描述API对象 78
4.2.5 编写YAML的技巧 79
4.2.6 小结 81
4.3 核心概念Pod 81
4.3.1 为什么要有Pod 82
4.3.2 为什么Pod是核心概念 82
4.3.3 用YAML描述Pod 83
4.3.4 用kubectl操作Pod 85
4.3.5 小结 87
4.4 离线业务Job和CronJob 88
4.4.1 为什么不直接使用Pod 88
4.4.2 为什么要有Job和CronJob 89
4.4.3 用YAML描述Job和CronJob 90
4.4.4 用kubectl操作Job 91
4.4.5 用kubectl操作CronJob 94
4.4.6 小结 96
4.5 配置信息ConfigMap和Secret 96
4.5.1 什么是ConfigMap 97
4.5.2 什么是Secret 98
4.5.3 加载为环境变量 100
4.5.4 加载为文件 103
4.5.5 小结 106
4.6 实战演练 106
4.6.1 要点回顾 106
4.6.2 搭建WordPress网站 108
4.6.3 小结 113
第5章 Kubernetes业务应用API对象 114
5.1 永不宕机的Deployment 114
5.1.1 为什么要有Deployment 114
5.1.2 用YAML描述Deployment 115
5.1.3 Deployment的关键字段 116
5.1.4 用kubectl操作Deployment 118
5.1.5 小结 120
5.2 忠实可靠的看门狗DaemonSet 121
5.2.1 为什么要有DaemonSet 121
5.2.2 用YAML描述DaemonSet 122
5.2.3 用kubectl操作DaemonSet 124
5.2.4 污点和容忍度 124
5.2.5 静态Pod 126
5.2.6 小结 127
5.3 微服务必需的Service 127
5.3.1 为什么要有Service 127
5.3.2 用YAML描述Service 128
5.3.3 用kubectl操作Service 130
5.3.4 以域名的方式访问Service 133
5.3.5 在集群外暴露Service 135
5.3.6 小结 136
5.4 管理集群出入流量的Ingress 137
5.4.1 为什么要有Ingress 137
5.4.2 为什么要有Ingress Controller 138
5.4.3 为什么要有Ingress Class 139
5.4.4 用YAML描述Ingress和Ingress Class 140
5.4.5 用kubectl操作Ingress和Ingress Class 142
5.4.6 使用Nginx Ingress Controller 143
5.4.7 使用Kong Ingress Controller 146
5.4.8 扩展Kong Ingress Controller 150
5.4.9 小结 153
5.5 数据持久化PersistentVolume 154
5.5.1 什么是PersistentVolume 155
5.5.2 什么是PersistentVolumeClaim和StorageClass 155
5.5.3 用YAML描述PersistentVolume 156
5.5.4 用YAML描述PersistentVolumeClaim 158
5.5.5 在Pod里使用PersistentVolume 158
5.5.6 在Pod里使用静态网络存储 161
5.5.7 在Pod里使用动态网络存储 164
5.5.8 小结 167
5.6 有状态的应用StatefulSet 168
5.6.1 什么是有状态的应用 168
5.6.2 用YAML描述StatefulSet 169
5.6.3 用kubectl操作StatefulSet 170
5.6.4 StatefulSet的数据持久化 173
5.6.5 小结 175
5.7 实战演练 176
5.7.1 要点回顾 176
5.7.2 使用Deployment搭建WordPress网站 178
5.7.3 使用StatefulSet优化WordPress网站的设计 185
5.7.4 小结 187
第6章 Kubernetes运维、监控和管理 188
6.1 应用滚动更新 188
6.1.1 应用的版本更新 188
6.1.2 应用版本更新的过程 190
6.1.3 管理更新 193
6.1.4 更新描述 195
6.1.5 小结 196
6.2 容器状态探针 197
6.2.1 探针的种类 197
6.2.2 使用探针 199
6.2.3 小结 201
6.3 容器资源配额管理 202
6.3.1 申请资源配额 202
6.3.2 处理策略 203
6.3.3 小结 204
6.4 集群资源配额管理 204
6.4.1 什么是名字空间 204
6.4.2 如何使用名字空间 205
6.4.3 设置资源配额 206
6.4.4 使用资源配额 208
6.4.5 默认资源配额 210
6.4.6 小结 212
6.5 集群资源监控 212
6.5.1 使用Metrics Server 212
6.5.2 水平自动伸缩 214
6.5.3 使用Prometheus 217
6.5.4 小结 221
6.6 集群网络插件 222
6.6.1 网络模型 222
6.6.2 什么是CNI 223
6.6.3 CNI的工作原理 224
6.6.4 使用Calico插件 227
6.6.5 小结 229
6.7 实战演练 230
6.7.1 要点回顾 230
6.7.2 部署Dashboard 231
6.7.3 小结 237
第7章 结束语 238
7.1 学习经验分享 238
7.2 学习方式建议 239
7.3 临别感言 240
附录A Kubernetes弃用Docker 241
A.1 CRI 241
A.2 Containerd 242
A.3 正式弃用Docker 243
A.4 Docker的未来 245
附录B docker-compose 246
B.1 什么是docker-compose 246
B.2 搭建私有镜像仓库 247
B.3 搭建WordPress网站 250
B.4 小结 253
附录C Harbor 254
C.1 什么是Harbor 254
C.2 安装Harbor 254
C.3 使用Harbor 256
附录D NFS网络存储服务 258
D.1 安装NFS服务端 258
D.2 安装NFS客户端 259
D.3 验证NFS存储 259
D.4 安装NFS Provisioner 260