Kubernetes 權威指南:從 Docker 到 Kubernetes 實踐全接觸, 4/e

龔正 等

買這商品的人也買了...

商品描述

Kubernetes是由谷歌開源的Docker容器集群管理系統,為容器化的應用提供了資源調度、部署運行、服務發現、擴容及縮容等一整套功能。本書從架構師、開發人員和運維人員的角度,闡述了Kubernetes的基本概念、實踐指南、核心原理、開發指導、運維指南、新特性演進等內容,圖文並茂、內容豐富、由淺入深、講解全面;並圍繞在生產環境中可能出現的問題,給出了大量的典型案例,比如安全配置方案、網絡方案、共享存儲方案、高可用方案及Trouble Shooting技巧等,有很強的實戰指導意義。本書內容隨著Kubernetes的版本更新不斷完善,目前涵蓋了Kubernetes從1.0到1.14版本的主要特性,努力為Kubernetes用戶提供全方位的Kubernetes技術指南。本書源碼已上傳至GitHub的kubeguide/K8sDefinitiveGuide-V4-Sourcecode目錄,可自行下載本書源碼進行練習。無論是對於軟件工程師、測試工程師、運維工程師、軟件架構師、技術經理,還是對於資深IT人士,本書都極具參考價值。

作者簡介

龔正,
HPE高級顧問,擁有近20年IT從業經歷,在雲計算、大數據、大型企業級應用等領域擁有豐富的諮詢規劃、架構設計和實施經驗,負責過多個大型雲平臺的規劃和建設,是電信、金融、互聯網等領域的資深專家,也是《Kubernetes權wei指南:企業級容器雲實戰》等書作者。

吳治輝,
HPE資深架構師,擁有近20年軟件研發經驗,專注於電信軟件和雲計算方面的軟件研發,擁有豐富的大型項目架構設計經驗,是業界少有的具備很強Coding能力的資深架構師,也是《ZeroC Ice權wei指南》《架構解密:從分布式到微服務》《Kubernetes權wei指南:企業級容器雲實戰》《區塊鏈輕鬆上手》等書作者。

崔秀龍,
Istio、Kubernetes項目成員;Istio.io主要貢獻者之一;《Kubernetes權wei指南:企業級容器雲實戰》《深入淺出Istio:Service Mesh快速入門與實踐》等書作者;自動化、馬拉松愛好者。

閆健勇,
HPE高級項目經理、總架構師,擁有近20年電信行業系統建設經驗,主導了多項電信大型系統的架構設計和管理,對於雲計算和大數據在電信行業中的應用擁有豐富的經驗,也是《Kubernetes權wei指南:企業級容器雲實戰》等書作者。

目錄大綱

 

第1章 Kubernetes入門 1
1.1 Kubernetes是什麼 2
1.2 為什麼要用Kubernetes 5
1.3 從一個簡單的例子開始 6
1.3.1 環境準備 7
1.3.2 啟動MySQL服務 7
1.3.3 啟動Tomcat應用 10
1.3.4 通過瀏覽器訪問網頁 12
1.4 Kubernetes的基本概念和術語 13
1.4.1 Master 16
1.4.2 Node 16
1.4.3 Pod 19
1.4.4 Label 24
1.4.5 Replication Controller 28
1.4.6 Deployment 31
1.4.7 Horizontal Pod Autoscaler 34
1.4.8 StatefulSet 36
1.4.9 Service 37
1.4.10 Job 45
1.4.11 Volume 45
1.4.12 Persistent Volume 49
1.4.13 Namespace 51
1.4.14 Annotation 52
1.4.15 ConfigMap 53
1.4.16 小結 54
 

