杜 寬,Kubernetes實踐者,目前在某集團公司負責云原生相關工作,是Linux基金會開源軟件學園官方導師,專注於容器、K8s、服務網格、Serverless、DevOps、云原生等技
本書不僅介紹了Kubernetes生產級高可用架構、Kubernetes基礎及進階知識、高級調度、服務發布以及稍複雜的Kubernetes持久化及權限管理、包管理工具Helm和Operator的使用,同時也介紹了基於Prometheus的監控告警、基於Jenkins+Harbor+GitLab+Kubernetes實現DevOps平臺建設,還介紹了Kubernetes周邊一些CNCF孵化的項目等,涵蓋了大部分技術人員都會遇到的Kubernetes技術難點及企業中一些比較常見的技術方案。特別是,書中的案例都來自於生產一線,並經過多次驗證,可以直接用於生產環境。
Kubernetes(簡稱K8s)發布至今已經被越來越多的公司所接納,其受歡迎程度更是超過了人們的想象,已逐漸成為很多公司的標配,尤為重要的是掌握Kubernetes幾乎成為所有互聯網技術人員必備的一項技能。
Kubernetes的誕生象徵著下一代云計算的時代已經來臨,它的出現讓很多應用和架構逐步實現了統一化、標準化、簡單化,降低了公司因為架構設計不合理帶來的問題,而且也大大減少了運維成本,使用Kubernetes可以輕輕鬆松管理上千臺服務器、上萬個容器節點。雖然Kubernetes給我們帶來了諸多便利,減少了超過半數的應用運維工作,但是迄今為止學習Kubernetes依舊是一件很困難的事情。首先是它的核心概念頗多,學習起來比較乏味,而且部分概念難以理解,從而導致學習成本甚高;其次Kubernetes涉及的領域也比較廣泛,了解過CNCF的讀者可能知道,以Kubernetes為中心展開的周邊云原生的生態是多麼宏偉且龐大的一張藍圖。由此看來,學習Kubernetes並不是一件容易的事情,也並非是一項兩三天就能掌握的技術,但這些並不意味著Kubernetes是一艘不可駕駛的“船舶”,我們只需要找到方向由淺入深,系統地學習Kubernetes的設計理念及周邊比較重要且常用的知識,這樣下來無論公司有什麼樣的需求場景,無論今後再學習什麼樣的周邊生態,都不再是一件困難的事情。而本書的出發點就是為了解決上述問題,讓讀者更加清晰明了、全面、系統地學習Kubernetes知識及周邊的一些常用工具的使用,從而成為一位合格的Kubernetes全棧工程師及DevOps工程師。
本書根據不同的知識結構將內容劃分為7個板塊,共18章,分別為安裝篇、基礎篇、進階篇、高級篇、運維篇、DevOps篇和拓展篇。
第1、2章為安裝篇,主要介紹Kubernetes集群高可用安裝,讓讀者掌握如何高效地搭建一套高可用的Kubernetes集群並應用於企業實踐,當然對於Kubernetes的安裝不僅限於書中的版本(本書使用的Kubernetes版本為1.22),其他版本的安裝步驟與此類似。
第3~7章為基礎篇,將著重介紹本書的主角Kubernetes,同時也會介紹Docker的基礎和鏡像的製作優化等。Kubernetes部分包含Kubernetes的基礎概念(Master、Node和Pod)、核心調度資源(Deployment、StatefulSet、DaemonSet、CronJob)、服務發布(Service和Ingress)和配置管理(ConfigMap和Secret)。
第8~11章為進階篇,主要介紹Kubernetes的持久化存儲、動態存儲、CSI、高級調度(容忍、污點和親和力)、服務質量、權限管理、Kubernetes資源配額管理。
第12、13章為高級篇,主要介紹云原生存儲、中間件容器化、Operator和Helm的使用。
第14~16章為運維篇,主要介紹針對Kubernetes的日志收集(EFK)、監控告警(Prometheus和Grafana)、生產級服務發布Ingress實踐。
第17章為DevOps篇,主要介紹基於Kubernetes、Jenkins、Harbor、GitLab等工具建設生產級的DevOps平臺,實現開發、測試、UAT、生產環境的流水線設計。
第18章為拓展篇,主要介紹云原生基石——服務網格Istio的使用,實現對Kubernetes內部服務的細粒度流量管理。
綜上,本書不僅介紹了Kubernetes生產級高可用架構、Kubernetes基礎及進階知識、高級調度、服務發布以及稍複雜的Kubernetes持久化及權限管理、包管理工具Helm和Operator的使用,同時也介紹了基於Prometheus的監控告警、基於Jenkins+Harbor+GitLab+Kubernetes實現DevOps平臺建設,還介紹了Kubernetes周邊一些CNCF孵化的項目等,涵蓋了大部分技術人員都會遇到的Kubernetes技術難點及企業中一些比較常見的技術方案。特別是,書中的案例都來自於生產一線,並經過多次驗證,可以直接用於生產環境。
本書既適合從零開始的讀者,也適合運維人員、開發人員和架構師使用。
本書還配備了完整的命令代碼,請掃描以下二維碼獲取:
讀者如果在使用本書的過程中遇到問題,可登錄GitHub尋求解答或發郵件,郵件主題為“云原生Kubernetes全棧架構師 實戰”。
限於筆者水平,書中難免出現疏漏,敬請業界高手與專家不吝指教。
杜寬
2022.1.1
第1篇 安 裝 篇
第1章 Kubeadm安裝高可用K8s集群 2
1.1 基本環境配置 2
1.2 內核配置 5
1.3 K8s組件和Runtime安裝 7
1.3.1 Containerd作為Runtime 7
1.3.2 Docker作為Runtime 9
1.3.3 安裝Kubernetes組件 9
1.4 高可用組件安裝 10
1.5 集群初始化 14
1.6 Master實現高可用 17
1.7 Node節點的配置 17
1.8 Token過期處理 18
1.9 Calico組件的安裝 18
1.10 Metrics部署 19
1.11 Dashboard部署 20
1.11.1 安裝Dashboard 20
1.11.2 登錄Dashboard 21
1.12 注意事項 23
1.13 小結 24
第2章 二進制安裝高可用K8s集群 25
2.1 基本環境配置 25
2.2 內核配置 28
2.3 基本組件安裝 30
2.3.1 Containerd作為Runtime 30
2.3.2 Docker作為Runtime 31
2.3.3 K8s及Etcd的安裝 32
2.4 生成證書 33
2.4.1 Etcd證書 33
2.4.2 K8s組件證書 34
2.5 高可用配置 37
2.6 Etcd集群配置 38
2.6.1 創建Etcd的配置文件 38
2.6.2 創建Service 38
2.7 K8s Master節點配置 39
2.7.1 APIServer 39
2.7.2 Controller Manager 40
2.7.3 Scheduler 40
2.8 TLS Bootstrapping配置 41
2.9 Node節點配置 42
2.9.1 Kubelet配置 42
2.9.2 kube-proxy配置 44
2.10 安裝Calico 46
2.11 安裝CoreDNS 47
2.12 安裝Metrics Server 47
2.13 安裝Dashboard 47
2.14 小結 48
第2篇 基 礎 篇
第3章 Docker基礎 50
3.1 Docker介紹 50
3.2 Docker安裝 51
3.3 Docker基本命令 51
3.4 Dockerfile的編寫 57
3.5 鏡像大小優化 61
3.6 多階段構建 63
3.7 小結 65
第4章 Kubernetes的基礎概念 66
4.1 為什麼要用Kubernetes 66
4.1.1 對於開發人員 67
4.1.2 對於運維人員 67
4.2 Kubernetes帶來的挑戰 68
4.3 Kubernetes架構解析 69
4.4 Master節點 70
4.5 Node節點 71
4.6 Pod的概念 72
4.6.1 什麼是Pod 72
4.6.2 Pod探針 74
4.6.3 Pod鏡像拉取策略和重啟策略 75
4.6.4 創建一個Pod 75
4.7 小結 78
第5章 Kubernetes調度基礎 79
5.1 Replication Controller和ReplicaSet 79
5.1.1 Replication Controller 79
5.1.2 ReplicaSet 80
5.2 無狀態應用管理Deployment 81
5.2.1 創建Deployment 82
5.2.2 更新Deployment 84
5.2.3 回滾Deployment 85
5.2.4 擴容Deployment 86
5.2.5 暫停和恢復Deployment更新 87
5.2.6 更新Deployment的注意事項 88
5.3 有狀態應用管理StatefulSet 89
5.3.1 StatefulSet的基本概念 89
5.3.2 StatefulSet的注意事項 90
5.3.3 定義一個StatefulSet資源文件 90
5.3.4 創建StatefulSet 92
5.3.5 StatefulSet創建Pod的流程 92
5.3.6 StatefulSet擴容和縮容 93
5.3.7 StatefulSet更新策略 94
5.3.8 刪除StatefulSet 96
5.4 守護進程集DaemonSet 97
5.4.1 什麼是DaemonSet 97
5.4.2 定義一個DaemonSet 98
5.4.3 創建DaemonSet 100
5.4.4 更新和回滾DaemonSet 101
5.5 CronJob 102
5.5.1 創建CronJob 102
5.5.2 可用參數的配置 103
5.6 小結 105
第6章 Kubernetes服務發布基礎 106
6.1 標簽和選擇器 106
6.1.1 定義標簽 107
6.1.2 選擇器 108
6.1.3 修改標簽 109
6.1.4 刪除標簽 109
6.2 Service 110
6.2.1 Service的基本概念 110
6.2.2 定義Service 111
6.2.3 無選擇器的Service和Endpoint 111
6.2.4 ExternalName Service 113
6.2.5 Service代理模式 113
6.2.6 多端口Service 114
6.2.7 Service的類型 115
6.2.8 Kubernetes服務發現 116
6.3 Ingress 118
6.3.1 基本概念 118
6.3.2 創建一個Ingress 119
6.3.3 Ingress使用入門 121
6.3.4 更新Ingress 123
6.4 小結 123
第7章 Kubernetes配置管理 124
7.1 什麼是ConfigMap 124
7.2 創建ConfigMap 125
7.2.1 基於目錄創建ConfigMap 125
7.2.2 基於文件創建ConfigMap 126
7.2.3 基於ENV文件創建ConfigMap 127
7.2.4 基於字符值創建ConfigMap 128
7.3 ConfigMap實踐 128
7.3.1 使用valueFrom定義容器環境變量 128
7.3.2 使用envFrom定義容器的環境變量 130
7.3.3 以文件形式掛載ConfigMap 131
7.3.4 自定義文件名掛載ConfigMap 132
7.3.5 指定掛載的文件權限 132
7.4 ConfigMap限制 133
7.5 加密數據管理Secret 134
7.5.1 創建Secret 134
7.5.2 解碼Secret 135
7.6 Secret實踐 136
7.6.1 以文件形式掛載Secret 136
7.6.2 自定義文件名掛載 137
7.6.3 Secret作為環境變量 138
7.6.4 Secret文件權限 138
7.7 常用的Secret類型 139
7.7.1 Docker鏡像倉庫Secret 139
7.7.2 HTTPS證書類型的Secret 140
7.8 SubPath解決掛載覆蓋問題 141
7.9 ConfigMap和Secret熱更新 141
7.10 小結 143
第3 篇 進 階 篇
第8章 Kubernetes存儲入門 146
8.1 Volume的概念 146
8.2 Volume的類型 147
8.3 示例1:通過emptyDir共享數據 148
8.4 示例2:使用HostPath掛載宿主機文件 149
8.5 示例3:掛載NFS至容器 150
8.6 PersistentVolume 151
8.6.1 PV回收策略 152
8.6.2 PV訪問策略 152
8.6.3 基於NFS的PV 153
8.6.4 基於HostPath的PV 154
8.6.5 基於Ceph RBD的PV 154
8.6.6 PV的狀態 155
8.7 PersistentVolumeClaim 155
8.7.1 PVC的創建 156
8.7.2 PVC的使用 157
8.8 動態存儲StorageClass 158
8.8.1 定義StorageClass 158
8.8.2 整合StorageClass和Ceph RBD 159
8.9 存儲的未來:CSI 162
8.9.1 通過CSI連接CephFS 163
8.9.2 通過CSI連接Ceph RBD 169
8.10 小結 173
第9章 Kubernetes高級調度 174
9.1 初始化容器InitContainer 174
9.1.1 InitContainer的基本概念 174
9.1.2 示例1:等待依賴服務啟動 175
9.1.3 示例2:服務注冊 176
9.1.4 示例3:克隆Git代碼到容器中 176
9.1.5 示例4:多個初始化容器使用 177
9.2 臨時容器Ephemeral Containers 178
9.2.1 臨時容器的概念 178
9.2.2 開啟臨時容器功能 178
9.2.3 臨時容器的使用 179
9.3 自動擴縮容HPA 182
9.3.1 什麼是HPA 182
9.3.2 HPA實踐——實現Web服務器的自動伸縮特性 182
9.4 Taint和Toleration 184
9.4.1 容忍和污點的基本概念 184
9.4.2 使用案例 187
9.4.3 基於Taint的驅逐 187
9.5 Affinity親和力 189
9.5.1 Affinity的分類 189
9.5.2 Node Affinity 190
9.5.3 PodAffinity和PodAntiAffinity 191
9.5.4 示例1:同一個應用部署在不同的宿主機 193
9.5.5 示例2:同一個應用不同副本的固定節點 194
9.5.6 示例3:應用和緩存盡量部署在同一個域內 195
9.6 小結 196
第10章 Kubernetes資源管理 197
10.1 ResourceQuota 197
10.2 LimitRange 201
10.3 QoS 204
10.4 小結 208
第11章 Kubernetes安全入門 209
11.1 權限管理RBAC 209
11.2 Network Policy 221
11.3 小結 231
第4篇 高 級 篇
第12章 云原生存儲Rook 234
12.1 Rook的安裝 235
12.2 一鍵部署Ceph集群 236
12.3 安裝Snapshot控制器 237
12.4 安裝Ceph客戶端工具和Dashboard 238
12.5 Ceph塊存儲的使用 240
12.6 共享型文件系統的使用 245
12.7 PVC擴容 247
12.8 PVC快照 249
12.9 PVC克隆 253
12.10 測試數據清理 254
12.11 小結 255
第13章 中間件容器化 256
13.1 傳統架構如何管理中間件集群 256
13.2 Kubernetes如何管理中間件集群 257
13.3 Operator的使用 259
13.4 Helm的使用 265
13.5 小結 273
第5篇 運 維 篇
第14章 Kubernetes日志收集 276
14.1 有哪些日志需要收集 276
14.2 日志采集工具有哪些 276
14.3 使用EFK收集控制臺日志 278
14.4 使用Filebeat收集自定義文件日志 283
14.5 Loki初體驗 287
14.6 小結 292
第15章 Kubernetes監控告警 293
15.1 Prometheus的架構介紹 293
15.2 Prometheus的安裝 295
15.3 云原生和非云原生應用的監控流程 298
15.4 黑盒監控 315
15.5 Prometheus靜態配置 315
15.6 Prometheus監控Windows(外部)主機 318
15.7 Prometheus語法PromQL入門 319
15.8 Alertmanager告警入門 329
15.9 Prometheus告警實戰 343
15.10 小結 347
第16章 服務發布Ingress進階 348
16.1 安裝Ingress Nginx Controller 349
16.2 Ingress Nginx入門 350
16.3 Ingress Nginx域名重定向Redirect 352
16.4 Ingress Nginx前後端分離Rewrite 353
16.5 Ingress Nginx錯誤代碼重定向 354
16.6 Ingress Nginx SSL 355
16.7 Ingress Nginx匹配請求頭 357
16.8 Ingress Nginx基本認證 359
16.9 Ingress Nginx黑/白名單 360
16.10 Ingress Nginx速率限制 362
16.11 使用Nginx實現灰度/金絲雀發布 363
16.12 環境清理 365
16.13 小結 366
第6篇 DevOps篇
第17章 DevOps實踐 368
17.1 CI/CD介紹 368
17.1.1 持續集成(CI) 368
17.1.2 持續交付(CD) 369
17.1.3 持續部署(CD) 369
17.1.4 CI和CD的區別 369
17.2 Jenkins流水線介紹 370
17.2.1 什麼是流水線 370
17.2.2 聲明式流水線 371
17.2.3 腳本化流水線 373
17.3 聲明式流水線的語法 374
17.3.1 sections 374
17.3.2 directives 382
17.3.3 parallel 392
17.4 Jenkinsfile的使用 394
17.5 DevOps平臺建設 405
17.6 自動化構建Java應用 425
17.7 自動化構建Vue/H5前端應用 441
17.8 自動化構建Golang項目 446
17.9 自動觸發構建 448
17.10 UAT及生產環境流水線設計 452
17.11 小結 456
第7篇 拓 展 篇
第18章 服務網格 458
18.1 服務網格概述 458
18.2 Istio的基本概念 4
18.3 Istio的核心資源 463
18.4 安裝Istio 468
18.5 Istio流量治理實踐 474
18.6 小結 492
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。