第1章Kubernetes系统基础 1
1.1容器技术概述 1
1.1.1容器技术的功用 2
1.1.2容器简史 3
1.1.3 Docker的功能限制 4
1.2 Kubernetes概述 4
1.2.1 Kubernetes简史 4
1.2.2 Kubernetes特性 5
1.2.3 Kubernetes概念和术语 6
1.3 Kubernetes集群组件 10
1.3.1 Master组件 10
1.3.2 Node组件 12
1.3.3核心附件 13
1.4 Kubernetes网络模型基础 13
1.4.1网络模型概述 13
1.4.2集群上的网络通信 15
1.5本章小结 16
第2章Kubernetes快速入门 17
2.1 Kubernetes的核心对象 17
2.1.1 Pod资源对象 18
2.1.2 Controller 19
2.1.3 Service 20
2.1.4部署应用程序的主体过程 21
2.2部署Kubernetes集群 22
2.2.1 kubeadm部署工具 22
2.2.2集群运行模式 24
2.2.3准备用于实践操作的集群环境 25
2.2.4获取集群环境相关的信息 26
2.3 kubectl使用基础与示例 26
2.4命令式容器应用编排 29
2.4.1部署应用(Pod) 30
2.4.2探查Pod及应用详情 33
2.4.3部署Service对象 36
2.4.4扩容和缩容 38
2.4.5修改及删除对象 40
2.5本章小结 41
第3章 资源管理基础 42
3.1资源对象及API群组 42
3.1.1 Kubernetes的资源对象 43
3.1.2资源及其在API中的组织形式 46
3.1.3访问Kubernetes REST API 48
3.2对象类资源格式 49
3.2.1资源配置清单 50
3.2.2 metadata嵌套字段 51
3.2.3 spec和status字段 52
3.2.4资源配置清单格式文档 53
3.2.5资源对象管理方式 54
3.3 kubectl命令与资源管理 56
3.3.1资源管理操作概述 56
3.3.2 kubectl的基本用法 57
3.4管理名称空间资源 59
3.4.1查看名称空间及其资源对象 60
3.4.2管理Namespace资源 61
3.5 Pod资源的基础管理操作 61
3.5.1陈述式对象配置管理方式 62
3.5.2声明式对象配置管理方式 64
3.6本章小结 65
第4章 管理Pod资源对象 66
4.1容器与Pod资源对象 66
4.2管理Pod对象的容器 68
4.2.1镜像及其获取策略 69
4.2.2暴露端口 70
4.2.3自定义运行的容器化应用 71
4.2.4环境变量 72
4.2.5共享节点的网络名称空间 73
4.2.6设置Pod对象的安全上下文 74
4.3标签与标签选择器 75
4.3.1标签概述 75
4.3.2管理资源标签 77
4.3.3标签选择器 78
4.3.4 Pod节点选择器nodeSelector 79
4.4资源注解 80
4.4.1查看资源注解 81
4.4.2管理资源注解 82
4.5 Pod对象的生命周期 82
4.5.1 Pod的相位 82
4.5.2 Pod的创建过程 83
4.5.3 Pod生命周期中的重要行为 84
4.5.4容器的重启策略 87
4.5.5 Pod的终止过程 87
4.6 Pod存活性探测 88
4.6.1设置exec探针 89
4.6.2设置HTTP探针 90
4.6.3设置TCP探针 92
4.6.4存活性探测行为属性 93
4.7 Pod就绪性探测 94
4.8资源需求及资源限制 96
4.8.1资源需求 96
4.8.2资源限制 98
4.8.3容器的可见资源 99
4.8.4 Pod的服务质量类别 100
4.9本章小结 101
第5章Pod控制器 103
5.1关于Pod控制器 103
5.1.1 Pod控制器概述 104
5.1.2控制器与Pod对象 105
5.1.3 Pod模板资源 106
5.2 ReplicaSet控制器 106
5.2.1 ReplicaSet概述 107
5.2.2创建ReplicaSet 108
5.2.3 ReplicaSet管控下的Pod对象 109
5.2.4更新ReplicaSet控制器 111
5.2.5删除ReplicaSet控制器资源 114
5.3 Deployment控制器 114
5.3.1创建Deployment 115
5.3.2更新策略 116
5.3.3升级Deployment 119
5.3.4金丝雀发布 121
5.3.5回滚Deployment控制器下的应用发布 123
5.3.6扩容和缩容 123
5.4 DaemonSet控制器 124
5.4.1创建DaemonSet资源对象 124
5.4.2更新DaemonSet对象 126
5.5 Job控制器 127
5.5.1创建Job对象 128
5.5.2并行式Job 129
5.5.3 Job扩容 130
5.5.4删除Job 130
5.6 CronJob控制器 131
5.6.1创建CronJob对象 131
5.6.2 CronJob的控制机制 132
5.7 ReplicationController 133
5.8 Pod中断预算 133
5.9本章小结 134
第6章Service和Ingress 136
6.1 Service资源及其实现模型 136
6.1.1 Service资源概述 136
6.1.2虚拟IP和服务代理 138
6.2 Service资源的基础应用 140
6.2.1创建Service资源 140
6.2.2向Service对象请求服务 141
6.2.3 Service会话粘性 142
6.3服务发现 143
6.3.1服务发现概述 143
6.3.2服务发现方式:环境变量 145
6.3.3 ClusterDNS和服务发现 146
6.3.4服务发现方式:DNS 146
6.4服务暴露 147
6.4.1 Service类型 147
6.4.2 NodePort类型的Service资源 149
6.4.3 LoadBalancer类型的Service资源 150
6.4.4 ExternalName Service 151
6.5 Headless类型的Service资源 152
6.5.1创建Headless Service资源 153
6.5.2 Pod资源发现 153
6.6 Ingress资源 154
6.6.1 Ingress和Ingress Controller 154
6.6.2创建Ingress资源 155
6.6.3 Ingress资源类型 157
6.6.4部署Ingress控制器(Nginx) 159
6.7案例:使用Ingress发布tomcat 161
6.7.1准备名称空间 161
6.7.2部署tomcat实例 162
6.7.3创建Service资源 163
6.7.4创建Ingress资源 164
6.7.5配置TLS Ingress资源 165
6.8本章小结 168
第7章 存储卷与数据持久化 169
7.1存储卷概述 169
7.1.1 Kubernetes支持的存储卷类型 170
7.1.2存储卷的使用方式 171
7.2临时存储卷 172
7.2.1 emptyDir存储卷 172
7.2.2 gitRepo存储卷 175
7.3节点存储卷hostPath 176
7.4网络存储卷 178
7.4.1 NFS存储卷 178
7.4.2 RBD存储卷 180
7.4.3 GlusterFS存储卷 182
7.4.4 Cinder存储卷 183
7.5持久存储卷 184
7.5.1创建PV 186
7.5.2创建PVC 188
7.5.3在Pod中使用PVC 190
7.5.4存储类 191
7.5.5 PV和PVC的生命周期 194
7.6 downwardAPI存储卷 196
7.6.1环境变量式元数据注入 197
7.6.2存储卷式元数据注入 199
7.7本章小结 201
第8章 配置容器应用:ConfigMap和Secret 202
8.1容器化应用配置方式 202
8.2通过命令行参数配置容器应用 204
8.3利用环境变量配置容器应用 206
8.4应用程序配置管理及ConfigMap资源 208
8.4.1创建ConfigMap对象 209
8.4.2向Pod环境变量传递ConfigMap对象键值数据 212
8.4.3 ConfigMap存储卷 215
8.4.4容器应用重载新配置 219
8.4.5使用ConfigMap资源的注意事项 220
8.5 Secret资源 221
8.5.1 Secret概述 221
8.5.2创建Secret资源 222
8.5.3 Secret存储卷 224
8.5.4 imagePullSecret资源对象 225
8.6本章小结 226
第9章StatefulSet控制器 227
9.1 StatefulSet概述 227
9.1.1 Statefil应用和Stateless应用 227
9.1.2 StatefulSet控制器概述 228
9.1.3 StatefulSet的特性 230
9.2 StatefulSet基础应用 231
9.2.1创建StatefulSet对象 232
9.2.2 Pod资源标识符及存储卷 234
9.3 StatefulSet资源扩缩容 237
9.4 StatefulSet资源升级 238
9.4.1滚动更新 238
9.4.2暂存更新操作 239
9.4.3金丝雀部署 240
9.4.4分段更新 241
9.4.5其他话题 241
9.5案例:etcd集群 242
9.5.1创建Service资源 242
9.5.2 etcd StatefulSet 243
9.6本章小结 247
第10章 认证、授权与准入控制 248
10.1访问控制概述 248
10.1.1用户账户与用户组 249
10.1.2认证、授权与准入控制基础 250
10.2服务账户管理与应用 253
10.2.1 Service Account自动化 253
10.2.2创建服务账户 255
10.2.3调用imagePullSecret资源对象 256
10.3 X.509数字证书认证 256
10.3.1 Kubernetes中的SSL/TLS认证 257
10.3.2客户端配置文件kubeconfig 259
10.3.3 TLS bootstrapping 机制 262
10.4基于角色的访问控制:RBAC 263
10.4.1 RBAC授权插件 264
10.4.2 Role和RoleBinding 266
10.4.3 ClusterRole和ClusterRoleBin- ding 269
10.4.4聚合型ClusterRole 271
10.4.5面向用户的内建ClusterRole 273
10.4.6其他的内建ClusterRole和ClusterRoleBinding 274
10.5 Kubernetes Dashboard 275
10.5.1部署HTTPS通信的Dashboard 275
10.5.2配置token认证 277
10.5.3配置kubeconfig认证 277
10.6准入控制器与应用示例 279
10.6.1 LimitRange资源与LimitRanger准入控制器 279
10.6.2 ResourceQuota资源与准入控制器 281
10.6.3 PodSecurityPolicy 283
10.7本章小结 288
第11章 网络模型与网络策略 289
11.1 Kubernetes网络模型及CNI插件 289
11.1.1 Docker容器的网络模型 289
11.1.2 Kubernetes网络模型 291
11.1.3 Pod网络的实现方式 293
11.1.4 CNI插件及其常见的实现 295
11.2 flannel网络插件 297
11.2.1 flannel的配置参数 297
11.2.2 VxLAN后端和direct routing 298
11.2.3 host-gw后端 301
11.3网络策略 302
11.3.1网络策略概述 302
11.3.2部署Canal提供网络策略功能 303
11.3.3配置网络策略 305
11.3.4管控入站流量 306
11.3.5管控出站流量 308
11.3.6隔离名称空间 310
11.3.7网络策略应用案例 311
11.4 Calico网络插件 315
11.4.1 Calico工作特性 316
11.4.2 Calico系统架构 318
11.4.3 Calico部署要点 320
11.4.4部署Calico提供网络服务和网络策略 321
11.4.5客户端工具calicoctl 324
11.5本章小结 325
第12章Pod资源调度 326
12.1 Kubernetes调度器概述 326
12.1.1常用的预选策略 327
12.1.2常用的优选函数 330
12.2节点亲和调度 332
12.2.1节点硬亲和性 332
12.2.2节点软亲和性 335
12.3 Pod资源亲和调度 337
12.3.1位置拓扑 338
12.3.2 Pod硬亲和调度 338
12.3.3 Pod软亲和调度 341
12.3.4 Pod反亲和调度 342
12.4污点和容忍度 343
12.4.1定义污点和容忍度 344
12.4.2管理节点的污点 345
12.4.3 Pod对象的容忍度 346
12.4.4问题节点标识 347
12.5 Pod优选级和抢占式调度 347
12.6本章小结 348
第13章Kubernetes系统扩展 349
13.1自定义资源类型(CRD) 349
13.1.1创建CRD对象 350
13.1.2自定义资源格式验证 351
13.1.3子资源 353
13.1.4使用资源类别 355
13.1.5多版本支持 355
13.1.6自定义控制器基础 356
13.2自定义API Server 359
13.2.1自定义API Server概述 359
13.2.2 APIService对象 360
13.3 Kubernetes集群高可用 361
13.3.1 etcd高可用 362
13.3.2 Controller Manager和Scheduler高可用 363
13.4 Kubernetes的部署模式 364
13.4.1关键组件 365
13.4.2常见的部署模式 366
13.5容器时代的DevOps概述 369
13.5.1容器:DevOps协作的基础 369
13.5.2泛型端到端容器应用程序生命周期工作流 370
13.5.3基于Kubernetes的DevOps 371
13.6本章小结 372
第14章 资源指标及HPA控制器 373
14.1资源监控及资源指标 373
14.1.1资源监控及Heapster 374
14.1.2新一代监控架构 376
14.2资源指标及其应用 378
14.2.1部署metrics-server 378
14.2.2 kubectl top命令 380
14.3自定义指标与Prometheus 381
14.3.1 Prometheus概述 382
14.3.2部署Prometheus监控系统 384
14.3.3自定义指标适配器k8s-prometheus-adapter 388
14.4自动弹性缩放 390
14.4.1 HPA概述 390
14.4.2 HPA (vl)控制器 391
14.4.3 HPA (v2)控制器 393
14.5本章小结 397
第15章Helm程序包管理器 398
15.1 Helm基础 398
15.1.1 Helm的核心术语 399
15.1.2 Helm架构 400
15.1.3安装Helm Client 400
15.1.4安装Tiller server 401
15.1.5 Helm快速入门 402
15.2 Helm Charts 405
15.2.1 Charts文件组织结构 405
15.2.2 Chart.yaml文件组织格式 406
15.2.3 Charts中的依赖关系 407
15.2.4模板和值 408
15.2.5其他需要说明的话题 409
15.2.6自定义Charts 410
15.3 Helm实践:部署EFK日志管理系统 415
15.3.1 ElasticSearch集群 416
15.3.2日志采集代理fluentd 421
15.3.3可视化组件Kibana 422
15.4本章小结 424
附录A部署Kubernetes集群 425
附录B部署GlusterFS及Heketi 437