第2章 Kubernetes安裝配置指南 55
2.1 系統要求 56
2.2 使用kubeadm工具快速安裝Kubernetes集群 57
2.2.1 安裝kubeadm和相關工具 57
2.2.2 kubeadm config 58
2.2.3 下載Kubernetes的相關鏡像 59
2.2.4 運行kubeadm init命令安裝Master 59
2.2.5 安裝Node,加入集群 61
2.2.6 安裝網絡插件 62
2.2.7 驗證Kubernetes集群是否安裝完成 63
2.3 以二進制文件方式安裝Kubernetes集群 64
2.3.1 Master上的etcd、kube-apiserver、kube-controller-manager、kube-scheduler服務 66
2.3.2 Node上的kubelet、kube-proxy服務 71
2.4 Kubernetes集群的安全設置 73
2.4.1 基於CA簽名的雙向數字證書認證方式 73
2.4.2 基於HTTP Base或Token的簡單認證方式 78
2.5 Kubernetes集群的網絡配置 80
2.6 內網中的Kubernetes相關配置 80
2.6.1 Docker Private Registry(私有Docker鏡像庫) 80
2.6.2 kubelet配置 81
2.7 Kubernetes的版本升級 81
2.7.1 二進制升級 81
2.7.2 使用kubeadm進行集群升級 82
2.8 Kubernetes核心服務配置詳解 84
2.8.1 公共配置參數 84
2.8.2 kube-apiserver啟動參數 85
2.8.3 kube-controller-manager啟動參數 97
2.8.4 kube-scheduler啟動參數 107
2.8.5 kubelet啟動參數 113
2.8.6 kube-proxy啟動參數 128
2.9 CRI(容器運行時接口)詳解 132
2.9.1 CRI概述 132
2.9.2 CRI的主要組件 133
2.9.3 Pod和容器的生命週期管理 133
2.9.4 面向容器級別的設計思路 135
2.9.5 嘗試使用新的Docker-CRI來創建容器 136
2.9.6 CRI的進展 137
2.10 kubectl命令行工具用法詳解 137
2.10.1 kubectl用法概述 137
2.10.2 kubectl子命令詳解 139
2.10.3 kubectl參數列表 142
2.10.4 kubectl輸出格式 143
2.10.5 kubectl操作示例 145


第3章 深入掌握Pod 149
3.1 Pod定義詳解 150
3.2 Pod的基本用法 156
3.3 靜態Pod 161
3.4 Pod容器共享Volume 162
3.5 Pod的配置管理 165
3.5.1 ConfigMap概述 165
3.5.2 創建ConfigMap資源對象 165
3.5.3 在Pod中使用ConfigMap 173
3.5.4 使用ConfigMap的限制條件 179
3.6 在容器內獲取Pod信息(Downward API) 180
3.6.1 環境變量方式:將Pod信息注入為環境變量 180
3.6.2 環境變量方式:將容器資源信息注入為環境變量 182
3.6.3 Volume掛載方式 184
3.7 Pod生命週期和重啟策略 186
3.8 Pod健康檢查和服務可用性檢查 187
3.9 玩轉Pod調度 190
3.9.1 Deployment或RC:全自動調度 193
3.9.2 NodeSelector:定向調度 194
3.9.3 NodeAffinity:Node親和性調度 197
3.9.4 PodAffinity:Pod親和與互斥調度策略 198
3.9.5 Taints和Tolerations(污點和容忍) 202
3.9.6 Pod Priority Preemption:Pod優先級調度 206
3.9.7 DaemonSet:在每個Node上都調度一個Pod 209
3.9.8 Job:批處理調度 211
3.9.9 Cronjob:定時任務 215
3.9.10 自定義調度器 219
3.10 Init Container(初始化容器) 220
3.11 Pod的升級和回滾 224
3.11.1 Deployment的升級 225
3.11.2 Deployment的回滾 231
3.11.3 暫停和恢復Deployment的部署操作,以完成複雜的修改 234
3.11.4 使用kubectl rolling-update命令完成RC的滾動升級 236
3.11.5 其他管理對象的更新策略 239
3.12 Pod的擴縮容 240
3.12.1 手動擴縮容機制 240
3.12.2 自動擴縮容機制 241
3.13 使用StatefulSet搭建MongoDB集群 264
3.13.1 前提條件 264
3.13.2 創建StatefulSet 265
3.13.3 查看MongoDB集群的狀態 269
3.13.4 StatefulSet的常見應用場景 271


第4章 深入掌握Service 276
4.1 Service定義詳解 277
4.2 Service的基本用法 279
4.2.1 多端口Service 282
4.2.2 外部服務Service 283
4.3 Headless Service 284
4.3.1 自定義SeedProvider 285
4.3.2 通過Service動態查找Pod 286
4.3.3 Cassandra集群中新節點的自動添加 289
4.4 從集群外部訪問Pod或Service 291
4.4.1 將容器應用的端口號映射到物理機 291
4.4.2 將Service的端口號映射到物理機 292
4.5 DNS服務搭建和配置指南 294
4.5.1 在創建DNS服務之前修改每個Node上kubelet的啟動參數 296
4.5.2 創建CoreDNS應用 297
4.5.3 服務名的DNS解析 301
4.5.4 CoreDNS的配置說明 302
4.5.5 Pod級別的DNS配置說明 304
4.6 Ingress:HTTP 7層路由機制 306
4.6.1 創建Ingress Controller和默認的backend服務 307
4.6.2 定義Ingress策略 311
4.6.3 客戶端訪問//mywebsite.com/demo 313
4.6.4 Ingress的策略配置技巧 316
4.6.5 Ingress的TLS安全設置 320


