前言
第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 Stateful應用和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(v1)控製器 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
· · · · · · (
收起)