目 錄
第 一部分 基礎知識
第 1章 容器的發(fā)展史 3
1.1 開發(fā)過程的發(fā)展 3
1.1.1 瀑布式開發(fā) 3
1.1.2 敏捷式開發(fā) 4
1.1.3 DevOps 5
1.2 應用架構的發(fā)展 6
1.2.1 單體架構與多層架構 6
1.2.2 微服務架構 7
1.3 部署/打包的發(fā)展 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系統(tǒng)上安裝
基礎組件 28
3.1.2 在CentOS以及RHEL和Fedora
系統(tǒng)上安裝基礎組件 28
3.2 Master的安裝與配置 29
3.2.1 如何解決CPU數(shù)量
不夠的問題 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 創(chuàng)建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創(chuàng)建容器的方式 45
4.3.2 Pod組織容器的方式 50
4.4 Pod的生命周期 55
4.4.1 Pod的相位 55
4.4.2 Pod的重啟策略 56
4.4.3 Pod的創(chuàng)建與銷毀過程 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—
發(fā)布Pod提供的服務 103
6.1 Service 103
6.1.1 向外發(fā)布—通過
ClusterIP發(fā)布 107
6.1.2 向外發(fā)布—通過
NodePort發(fā)布 110
6.1.3 向外發(fā)布—通過
LoadBalancer發(fā)布 112
6.1.4 向內發(fā)布—通過
無頭Service 115
6.1.5 向內發(fā)布—通過
ExternalName 117
6.1.6 服務發(fā)現(xiàn) 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 節(jié)點選擇調度 211
8.4.3 節(jié)點親和性調度 212
8.4.4 Pod親和性與反親和性調度 215
8.4.5 污點與容忍度 219
8.4.6 優(yōu)先級與搶占式調度 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 狀態(tài)操作 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 資源監(jiān)控—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 無狀態(tài)項目的部署案例 281
11.2 有狀態(tài)項目的部署案例 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 發(fā)布版本的更新、
回滾和刪除 308
11.3.6 使用Helm部署的項目案例 310
11.4 本章小結 313