第5章 核心組件運行機制 326
5.1 Kubernetes API Server原理解析 327
5.1.1 Kubernetes API Server概述 327
5.1.2 API Server架構解析 330
5.1.3 獨特的Kubernetes Proxy API接口 334
5.1.4 集群功能模塊之間的通信 336
5.2 Controller Manager原理解析 337
5.2.1 Replication Controller 338
5.2.2 Node Controller 339
5.2.3 ResourceQuota Controller 341
5.2.4 Namespace Controller 343
5.2.5 Service Controller與Endpoints Controller 343
5.3 Scheduler原理解析 344
5.4 kubelet運行機制解析 348
5.4.1 節點管理 349
5.4.2 Pod管理 349
5.4.3 容器健康檢查 351
5.4.4 cAdvisor資源監控 352
5.5 kube-proxy運行機制解析 354


第6章 深入分析集群安全機制 358
6.1 API Server認證管理 359
6.2 API Server授權管理 361
6.2.1 ABAC授權模式詳解 362
6.2.2 Webhook授權模式詳解 365
6.2.3 RBAC授權模式詳解 368
6.3 Admission Control 384
6.4 Service Account 388
6.5 Secret私密憑據 393
6.6 Pod的安全策略配置 396
6.6.1 PodSecurityPolicy的工作機制 397
6.6.2 PodSecurityPolicy配置詳解 399
6.6.3 Pod的安全設置詳解 406


第7章 網絡原理 410
7.1 Kubernetes網絡模型 411
7.2 Docker網絡基礎 413
7.2.1 網絡命名空間 413
7.2.2 Veth設備對 416
7.2.3 網橋 419
7.2.4 iptables和Netfilter 421
7.2.5 路由 424
7.3 Docker的網絡實現 426
7.4 Kubernetes的網絡實現 435
7.4.1 容器到容器的通信 435
7.4.2 Pod之間的通信 436
7.5 Pod和Service網絡實戰 439
7.6 CNI網絡模型 454
7.6.1 CNM模型 454
7.6.2 CNI模型 455
7.6.3 在Kubernetes中使用網絡插件 467
7.7 Kubernetes網絡策略 467
7.7.1 網絡策略配置說明 468
7.7.2 在Namespace級別設置默認的網絡策略 470
7.7.3 NetworkPolicy的發展 472
7.8 開源的網絡組件 472
7.8.1 Flannel 472
7.8.2 Open vSwitch 477
7.8.3 直接路由 483
7.8.4 Calico容器網絡和網絡策略實戰 486


第8章 共享存儲原理 508
8.1 共享存儲機制概述 509
8.2 PV詳解 510
8.2.1 PV的關鍵配置參數 511
8.2.2 PV生命週期的各個階段 515
8.3 PVC詳解 516
8.4 PV和PVC的生命週期 518
8.4.1 資源供應 518
8.4.2 資源綁定 519
8.4.3 資源使用 519
8.4.4 資源釋放 519
8.4.5 資源回收 519
8.5 StorageClass詳解 521
8.5.1 StorageClass的關鍵配置參數 521
8.5.2 設置默認的StorageClass 524
8.6 動態存儲管理實戰:GlusterFS 524
8.6.1 準備工作 525
8.6.2 創建GlusterFS管理服務容器集群 525
8.6.3 創建Heketi服務 528
8.6.4 為Heketi設置GlusterFS集群 530
8.6.5 定義StorageClass 533
8.6.6 定義PVC 534
8.6.7 Pod使用PVC的存儲資源 536
8.7 CSI存儲機制詳解 537
8.7.1 CSI的設計背景 538
8.7.2 CSI存儲插件的關鍵組件和部署架構 539
8.7.3 CSI存儲插件的使用示例 540
8.7.4 CSI的發展 556


