Kubernetes權威指南:從Docker到Kubernetes實踐全接觸(第5版)
定 價:239.8 元
叢書名:博文視點云原生精品叢書
- 作者:龔正 等
- 出版時間:2021/5/1
- ISBN:9787121409981
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.85-62
- 頁碼:992
- 紙張:
- 版次:01
- 開本:16開
Kubernetes是由谷歌開源的容器集群管理系統(tǒng),為容器化應用提供了資源調度、部署運行、服務發(fā)現(xiàn)、擴縮容等一整套功能。Kubernetes也是將“一切以服務(Service)為中心,一切圍繞服務運轉”作為指導思想的創(chuàng)新型產(chǎn)品,它的功能和架構設計自始至終地遵循了這一指導思想。構建在Kubernetes上的系統(tǒng)不僅可以獨立運行在物理機、虛擬機集群或者企業(yè)私有云上,也可以被托管在公有云上。本書總計12章,分別講解Kubernetes的基本概念、實踐指南、核心原理、開發(fā)指南、網(wǎng)絡與存儲、運維指南、新特性演進等內容。全書圖文并茂、內容豐富、由淺入深、講解全面,并圍繞在生產(chǎn)環(huán)境中可能出現(xiàn)的問題,給出了大量典型案例,比如安全配置方案、網(wǎng)絡方案、共享存儲方案、高可用方案及Trouble Shooting技巧等,有很強的實戰(zhàn)指導意義。本書的內容也隨著Kubernetes的版本更新不斷完善,目前涵蓋了Kubernetes從1.0到1.19版本的主要特性,努力為Kubernetes用戶提供全方位的Kubernetes技術指南。無論是對于軟件工程師、軟件架構師、測試工程師、運維工程師、技術經(jīng)理,還是對于資深IT人士,本書都極具參考價值。
·龔正·HPE高級顧問,從事IT工作20余年,在云計算、大數(shù)據(jù)、大型企業(yè)級應用等領域有豐富的咨詢規(guī)劃、架構設計和實施經(jīng)驗,負責過多個大型云平臺的規(guī)劃和建設,是電信、金融、互聯(lián)網(wǎng)等領域的資深專家,也是《Kubernetes權威指南:企業(yè)級容器云實戰(zhàn)》等書的作者。·吳治輝·HPE資深架構師,從事軟件研發(fā)工作20余年,專注于電信軟件和云計算方面的軟件研發(fā),有豐富的大型項目架構設計經(jīng)驗,是業(yè)界少有的具備很強編程能力的資深架構師,也是《ZeroC Ice權威指南》《架構解密:從分布式到微服務》《Kubernetes權威指南:企業(yè)級容器云實戰(zhàn)》《區(qū)塊鏈輕松上手》等書的作者!らZ健勇·HPE高級項目經(jīng)理、總架構師,從事電信行業(yè)系統(tǒng)建設工作20余年,主導了多項電信大型系統(tǒng)的架構設計和管理,對云計算和大數(shù)據(jù)在電信行業(yè)中的應用有豐富的經(jīng)驗,也是《Kubernetes權威指南:企業(yè)級容器云實戰(zhàn)》等書的作者。
第1章 Kubernetes入門 1
1.1 了解Kubernetes 2
1.2 為什么要用Kubernetes 5
1.3 從一個簡單的例子開始 7
1.3.1 環(huán)境準備 8
1.3.2 啟動MySQL服務 8
1.3.3 啟動Tomcat應用 11
1.3.4 通過瀏覽器訪問網(wǎng)頁 12
1.4 Kubernetes的基本概念和術語 14
1.4.1 資源對象概述 14
1.4.2 集群類 15
1.4.3 應用類 19
1.4.4 存儲類 40
1.4.5 安全類 44
第2章 Kubernetes安裝配置指南 47
2.1 系統(tǒng)要求 48
2.2 使用kubeadm工具快速安裝Kubernetes集群 49
2.2.1 安裝kubeadm 50
2.2.2 修改kubeadm的默認配置 50
2.2.3 下載Kubernetes的相關鏡像 51
2.2.4 運行kubeadm init命令安裝Master節(jié)點 52
2.2.5 將新的Node加入集群 57
2.2.6 安裝CNI網(wǎng)絡插件 59
2.2.7 驗證Kubernetes集群是否工作正常 60
2.3 以二進制文件方式安裝Kubernetes安全高可用集群 61
2.3.1 Master高可用部署架構 61
2.3.2 創(chuàng)建CA根證書 62
2.3.3 部署安全的etcd高可用集群 63
2.3.4 部署安全的Kubernetes Master高可用集群 68
2.3.5 部署Node的服務 85
2.3.6 kube-apiserver基于token的認證機制 89
2.4 使用私有鏡像庫的相關配置 90
2.5 Kubernetes的版本升級 91
2.5.1 二進制文件升級 91
2.5.2 使用kubeadm進行集群升級 92
2.6 CRI(容器運行時接口)詳解 94
2.6.1 CRI概述 94
2.6.2 CRI的主要組件 94
2.6.3 Pod和容器的生命周期管理 95
2.6.4 面向容器級別的設計思路 96
2.6.5 嘗試使用新的Docker-CRI來創(chuàng)建容器 97
2.6.6 CRI的進展 98
2.7 kubectl命令行工具用法詳解 98
2.7.1 kubectl用法概述 99
2.7.2 kubectl子命令詳解 99
2.7.3 kubectl可操作的資源對象詳解 103
2.7.4 kubectl的公共參數(shù)說明 105
2.7.5 kubectl格式化輸出 106
2.7.6 kubectl常用操作示例 108
第3章 深入掌握Pod 113
3.1 Pod定義詳解 114
3.2 Pod的基本用法 120
3.3 靜態(tài)Pod 125
3.4 Pod容器共享Volume 126
3.5 Pod的配置管理 129
3.5.1 ConfigMap概述 129
3.5.2 創(chuàng)建ConfigMap資源對象 129
3.5.3 在Pod中使用ConfigMap 137
3.5.4 使用ConfigMap的限制條件 143
3.6 在容器內獲取Pod信息(Downward API) 144
3.6.1 環(huán)境變量方式 144
3.6.2 Volume掛載方式 148
3.6.3 Downward API支持設置的Pod和Container信息 153
3.7 Pod生命周期和重啟策略 154
3.8 Pod健康檢查和服務可用性檢查 155
3.9 玩轉Pod調度 159
3.9.1 Deployment或RC:全自動調度 162
3.9.2 NodeSelector:定向調度 163
3.9.3 NodeAffinity:Node親和性調度 165
3.9.4 PodAffinity:Pod親和與互斥調度策略 167
3.9.5 Taints和Tolerations(污點和容忍) 171
3.9.6 Pod Priority Preemption:Pod優(yōu)先級調度 176
3.9.7 DaemonSet:在每個Node上都調度一個Pod 178
3.9.8 Job:批處理調度 181
3.9.9 Cronjob:定時任務 185
3.9.10 自定義調度器 188
3.9.11 Pod容災調度 190
3.10 Init Container(初始化容器) 192
3.11 Pod的升級和回滾 196
3.11.1 Deployment的升級 196
3.11.2 Deployment的回滾 203
3.11.3 暫停和恢復Deployment的部署操作 205
3.11.4 其他管理對象的更新策略 207
3.12 Pod的擴縮容 209
3.12.1 手動擴縮容機制 209
3.12.2 自動擴縮容機制 211
3.13 使用StatefulSet搭建MongoDB集群 233
3.13.1 前提條件 234
3.13.2 部署StatefulSet 234
3.13.3 查看MongoDB集群的狀態(tài) 238
3.13.4 StatefulSet的常見應用場景 241
第4章 深入掌握Service 245
4.1 Service定義詳解 246
4.2 Service的概念和原理 248
4.2.1 Service的概念 248
4.2.2 Service的負載均衡機制 252
4.2.3 Service的多端口設置 254
4.2.4 將外部服務定義為Service 256
4.2.5 將Service暴露到集群外部 257
4.2.6 Service支持的網(wǎng)絡協(xié)議 260
4.2.7 Kubernetes的服務發(fā)現(xiàn)機制 261
4.2.8 Headless Service的概念和應用 263
4.2.9 端點分片與服務拓撲 265
4.3 DNS服務搭建和配置指南 274
4.3.1 修改每個Node上kubelet的DNS啟動參數(shù) 276
4.3.2 部署CoreDNS服務 276
4.3.3 服務名的DNS解析 280
4.3.4 CoreDNS的配置說明 282
4.4 Node本地DNS緩存 284
4.5 Pod的DNS域名相關特性 291
4.5.1 Pod的DNS域名 291
4.5.2 為Pod自定義hostname和subdomain 292
4.5.3 Pod的DNS策略 294
4.5.4 Pod中的自定義DNS配置 295
4.6 Ingress 7層路由機制 297
4.6.1 一個完整的例子(Ingress Controller+Ingress策略+客戶端訪問) 298
4.6.2 Ingress資源對象詳解 309
4.6.3 Ingress策略配置詳解 315
4.6.4 Ingress的TLS安全設置 319
第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接口 335
5.1.4 集群功能模塊之間的通信 336
5.1.5 API Server網(wǎng)絡隔離的設計 338
5.2 Controller Manager原理解析 339
5.2.1 副本調度控制器 340
5.2.2 Node Controller 342
5.2.3 ResourceQuota Controller 343
5.2.4 Namespace Controller 345
5.2.5 Service Controller與Endpoints Controller 345
5.3 Scheduler原理解析 346
5.3.1 Scheduler的調度流程 347
5.3.2 Scheduler Framework 349
5.3.3 多調度器特性 351
5.4 kubelet運行機制解析 352
5.4.1 節(jié)點管理 352
5.4.2 Pod管理 353
5.4.3 容器健康檢查 354
5.4.4 cAdvisor資源監(jiān)控 355
5.4.5 容器運行時 357
5.5 kube-proxy運行機制解析 359
5.5.1 第一代Proxy 360
5.5.2 第二代Proxy 361
5.5.2 第三代Proxy 362
第6章 深入分析集群安全機制 364
6.1 API Server認證管理 365
6.1.1 HTTPS證書認證 366
6.1.2 HTTP Bearer Token認證 367
6.1.3 OpenID Connect Token第三方認證 368
6.1.4 Authenticating Proxy(認證代理) 372
6.2 API Server授權管理 373
6.2.1 ABAC授權模式詳解 374
6.2.2 Webhook授權模式詳解 377
6.2.3 RBAC授權模式詳解 380
6.2.4 Node授權模式詳解 405
6.3 Admission Control 406
6.4 Service Account 410
6.5 Secret私密憑據(jù) 415
6.6 Pod安全策略 419
6.6.1 PodSecurityPolicy的工作機制 419
6.6.2 PodSecurityPolicy配置詳解 421
6.6.3 PodSecurityPolicy策略示例 427
6.6.4 PodSecurityPolicy的RBAC授權 431
6.6.5 Pod安全設置(Security Context)詳解 436
第7章 網(wǎng)絡原理 445
7.1 Kubernetes網(wǎng)絡模型 446
7.2 Docker網(wǎng)絡基礎 448
7.2.1 網(wǎng)絡命名空間 448
7.2.2 Veth設備對 451
7.2.3 網(wǎng)橋 454
7.2.4 iptables和Netfilter 456
7.2.5 路由 459
7.3 Docker的網(wǎng)絡實現(xiàn) 461
7.3.1 查看Docker啟動后的系統(tǒng)情況 463
7.3.2 查看容器啟動后的網(wǎng)絡配置(容器無端口映射) 465
7.3.3 查看容器啟動后的網(wǎng)絡配置(容器有端口映射) 468
7.3.4 Docker的網(wǎng)絡局限性 469
7.4 Kubernetes的網(wǎng)絡實現(xiàn) 470
7.4.1 容器到容器的通信 470
7.4.2 Pod之間的通信 471
7.5 Pod和Service網(wǎng)絡實戰(zhàn) 474
7.5.1 部署一個RC/Pod 476
7.5.2 發(fā)布一個服務 481
7.6 CNI網(wǎng)絡模型 489
7.6.1 CNM網(wǎng)絡模型簡介 489
7.6.2 CNI網(wǎng)絡模型詳解 490
7.6.3 在Kubernetes中使用網(wǎng)絡插件 507
7.7 開源容器網(wǎng)絡方案 508
7.7.1 Flannel插件的原理和部署示例 508
7.7.2 Open vSwitch插件的原理和部署示例 513
7.7.3 直接路由的原理和部署示例 518
7.7.4 Calico插件的原理和部署示例 521
7.8 Kubernetes的網(wǎng)絡策略 541
7.8.1 網(wǎng)絡策略設置說明 542
7.8.2 Selector功能說明 544
7.8.3 為命名空間配置默認的網(wǎng)絡策略 545
7.8.4 網(wǎng)絡策略應用示例 547
7.8.5 NetworkPolicy的發(fā)展 550
7.9 Kubernetes對IPv4和IPv6雙棧的支持 551
7.9.1 為Kubernetes集群啟用IPv4和IPv6雙棧 551
7.9.2 Pod雙棧IP地址驗證 554
7.9.3 Service雙棧IP地址驗證 557
第8章 存儲原理和應用 560
8.1 Kubernetes存儲機制概述 561
8.1.1 將資源對象映射為存儲卷 562
8.1.2 Node本地存儲卷 569
8.2 持久卷(Persistent Volume)詳解 573
8.2.1 PV和PVC的工作原理 574
8.2.2 PV詳解 581
8.2.3 PVC詳解 587
8.2.4 Pod使用PVC 589
8.2.5 StorageClass詳解 593
8.3 動態(tài)存儲管理實戰(zhàn):GlusterFS 600
8.3.1 準備工作 600
8.3.2 創(chuàng)建GlusterFS管理服務容器集群 600
8.3.3 創(chuàng)建Heketi服務 603
8.3.4 通過Heketi管理GlusterFS集群 607
8.3.5 定義StorageClass 610
8.3.6 定義PVC 610
8.3.7 Pod使用PVC的存儲資源 613
8.4 CSI存儲機制詳解 614
8.4.1 CSI的設計背景 614
8.4.2 CSI的核心組件和部署架構 615
8.4.3 CSI存儲插件應用實戰(zhàn) 617
8.4.4 CSI存儲快照管理 632
8.4.5 CSI的發(fā)展 638
第9章 Kubernetes開發(fā)指南 647
9.1 REST簡述 648
9.2 Kubernetes API詳解 650
9.2.1 Kubernetes API概述 650
9.2.2 Kubernetes API版本的演進策略 658
9.2.3 API Groups(API組) 658
9.2.4 API REST的方法說明 661
9.2.5 API Server響應說明 663
9.3 使用Fabric8訪問Kubernetes API 665
9.3.1 具體應用示例 666
9.3.2 其他客戶端庫 679
9.4 Kubernetes API的擴展 680
9.4.1 使用CRD擴展API資源 681
9.4.2 使用API聚合機制擴展API資源 692
第10章 Kubernetes運維管理 702
10.1 Node管理 703
10.1.1 Node的隔離與恢復 703
10.1.2 Node的擴容 704
10.2 更新資源對象的Label 705
10.3 Namespace:集群環(huán)境共享與隔離 706
10.3.1 創(chuàng)建Namespace 706
10.3.2 定義Context 707
10.3.3 設置工作組在特定Context中工作 708
10.4 Kubernetes資源管理 710
10.4.1 計算資源管理 712
10.4.2 資源配置范圍管理(LimitRange) 722
10.4.3 資源服務質量管理(Resource QoS) 730
10.4.4 資源配額管理(Resource Quotas) 738
10.4.5 ResourceQuota和LimitRange實踐 744
10.4.6 Pod中多個容器共享進程命名空間 754
10.4.7 PID資源管理 757
10.4.8 節(jié)點的CPU管理策略 757
10.4.9 拓撲管理器 761
10.5 資源緊缺時的Pod驅逐機制 766
10.5.1 驅逐時機 766
10.5.2 驅逐閾值 767
10.5.3 節(jié)點狀態(tài) 768
10.5.4 節(jié)點狀態(tài)的振蕩 769
10.5.5 回收Node級別的資源 769
10.5.6 驅逐用戶的Pod 770
10.5.7 資源最少回收量 771
10.5.8 節(jié)點資源緊缺情況下的系統(tǒng)行為 772
10.5.9 可調度的資源和驅逐策略實踐 773
10.5.10 現(xiàn)階段的問題 773
10.6 Pod Disruption Budget(主動驅逐保護) 774
10.7 Kubernetes集群監(jiān)控 778
10.7.1 使用Metrics Server監(jiān)控Node和Pod的CPU和內存使用數(shù)據(jù) 778
10.7.2 Prometheus+Grafana集群性能監(jiān)控平臺搭建 783
10.8 Kubernetes集群日志管理 803
10.8.1 容器應用和系統(tǒng)組件輸出日志的各種場景 803
10.8.2 Fluentd+Elasticsearch+Kibana日志系統(tǒng)部署 807
10.8.3 部署日志采集sidecar工具采集容器日志 821
10.9 Kubernetes的審計機制 822
10.10 使用Web UI(Dashboard)管理集群 826
10.11 Helm:Kubernetes應用包管理工具 839
10.11.1 Helm的整體架構 840
10.11.2 Helm版本說明 840
10.11.3 Helm的安裝 842
10.11.4 Helm的使用 843
10.11.5 Chart說明 857
10.11.6 搭建私有Chart倉庫 858
第11章 Trouble Shooting指南 862
11.1 查看系統(tǒng)Event 863
11.2 查看容器日志 865
11.3 查看Kubernetes服務日志 866
11.4 常見問題 868
11.4.1 由于無法下載pause鏡像導致Pod一直處于Pending狀態(tài) 868
11.4.2 Pod創(chuàng)建成功,但RESTARTS數(shù)量持續(xù)增加 870
11.4.3 通過服務名無法訪問服務 871
11.5 尋求幫助 872
第12章 Kubernetes開發(fā)中的新功能 875
12.1 對Windows容器的支持 876
12.1.1 在Windows Server上安裝Docker 876
12.1.2 在Windows Server上部署Kubernetes Node組件 877
12.1.3 在Windows Server上部署容器應用和服務 886
12.1.4 Kubernetes支持的Windows容器特性、限制和發(fā)展趨勢 892
12.2 對GPU的支持 896
12.2.1 環(huán)境準備 897
12.2.2 在容器中使用GPU資源 900
12.2.3 發(fā)展趨勢 902
12.3 Pod的垂直擴縮容 902
12.3.1 VPA詳解 903
12.3.2 安裝Vertical Pod Autoscaler 906
12.3.3 為Pod設置垂直擴縮容 906
12.3.4 注意事項 907
12.4 Kubernetes生態(tài)系統(tǒng)與演進路線 908
12.4.1 Kubernetes與CNCF 908
12.4.2 Kubernetes的演進路線 910
12.4.3 Kubernetes的開發(fā)模式 914
附錄A Kubernetes核心服務配置詳解 915