內容提要
Kubernetes 是由谷歌開源的Docker 容器集群管理系統,為容器化的套用提供了資源調度、部署運行、服務發現、擴容及縮容等一整套功能。《Kubernetes 權威指南:從Docker 到Kubernetes 實踐全接觸(紀念版)》從架構師、開發人員和運維人員的角度,闡述了Kubernetes 的基本概念、實踐指南、核心原理、開發指導、運維指南及源碼分析等內容,圖文並茂、內容豐富、由淺入深、講解全面;圍繞著生產環境中可能出現的問題,給出了大量的典型案例,比如安全配置、網路方案、共享存儲方案、高可用性方案及Trouble Shooting 技巧等,有很強的實戰指導意義。《Kubernetes權威指南:從Docker到Kubernetes實踐全接觸(紀念版)》隨著Kubernetes 版本更新不斷完善,目前涵蓋了Kubernetes 從v1.0 到v1.6 版本的全部特性,盡力為Kubernetes 用戶提供全方位的指南。
無論是對於軟體工程師、測試工程師、運維工程師、軟體架構師、技術經理,還是對於資深 IT 人士來說,《Kubernetes權威指南:從Docker到Kubernetes實踐全接觸(紀念版)》都極具參考價值。
目錄
第1章 Kubernetes入門 1
1.1 Kubernetes是什麼 1
1.2 為什麼要用Kubernetes 4
1.3 從一個簡單的例子開始 5
1.3.1 環境準備 6
1.3.2 啟動MySQL服務 6
1.3.3 啟動Tomcat套用 9
1.3.4 通過瀏覽器訪問網頁 10
1.4 Kubernetes基本概念和術語 12
1.4.1 Master 12
1.4.2 Node 12
1.4.3 Pod 15
1.4.4 Label(標籤) 18
1.4.5 Replication Controller 22
1.4.6 Deployment 26
1.4.7 Horizontal Pod Autoscaler 28
1.4.8 StatefulSet 29
1.4.9 Service(服務) 30
1.4.10 Volume(存儲卷) 37
1.4.11 Persistent Volume 41
1.4.12 Namespace(命名空間) 42
1.4.13 Annotation(註解) 43
1.4.14 小結 44
第2章 Kubernetes實踐指南 45
2.1 Kubernetes安裝與配置 45
2.1.1 系統要求 45
2.1.2 使用kubeadm工具快速安裝Kubernetes集群 46
2.1.3 以二進制檔案方式安裝Kubernetes集群 51
2.1.4 Kubernetes集群的安全設定 59
2.1.5 Kubernetes集群的網路配置 64
2.1.6 區域網路中的Kubernetes相關配置 64
2.1.7 Kubernetes的版本升級 65
2.1.8 Kubernetes核心服務配置詳解 66
2.2 kubectl命令行工具用法詳解 86
2.2.1 kubectl用法概述 86
2.2.2 kubectl子命令詳解 88
2.2.3 kubectl參數列表 90
2.2.4 kubectl輸出格式 90
2.2.5 kubectl操作示例 92
2.3 深入掌握Pod 93
2.3.1 Pod定義詳解 93
2.3.2 Pod的基本用法 98
2.3.3 靜態Pod 103
2.3.4 Pod容器共享Volume 104
2.3.5 Pod的配置管理 106
2.3.6 在容器內獲取Pod信息(Downward API) 119
2.3.7 Pod生命周期和重啟策略 124
2.3.8 Pod健康檢查 125
2.3.9 玩轉Pod調度 127
2.3.10 Init Container(初始化容器) 149
2.3.11 Pod的升級和回滾 152
2.3.12 Pod的擴容和縮容 166
2.3.13 使用StatefulSet搭建MongoDB集群 171
2.4 深入掌握Service 180
2.4.1 Service定義詳解 181
2.4.2 Service基本用法 182
2.4.3 Headless Service 187
2.4.4 集群外部訪問Pod或Service 192
2.4.5 DNS服務搭建指南 196
2.4.6 自定義DNS和上游DNS伺服器 204
2.4.7 Ingress:HTTP 7層路由機制 208
第3章 Kubernetes核心原理 226
3.1 Kubernetes API Server 原理分析 226
3.1.1 Kubernetes API Server概述 226
3.1.2 獨特的Kubernetes Proxy API接口 229
3.1.3 集群功能模組之間的通信 230
3.2 Controller Manager 原理分析 231
3.2.1 Replication Controller 232
3.2.2 Node Controller 234
3.2.3 ResourceQuota Controller 235
3.2.4 Namespace Controller 237
3.2.5 Service Controller與Endpoint Controller 237
3.3 Scheduler原理分析 238
3.4 kubelet運行機制分析 242
3.4.1 節點管理 242
3.4.2 Pod管理 243
3.4.3 容器健康檢查 244
3.4.4 cAdvisor資源監控 245
3.5 kube-proxy 運行機制分析 247
3.6 深入分析集群安全機制 251
3.6.1 API Server認證管理(Authentication) 251
3.6.2 API Server授權管理(Authorization) 253
3.6.3 Admission Control(準入控制) 272
3.6.4 Service Account 274
3.6.5 Secret私密憑據 279
3.7 網路原理 282
3.7.1 Kubernetes網路模型 282
3.7.2 Docker的網路基礎 284
3.7.3 Docker的網路實現 296
3.7.4 Kubernetes的網路實現 304
3.7.5 Pod和Service網路實戰 308
3.7.6 CNI網路模型 321
3.7.7 Kubernetes網路策略 331
3.7.8 開源的網路組件 333
3.8 共享存儲原理 363
3.8.1 共享存儲機制概述 363
3.8.2 PV詳解 364
3.8.3 PVC詳解 368
3.8.4 PV和PVC的生命周期 370
3.8.5 StorageClass詳解 373
3.8.6 動態存儲管理實戰:GlusterFS 376
第4章 Kubernetes開發指南 388
4.1 REST簡述 388
4.2 Kubernetes API詳解 390
4.2.1 Kubernetes API概述 390
4.2.2 API版本 395
4.2.3 API Groups(API組) 395
4.2.4 API方法說明 397
4.2.5 API回響說明 398
4.3 使用Java程式訪問Kubernetes API 400
4.3.1 Jersey 401
4.3.2 Fabric8 412
4.3.3 使用說明 413
第5章 Kubernetes運維指南 434
5.1 Kubernetes集群管理指南 434
5.1.1 Node的管理 434
5.1.2 更新資源對象的Label 436
5.1.3 Namespace:集群環境共享與隔離 437
5.1.4 Kubernetes資源管理 441
5.1.5 資源緊缺時的Pod驅逐機制 475
5.1.6 Pod Disruption Budget(主動驅逐保護) 483
5.1.7 Kubernetes集群的高可用部署方案 485
5.1.8 Kubernetes集群監控 496
5.1.9 集群統一日誌管理 513
5.1.10 Kubernetes審計日誌(Audit Log) 522
5.1.11 使用Web UI(Dashboard)管理集群 523
5.1.12 Helm:Kubernetes套用包管理工具 527
5.2 Trouble Shooting指導 538
5.2.1 查看系統Event事件 538
5.2.2 查看容器日誌 540
5.2.3 查看Kubernetes服務日誌 541
5.2.4 常見問題 542
5.2.5 尋求幫助 546
5.3 Kubernetes開發中的新功能 546
5.3.1 Pod Preset(運行時參數注入策略) 546
5.3.2 Cluster Federation(集群聯邦) 553
5.3.3 容器運行時接口(Container Runtime Interface-CRI) 557
5.3.4 對GPU的支持 561
5.3.5 Kubernetes的演進路線(Roadmap)和開發模式 565
第6章 Kubernetes源碼導讀 568
6.1 Kubernetes源碼結構和編譯步驟 568
6.2 kube-apiserver進程源碼分析 572
6.2.1 進程啟動過程 572
6.2.2 關鍵代碼分析 574
6.2.3 設計總結 589
6.3 kube-controller-manager進程源碼分析 592
6.3.1 進程啟動過程 592
6.3.2 關鍵代碼分析 595
6.3.3 設計總結 603
6.4 kube-scheduler進程源碼分析 605
6.4.1 進程啟動過程 605
6.4.2 關鍵代碼分析 610
6.4.3 設計總結 617
6.5 kubelet進程源碼分析 619
6.5.1 進程啟動過程 619
6.5.2 關鍵代碼分析 624
6.5.3 設計總結 647
6.6 kube-proxy進程源碼分析 648
6.6.1 進程啟動過程 648
6.6.2 關鍵代碼分析 650
6.6.3 設計總結 665
6.7 kubectl進程源碼分析 666
6.7.1 kubectl create命令 667
6.7.2 rolling-update命令 671