第1章 Kubernetes概述 1
1.1 容器技术概述 1
1.2 Kubernetes介绍 3
1.3 Kubernetes架构与组件 4
1.4 Kubernetes核心资源 5
1.5 本章小结 6
第2章 Kubernetes快速入门 7
2.1 Kubernetes集群部署 7
2.1.1 准备服务器环境 7
2.1.2 系统初始化配置 8
2.1.3 安装Docker 10
2.1.4 安装cri-docker 10
2.1.5 安装kubeadm和kubelet 11
2.1.6 部署Master节点 12
2.1.7 部署Node节点 14
2.1.8 部署网络插件 14
2.1.9 部署Dashboard 16
2.1.10 清空Kubernetes环境 18
2.2 部署第一个应用程序 18
2.2.1 通过Dashboard部署应用程序 18
2.2.2 通过kubectl命令行部署应用程序 20
2.2.3 通过定义资源文件部署应用程序 21
2.3 kubectl管理工具 23
2.3.1 kubectl子命令概要 23
2.3.2 kubectl工具常用操作 28
2.4 本章小结 30
第3章 Pod资源对象 31
3.1 Pod存在的意义 31
3.2 Pod实现原理 32
3.2.1 容器之间网络通信 32
3.2.2 容器之间文件共享 35
3.3 Pod资源常见字段及值类型 37
3.4 Pod管理常用命令 38
3.5 容器运行命令与参数 39
3.5.1 command 39
3.5.2 args 40
3.6 镜像拉取策略 40
3.7 声明端口 41
3.8 容器健康检查 42
3.8.1 存活探针 42
3.8.2 就绪探针 44
3.8.3 启动探针 46
3.8.4 tcpSocket和exec检查方法 47
3.9 容器资源配额 49
3.9.1 资源请求与资源限制 49
3.9.2 资源请求对Pod调度的影响 51
3.9.3 理想的资源配额是多少 52
3.9.4 服务质量 53
3.10 容器环境变量 55
3.11 初始化容器 56
3.12 容器生命周期回调 58
3.12.1 postStart 59
3.12.2 preStop 60
3.13 Pod生命周期 61
3.13.1 创建Pod 61
3.13.2 启动Pod 62
3.13.3 销毁Pod 62
3.14 本章小结 63
第4章 工作负载资源对象 64
4.1 工作负载资源概述 64
4.2 Deployment 64
4.2.1 获取源代码 65
4.2.2 构建镜像 66
4.2.3 推送镜像到镜像仓库 67
4.2.4 部署应用 68
4.2.5 应用升级 71
4.2.6 应用回滚 74
4.2.7 应用扩容与缩容 77
4.2.8 应用下线 77
4.2.9 实现灰度发布 77
4.3 DaemonSet 79
4.4 Job与CronJob 83
4.4.1 Job 83
4.4.2 ConJob 84
4.5 本章小结 86
第5章 Service资源对象 87
5.1 Service概述 87
5.2 Service定义 87
5.3 Service公开类型 90
5.3.1 ClusterIP 90
5.3.2 NodePort 91
5.3.3 LoadBalancer 93
5.3.4 ExternalName 94
5.4 Endpoints对象 95
5.5 Service服务发现 97
5.5.1 环境变量 97
5.5.2 DNS 97
5.6 Service代理模式 102
5.6.1 iptables 102
5.6.2 ipvs 104
5.7 生产环境架构 107
5.8 本章小结 108
第6章 Ingress资源对象 109
6.1 Ingress概述 109
6.2 Ingress控制器部署 110
6.3 Ingress对外公开HTTP服务 110
6.4 基于请求路径转发不同服务 113
6.5 Ingress配置HTTPS 114
6.6 Ingress自定义配置 115
6.6.1 增加代理超时时间 115
6.6.2 设置客户端请求体大小 116
6.6.3 重定向 116
6.6.4 会话保持 117
6.6.5 自定义规则 117
6.7 Ingress灰度发布 118
6.7.1 基于权重的流量切分 119
6.7.2 基于客户端请求的流量切分 124
6.7.3 常见发布策略总结 128
6.8 Ingress工作原理 128
6.9 生产环境架构 129
6.10 本章小结 131
第7章 Kubernetes存储管理 132
7.1 卷 132
7.1.1 emptyDir 132
7.1.2 hostPath 134
7.1.3 nfs 136
7.1.4 容器存储接口 139
7.2 持久卷 140
7.2.1 创建PV 141
7.2.2 创建PVC 142
7.2.3 Pod使用PVC 143
7.2.4 PV动态供给 144
7.2.5 PV生命周期 148
7.3 内置存储对象 149
7.3.1 ConfigMap 149
7.3.2 Secret 153
7.3.3 配置文件自动重新加载方案 156
7.4 本章小结 156
第8章 有状态应用管理 157
8.1 StatefulSet工作负载资源 157
8.1.1 稳定的网络标识符 157
8.1.2 稳定的独享存储 160
8.2 MySQL主从复制集群实践 162
8.2.1 MySQL集群拓扑规划 162
8.2.2 MySQL集群容器化实现 163
8.2.3 MySQL Slave扩展与缩减 167
8.2.4 MySQL版本升级与回滚 170
8.3 Operator 170
8.3.1 Operator介绍 170
8.3.2 自定义资源定义 171
8.3.3 控制器 173
8.3.4 MySQL Operator 174
8.4 本章小结 178
第9章 Kubernetes调度管理 179
9.1 节点选择器 179
9.2 节点亲和性 180
9.3 Pod亲和性和反亲和性 184
9.3.1 亲和性 184
9.3.2 反亲和性 186
9.4 污点与容忍 187
9.4.1 污点 187
9.4.2 容忍 188
9.5 nodeName 190
9.6 本章小结 190
第10章 Kubernetes安全配置 192
10.1 Kubernetes API访问控制 192
10.1.1 Kubernetes安全框架 192
10.1.2 RBAC介绍 193
10.1.3 面向用户授权案例1 195
10.1.4 面向用户授权案例2 202
10.1.5 内置集群角色 204
10.1.6 面向应用程序授权案例 204
10.2 Pod安全上下文 207
10.2.1 容器以普通用户运行 208
10.2.2 容器启用特权 209
10.2.3 容器设置只读文件系统 210
10.3 网络策略 210
10.3.1 网络策略实现 210
10.3.2 网络策略资源 211
10.3.3 默认策略 212
10.3.4 Pod级别限制 213
10.3.5 命名空间级别限制 214
10.3.6 细粒度限制 215
10.3.7 IP段限制 216
10.3.8 出站流量限制 217
10.4 本章小结 218
第11章 Kubernetes网络插件之
Calico 219
11.1 Docker网络模型 219
11.1.1 容器之间以及容器与宿主机
之间的通信 219
11.1.2 容器访问外部网络 221
11.1.3 外部网络访问容器 221
11.2 Kubernetes网络模型 222
11.3 Calico介绍 224
11.4 Calico部署 226
11.5 calicoctl管理工具 226
11.6 Calico工作模式 227
11.6.1 覆盖网络:VXLAN模式 229
11.6.2 覆盖网络:IPIP模式 233
11.6.3 路由网络:BGP模式 235
11.6.4 工作模式优缺点 236
11.7 路由反射器 237
11.8 本章小结 240
第12章 Kubernetes部署利器
Helm 241
12.1 Helm介绍 241
12.2 Helm安装 241
12.3 Helm命令概述 242
12.4 Helm基本使用 243
12.4.1 制作Chart 243
12.4.2 安装Chart 246
12.4.3 更新Release 248
12.4.4 回滚Release 249
12.4.5 卸载Release 249
12.5 深入理解Chart模板 249
12.5.1 缩进函数 250
12.5.2 toYaml函数 250
12.5.3 条件判断 251
12.5.4 循环 252
12.5.5 变量作用域 253
12.5.6 读取文件 254
12.5.7 自定义模板 255
12.6 自建Chart仓库 257
12.6.1 搭建Chart仓库服务器 257
12.6.2 推送本地Chart到远程仓库 257
12.6.3 通过远程仓库安装Chart 258
12.7 公共Chart仓库 258
12.7.1 部署MySQL集群 259
12.7.2 部署Redis集群 262
12.8 本章小结 263
第13章 基于Jenkins的CI/CD
平台 265
13.1 CI/CD简介 265
13.1.1 持续集成 265
13.1.2 持续交付和持续部署 266
13.2 CI/CD流程设计 267
13.3 相关软件环境准备 267
13.3.1 部署GitLab代码仓库 268
13.3.2 部署Harbor镜像仓库 269
13.3.3 部署Jenkins发布系统 271
13.4 Jenkins初体验 275
13.4.1 流程设计 275
13.4.2 提交代码 275
13.4.3 创建项目 278
13.4.4 项目配置 278
13.4.5 验证与测试 281
13.5 Jenkins参数化构建 283
13.6 Jenkins主从架构 284
13.7 Jenkins Pipeline 287
13.7.1 Pipeline语法 287
13.7.2 基于Kubernetes动态创建代理 288
13.7.3 常用指令 292
13.7.4 片段生成器 296
13.8 案例:Pipeline实现网站项目的
自动发布 297
13.8.1 Pipeline脚本基本结构 297
13.8.2 拉取代码阶段 299
13.8.3 代码编译阶段 302
13.8.4 构建镜像阶段 303
13.8.5 部署到K8s集群阶段 306
13.8.6 反馈阶段 309
13.8.7 验证与测试 311
13.9 Argo CD增强持续交付 316
13.9.1 Argo CD部署 317
13.9.2 Argo CD实践 319
13.10 本章小结 323
第14章 基于Prometheus+Grafana的
监控平台 324
14.1 Prometheus和Grafana简介 324
14.2 Prometheus架构 324
14.3 部署Prometheus和Grafana 326
14.3.1 部署Prometheus 326
14.3.2 部署Grafana 327
14.3.3 在Grafana中添加Prometheus作为
数据源 328
14.4 Prometheus监控案例 329
14.4.1 监控Linux服务器 329
14.4.2 监控Docker服务器 332
14.4.3 监控MySQL服务器 334
14.4.4 监控应用程序 336
14.5 Alertmanager告警通知 342
14.5.1 部署Alertmanager 342
14.5.2 Prometheus指向Alertmanager 344
14.5.3 定义告警规则 344
14.5.4 企业微信告警通知 349
14.5.5 自定义告警内容模板 351
14.6 Prometheus监控Kubernetes 353
14.6.1 Prometheus服务发现简介 353
14.6.2 Kubernetes关注的指标 354
14.6.3 在Kubernetes中搭建Prometheus
监控系统 355
14.6.4 监控Node 356
14.6.5 监控Pod 363
14.6.6 监控资源对象 366
14.6.7 监控Service和Ingress对象 368
14.6.8 监控集群中应用程序 371
14.6.9 监控Kubernetes组件 374
14.7 本章小结 383
第15章 基于ELK Stack的日志管理
平台 384
15.1 ELK Stack简介 384
15.2 部署Elasticsearch和Kibana 386
15.3 Nginx日志收集案例 387
15.3.1 部署Filebeat 387
15.3.2 Kibana查看索引 388
15.3.3 创建数据视图 389
15.4 数据处理管道Logstash 391
15.4.1 部署Logstash 391
15.4.2 定义数据处理规则 393
15.4.3 配置Filebeat发送到Logstash 395
15.5 Kibana仪表板 396
15.5.1 PV统计 397
15.5.2 PV趋势图 398
15.5.3 客户端IP TOP10 399
15.5.4 URI TOP10 401
15.5.5 HTTP状态码分布 401
15.6 收集Kubernetes集群中的应用
日志 403
15.6.1 如何收集这些日志 403
15.6.2 在Kubernetes中搭建ELK
日志系统 404
15.6.3 收集Pod日志 405
15.6.4 收集Pod中的日志文件 410
15.7 本章小结 415