圖書簡介
《Kubernetes從入門到DevOps企業套用實戰》以實戰為主,內容涵蓋容器技術、Kubernetes核心資源以及基於Kubernetes的企業級實踐。從容器基礎知識開始,由淺入深,闡述Kubernetes各個方面的知識,並提供大量實際項目和套用場景。全書共20章,第1~3章講解容器技術,這是理解Kubernetes的必要基礎,主要介紹容器的定義、創建和管理容器、容器網路和存儲等方面的知識。第4章講解如何使用Kubeadm和二進制檔案安裝高可用Kubernetes集群。第5~12章講解Kubernetes的核心資源,包括Pod、Deployment、Service、Ingress等資源的定義、使用和管理方法,以及實際套用場景。第13~20章講解基於Kubernetes的企業實踐,介紹如何使用Kubernetes解決實際問題,包括使用Kubernetes進行應用程式的部署、容器雲平台的構建、流量治理、監控、自動化擴縮容和灰度發布等項目與案例。
《Kubernetes從入門到DevOps企業套用實戰》基於Kubernetes 1.27新版本編寫(本書的內容也適合1.20之後的所有版本),從零基礎開始,涵蓋理論知識、企業級案例,以及自動化運維DevOps體系和一些大廠架構設計思路,適合雲原生領域的從業者、Kubernetest初學者、運維和開發人員使用,也可以作為企業內訓、培訓機構和大中專院校的教學用書。
圖書目錄
目 錄
第1章 Docker初探 1
1.1 Docker概述 1
1.1.1 Docker是什麼 1
1.1.2 Docker的版本 2
1.1.3 學習Docker的方式 2
1.2 Docker的組成與特點 2
1.2.1 Docker的組成 2
1.2.2 Docker的特點 4
1.3 安裝和配置Docker 5
1.3.1 配置主機名 5
1.3.2 關閉Firewalld防火牆 6
1.3.3 關閉SELinux 6
1.3.4 配置時間同步 7
1.3.5 編寫計畫任務 7
1.3.6 重啟crond服務使計畫任務生效 8
1.3.7 安裝基礎軟體包 8
1.3.8 安裝Docker-CE 9
1.3.9 修改核心參數 11
1.3.10 配置Docker鏡像加速器 13
1.4 Docker鏡像與容器 14
1.4.1 Docker鏡像 14
1.4.2 Docker容器 17
1.5 案例:通過Docker部署Nginx服務 24
1.5.1 基於CentOS鏡像運行一個Docker容器 24
1.5.2 查看Docker容器是否正常運行 24
1.5.3 在Docker中安裝Nginx容器 25
1.5.4 在Docker容器中通過yum安裝Nginx 26
1.6 本章小結 28
第2章 Dockerfile構建企業級鏡像 29
2.1 Dockerfile語法詳解 29
2.2 Dockerfile構建企業級鏡像 43
2.2.1 案例:Dockerfile構建Nginx鏡像 43
2.2.2 案例:Dockerfile構建Tomcat鏡像 48
2.3 本章小結 50
第3章 Docker私有鏡像倉庫Harbor 51
3.1 Harbor的概念及證書籤發 51
3.2 安裝Harbor 53
3.3 Harbor圖形界面使用說明 57
3.4 測試使用Harbor私有鏡像倉庫 59
3.5 Harbor高可用 62
3.6 本章小結 63
第4章 Kubeadm快速搭建Kubernetes集群 64
4.1 初始化實驗環境 65
4.1.1 配置靜態IP位址 67
4.1.2 配置機器主機名 68
4.1.3 配置主機hosts檔案 68
4.1.4 配置控制節點到工作節點無密碼登錄 68
4.1.5 關閉交換分區 69
4.1.6 修改機器核心參數 70
4.1.7 關閉Firewalld防火牆 72
4.1.8 關閉SELinux 72
4.1.9 配置安裝Docker和Containerd需要的阿里雲的線上yum源 73
4.1.10 配置安裝Kubernetes組件需要的阿里雲的線上yum源 74
4.1.11 配置時間同步 75
4.1.12 安裝Docker-CE和Containerd服務 76
4.2 安裝Kubernetes集群 80
4.2.1 安裝初始化Kubernetes集群需要的軟體包 80
4.2.2 Kubeadm初始化Kubernetes集群 81
4.2.3 配置Kubectl的配置檔案config 83
4.3 擴容Kubernetes集群 85
4.3.1 添加第一個工作節點 85
4.3.2 添加第二個工作節點 86
4.4 安裝Kubernetes網路外掛程式Calico 88
4.4.1 安裝Calico 88
4.4.2 Calico的配置 89
4.4.3 calico-kube-controllers解析 94
4.5 測試Kubernetes集群是否健康 95
4.5.1 測試在Kubernetes中創建的Pod是否可以正常訪問網路 95
4.5.2 測試CoreDNS是否正常 96
4.5.3 延長證書 96
4.6 本章小結 99
第5章 Kubernetes核心資源Pod 100
5.1 Pod是什麼 100
5.1.1 Pod基本介紹 100
5.1.2 Pod如何管理多個容器 101
5.1.3 Pod網路 102
5.1.4 Pod存儲 102
5.2 Pod的工作方式 103
5.2.1 自主式Pod 103
5.2.2 控制器管理的Pod 107
5.3 如何創建一個Pod資源 111
5.3.1 通過YAML檔案創建Pod資源 112
5.3.2 Pod資源清單編寫技巧 113
5.3.3 創建一個完整的Pod資源 141
5.3.4 和Pod相關的命令解讀 144
5.4 nodeName和nodeSelector 146
5.4.1 nodeName實例 147
5.4.2 nodeSelector實例 148
5.5 親和性、污點和容忍度 149
5.5.1 節點親和性 149
5.5.2 Pod親和性和反親和性 154
5.5.3 污點和容忍度 160
5.6 Pod生命周期和健康探測 165
5.6.1 初始化容器initcontainer 166
5.6.2 存活探測 167
5.6.3 就緒探測 170
5.6.4 容器鉤子 172
5.7 本章小結 174
第6章 ReplicaSet和Deployment控制器管理Pod 175
6.1 ReplicaSet如何管理Pod 176
6.1.1 ReplicaSet概述 176
6.1.2 ReplicaSet資源清單檔案的編寫技巧 176
6.2 ReplicaSet管理Pod案例:部署Guestbook留言板 178
6.3 ReplicaSet管理Pod實例:擴容、縮容、更新 180
6.4 Deployment如何管理Pod 183
6.4.1 Deployment概述 183
6.4.2 Deployment如何管理ReplicaSet和Pod 184
6.5 Deployment資源清單檔案的編寫技巧 185
6.5.1 查看Deployment資源對象YAML檔案的組成 186
6.5.2 查看Deployment下的spec欄位 186
6.6 Deployment管理Pod案例解析 188
6.7 Deployment管理Pod:擴容和縮容 190
6.7.1 電商網站訪問量急增——擴容Pod 190
6.7.2 電商網站淡季或業務低峰期——縮容Pod 191
6.8 基於Deployment實現Pod滾動更新——WebApp套用版本升級 192
6.9 本章小結 195
第7章 Service四層負載均衡 197
7.1 Service的概念與原理 197
7.1.1 Service基本介紹 197
7.1.2 Kubernetes集群中的3類IP位址 198
7.2 創建Service資源 200
7.2.1 創建Service資源的方法 200
7.2.2 案例:用YAML檔案創建Service資源 200
7.2.3 查看定義Service資源需要的欄位 202
7.2.4 Service的4種Type類型 203
7.2.5 Service的連線埠定義 206
7.2.6 創建Service:類型是ClusterIP 207
7.2.7 創建Service:類型是NodePort 209
7.2.8 創建Service:類型是ExternalName 212
7.3 本章小結 215
第8章 Kubernetes持久化存儲 216
8.1 Kubernetes支持的持久化存儲類型 216
8.1.1 Kubernetes持久化存儲:emptyDir案例 218
8.1.2 Kubernetes持久化存儲:hostPath案例 218
8.1.3 Kubernetes持久化存儲:NFS案例 219
8.2 Kubernetes持久化存儲:PV和PVC 221
8.2.1 PV和PVC概述 221
8.2.2 創建Pod,使用PVC作為持久化存儲卷 225
8.3 Kubernetes存儲類:StorageClass 228
8.4 本章小結 231
第9章 Kubernetes控制器:StatefulSet 232
9.1 StatefulSet控制器的概念和原理 233
9.1.1 為什麼使用Headless Service 233
9.1.2 為什麼使用volumeClaimTemplate 233
9.2 StatefulSet資源清單檔案的編寫技巧 235
9.2.1 定義API版本和資源類型 235
9.2.2 定義StatefulSet的spec欄位 235
9.2.3 定義Pod模板 236
9.3 StatefulSet使用案例:部署Web站點 236
9.3.1 創建存儲類 236
9.3.2 創建StatefulSet資源 237
9.3.3 查看StatefulSet是否創建成功 238
9.3.4 查看StatefulSet管理的Pod 238
9.4 StatefulSet管理Pod:擴容、縮容和更新案例 239
9.4.1 案例1:擴容 239
9.4.2 案例2:縮容 239
9.4.3 案例3:更新 239
9.5 本章小結 240
第10章 Kubernetes控制器:DaemonSet 241
10.1 DaemonSet如何管理Pod 242
10.2 DaemonSet資源創建方法 242
10.2.1 DaemonSet資源清單的定義方法 242
10.2.2 DaemonSet使用案例:部署日誌收集組件Fluentd 244
10.2.3 DaemonSet管理Pod:滾動更新 247
10.3 本章小結 248
第11章 配置管理中心ConfigMap和Secret 250
11.1 ConfigMap概述 251
11.2 ConfigMap的創建方法 251
11.3 案例:使用ConfigMap維護Pod中容器的配置信息 253
11.3.1 通過環境變數引入:configMapKeyRef 253
11.3.2 通過環境變數引入:使用envfrom 255
11.3.3 把ConfigMap做成Volume,掛載到Pod 256
11.4 Secret基本介紹及使用案例 257
11.5 本章小結 259
第12章 Ingress和Ingress Controller 260
12.1 Ingress和Ingress Controller基本介紹和安裝 260
12.1.1 使用Ingress Controller代理Kubernetes內部Pod的流程 260
12.1.2 安裝Ingress Controller 262
12.2 案例:測試Ingress HTTP代理Tomcat 262
12.3 本章小結 266
第13章 搭建Prometheus+Grafana監控平台 267
13.1 Prometheus基本介紹 267
13.1.1 Prometheus的特點 268
13.1.2 Prometheus生態系統常用組件介紹 269
13.1.3 Prometheus採集數據流程 270
13.1.4 Prometheus查詢語言PromQL 271
13.2 安裝和配置Prometheus 273
13.2.1 安裝和配置Prometheus 273
13.2.2 監控利器Node-Exporter 283
13.3 可視化UI界面Grafana的安裝和配置 287
13.3.1 Grafana介紹 287
13.3.2 安裝Grafana 287
13.3.3 Grafana界面接入Prometheus數據源 290
13.4 配置Alertmanager傳送告警 297
13.4.1 案例:配置Alertmanager傳送告警到QQ信箱 297
13.4.2 案例:配置Alertmanager傳送告警到釘釘群組 307
13.5 本章小結 308
第14章 基於Jenkins+Kubernetes構建企業級DevOps容器雲平台 309
14.1 Kubernetes助力DevOps企業落地實踐 309
14.1.1 DevOps的基本概念 309
14.1.2 Kubernetes在DevOps中的核心作用 311
14.1.3 在Kubernetes集群安裝和配置Jenkins 312
14.1.4 案例:使用Jenkins將代碼自動化部署到Kubernetes集群 328
14.2 Jenkins Pipeline語法介紹 335
14.2.1 Jenkins Pipeline介紹 335
14.2.2 為什麼用Jenkins Pipeline 335
14.2.3 Jenkins Pipeline聲明式語法 335
14.2.4 Jenkins Pipeline腳本式語法 344
14.3 本章小結 346
第15章 新一代服務格線Istio結合Kubernetes實現流量治理 347
15.1 認識Istio服務格線 347
15.1.1 Istio服務格線概述 347
15.1.2 Istio的核心特性 348
15.1.3 Istio的架構與功能 350
15.2 Istio組件詳解 353
15.2.1 Pilot 353
15.2.2 Envoy 354
15.2.3 Citadel 355
15.2.4 Galley 355
15.2.5 其他組件 356
15.3 在Kubernetes平台安裝Istio 356
15.3.1 準備安裝Istio的壓縮檔 356
15.3.2 安裝Istio 357
15.4 案例:Istio結合Kubernetes部署線上書店Bookinfo 359
15.4.1 線上書店(Bookinfo)項目介紹 359
15.4.2 線上書店的部署 360
15.4.3 啟動套用服務 360
15.4.4 卸載Bookinfo服務 364
15.5 通過Istio實現灰度發布 366
15.5.1 什麼是灰度發布 366
15.5.2 使用Istio進行金絲雀發布 366
15.6 Istio流量治理實例 370
15.6.1 斷路器 370
15.6.2 逾時 376
15.6.3 故障注入和重試 383
15.7 分散式追蹤系統Jaeger 386
15.8 分散式追蹤系統Kiali 390
15.9 本章小結 392
第16章 高並發場景下基於Kubernetes實現自動擴縮容 393
16.1 Metrics Server在自動擴縮容中的核心作用 393
16.1.1 Metrics Server的部署方式 394
16.1.2 Metrics Server的具體套用 399
16.2 水平Pod自動擴縮容HPA 400
16.2.1 HPA基本介紹 400
16.2.2 HPA設定和使用案例 400
16.3 垂直Pod自動擴縮容VPA 403
16.3.1 VPA基本介紹 403
16.3.2 VPA設定和使用案例 404
16.4 本章小結 408
第17章 基於Kubernetes搭建高吞吐量的日誌收集平台 409
17.1 常見的日誌收集方案對比分析 409
17.2 EFK案例分享——組件部署 411
17.2.1 步驟一:部署Elasticsearch 411
17.2.2 步驟二:部署Fluentd服務 414
17.2.3 步驟三:部署Kibana服務 417
17.2.4 步驟四:驗證 419
17.3 ELK案例分享——步驟說明 420
17.3.1 創建命名空間 420
17.3.2 創建持久卷和持久卷聲明 420
17.3.3 創建Elasticsearch集群 421
17.3.4 創建Logstash集群 423
17.3.5 創建Kibana 425
17.4 EFK+Logstash+Kafka案例分享 426
17.4.1 安裝和配置Fluentd 426
17.4.2 創建Fluentd配置檔案 427
17.4.3 安裝和配置Kafka和Logstash 428
17.4.4 安裝和配置Elasticsearch和Kibana 429
17.4.5 測試EFK日誌收集系統 430
17.5 本章小結 431
第18章 在Kubernetes集群部署代碼和服務 432
18.1 在Kubernetes集群部署Go代碼 433
18.2 在Kubernetes集群部署Python代碼 434
18.3 在Kubernetes集群部署Nginx服務 437
18.3.1 步驟一:編寫Nginx部署所需的Deployment和Service資源定義檔案 437
18.3.2 步驟二:在Kubernetes集群上部署Nginx服務 438
18.4 在Kubernetes集群部署Tomcat服務 438
18.4.1 步驟一:創建命名空間 439
18.4.2 步驟二:部署Tomcat服務 439
18.5 本章小結 440
第19章 K3s實際套用場景及案例分享 442
19.1 K3s套用領域 442
19.1.1 邊緣計算 442
19.1.2 嵌入式設備 443
19.1.3 雲原生領域 444
19.1.4 多雲管理 444
19.2 K3s實戰案例分享 445
19.3 安裝和使用K3s 445
19.3.1 安裝K3s 445
19.3.2 使用K3s 446
19.4 本章小結 447
第20章 Kubernetes原生的CI/CD工具Tekton 449
20.1 Tekton基本介紹和案例演示 449
20.1.1 Tekton概述 449
20.1.2 使用Tekton構建和測試應用程式 451
20.2 使用Tekton構建CI/CD流水線最佳實踐 454
20.2.1 創建應用程式代碼 454
20.2.2 創建Docker鏡像 455
20.2.3 創建Tekton資源 455
20.2.4 執行CI/CD流程 458
20.3 本章小結 460