第9章 Kubernetes開發指南 560
9.1 REST簡述 561
9.2 Kubernetes API詳解 563
9.2.1 Kubernetes API概述 563
9.2.2 Kubernetes API版本的演進策略 570
9.2.3 API Groups(API組) 571
9.2.4 API REST的方法說明 573
9.2.5 API Server響應說明 575
9.3 使用Java程序訪問Kubernetes API 577
9.3.1 Jersey 577
9.3.2 Fabric8 590
9.3.3 使用說明 591
9.3.4 其他客戶端庫 615
9.4 Kubernetes API的擴展 616
9.4.1 使用CRD擴展API資源 617
9.4.2 使用API聚合機制擴展API資源 626


第10章 Kubernetes集群管理 635
10.1 Node的管理 636
10.1.1 Node的隔離與恢復 636
10.1.2 Node的擴容 637
10.2 更新資源對象的Label 638
10.3 Namespace:集群環境共享與隔離 639
10.3.1 創建Namespace 639
10.3.2 定義Context(運行環境) 640
10.3.3 設置工作組在特定Context環境下工作 641
10.4 Kubernetes資源管理 643
10.4.1 計算資源管理 645
10.4.2 資源配置範圍管理(LimitRange) 655
10.4.3 資源服務質量管理(Resource QoS) 662
10.4.4 資源配額管理(Resource Quotas) 670
10.4.5 ResourceQuota和LimitRange實踐 676
10.4.6 資源管理總結 685
10.5 資源緊缺時的Pod驅逐機制 686
10.5.1 驅逐策略 686
10.5.2 驅逐信號 686
10.5.3 驅逐閾值 688
10.5.4 驅逐監控頻率 689
10.5.5 節點的狀況 689
10.5.6 節點狀況的抖動 690
10.5.7 回收Node級別的資源 690
10.5.8 驅逐用戶的Pod 691
10.5.9 資源最少回收量 692
10.5.10 節點資源緊缺情況下的系統行為 692
10.5.11 可調度的資源和驅逐策略實踐 694
10.5.12 現階段的問題 694
10.6 Pod Disruption Budget(主動驅逐保護) 695
10.7 Kubernetes集群的高可用部署方案 697
10.7.1 手工方式的高可用部署方案 698
10.7.2 使用kubeadm的高可用部署方案 709
10.8 Kubernetes集群監控 717
10.8.1 通過Metrics Server監控Pod和Node的CPU和內存資源使用數據 717
10.8.2 Prometheus+Grafana集群性能監控平臺搭建 720
10.9 集群統一日誌管理 732
10.9.1 系統部署架構 733
10.9.2 創建Elasticsearch RC和Service 733
10.9.3 在每個Node上啟動Fluentd 736
10.9.4 運行Kibana 738
10.10 Kubernetes的審計機制 742
10.11 使用Web UI(Dashboard)管理集群 746
10.12 Helm:Kubernetes應用包管理工具 750
10.12.1 Helm概述 750
10.12.2 Helm的主要概念 751
10.12.3 安裝Helm 751
10.12.4 Helm的常見用法 752
10.12.5 --set的格式和限制 756
10.12.6 更多的安裝方法 757
10.12.7 helm upgrade和helm rollback:應用的更新或回滾 757
10.12.8 helm install/upgrade/rollback命令的常用參數 758
10.12.9 helm delete:刪除一個Release 759
10.12.10 helm repo:倉庫的使用 759
10.12.11 自定義Chart 759
10.12.12 對Chart目錄結構和配置文件的說明 759
10.12.13 對Chart.yaml文件的說明 760
10.12.14 快速製作自定義的Chart 761
10.12.15 搭建私有Repository 761


第11章 Trouble Shooting指導 763
11.1 查看系統Event 764
11.2 查看容器日誌 766
11.3 查看Kubernetes服務日誌 767
11.4 常見問題 769
11.4.1 由於無法下載pause鏡像導致Pod一直處於Pending狀態 769
11.4.2 Pod創建成功,但RESTARTS數量持續增加 771
11.4.3 通過服務名無法訪問服務 772
11.5 尋求幫助 773


第12章 Kubernetes開發中的新功能 777
12.1 對Windows容器的支持 778
12.1.1 Windows Node部署 778
12.1.2 Windows容器支持的Kubernetes特性和發展趨勢 790
12.2 對GPU的支持 791
12.2.1 環境準備 792
12.2.2 在容器中使用GPU資源 795
12.2.3 發展趨勢 797
12.3 Pod的垂直擴縮容 797
12.3.1 前提條件 798
12.3.2 安裝Vertical Pod Autoscaler 798
12.3.3 為Pod設置垂直擴縮容 798
12.3.4 注意事項 800
12.4 Kubernetes的演進路線和開發模式 801