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