雲原生 Kubernetes 全棧架構師實戰

杜寬

  • 出版商: 清華大學
  • 出版日期: 2022-05-01
  • 售價: $828
  • 貴賓價: 9.5$787
  • 語言: 簡體中文
  • ISBN: 730260388X
  • ISBN-13: 9787302603887
  • 相關分類: Kubernetes
  • 立即出貨

  • 雲原生 Kubernetes 全棧架構師實戰-preview-1
  • 雲原生 Kubernetes 全棧架構師實戰-preview-2
  • 雲原生 Kubernetes 全棧架構師實戰-preview-3
雲原生 Kubernetes 全棧架構師實戰-preview-1

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

商品描述

本書以一個Kubernetes工程師的視角,全面系統地介紹Kubernetes常見的知識點、企業應用實踐及運維管理方法。本書共分18章,第1、2章介紹如何快速搭建高可用的Kubernetes集群;第3~7章介紹Docker的基礎和鏡像的製作優化,以及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章主要介紹基於Kubernetes、Jenkins、Harbor、GitLab等工具建設生產級的DevOps平臺,實現開發、測試、UAT、生產環境的流水線設計。第18章主要介紹服務網格Istio的使用,實現對Kubernetes內部服務的細粒度流量管理。 本書從概念到實踐,從手工到自動化,內容翔實且豐富,其中的範例與項目均在實踐中多次驗證,可直接用於生產環境。本書適合Kubernetes初學者、開發人員、運維人員、架構師使用,也可以作為培訓機構和大專院校的教學用書。

目錄大綱

目    錄

第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.1.1  什麽是資源配額 197

10.1.2  定義一個ResourceQuota 198

10.1.3  ResourceQuota的使用 199

10.2  LimitRange 201

10.2.1  LimitRange的用途 201

10.2.2  示例1:配置默認的requests和limits 201

10.2.3  示例2:配置requests和limits的範圍 202

10.2.4  示例3:限制申請存儲空間的大小 204

10.3  QoS 204

10.3.1  什麽是服務質量保證 204

10.3.2  示例1:實現QoS為Guaranteed的Pod 206

10.3.3  示例2:實現QoS為Burstable的Pod 206

10.3.4  示例3:實現QoS為BestEffort的Pod 207

10.4  小結 208

第11章  Kubernetes安全入門 209

11.1  權限管理RBAC 209

11.1.1  RBAC的基本概念 209

11.1.2  Role和ClusterRole 210

11.1.3  RoleBinding和ClusterRoleBinding 211

11.1.4  對集群資源的權限控制 212

11.1.5  聚合ClusterRole 213

11.1.6  Role常用示例 214

11.1.7  RoleBinding常用示例 215

11.1.8  命令行的使用 216

11.1.9  K8s多租戶權限管理實踐 218

11.2  Network Policy 221

11.2.1  網絡策略的使用 221

11.2.2  網絡策略的註意事項 223

11.2.3  示例1:隔離中間件服務 224

11.2.4  示例2:服務發布限制於Ingress 228

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.5.1  創建StorageClass和Ceph的存儲池 240

12.5.2  掛載測試 242

12.5.3  StatefulSet volumeClaimTemplates 243

12.6  共享型文件系統的使用 245

12.6.1  創建共享型文件系統 245

12.6.2  創建共享型文件系統的StorageClass 246

12.6.3  掛載測試 246

12.7  PVC擴容 247

12.7.1  擴容文件共享型PVC 247

12.7.2  擴容塊存儲 249

12.8  PVC快照 249

12.8.1  創建SnapshotClass 250

12.8.2  創建快照 250

12.8.3  使用快照恢復數據 251

12.8.4  數據校驗 252

12.9  PVC克隆 253

12.10  測試數據清理 254

12.11  小結 255

第13章  中間件容器化 256

13.1  傳統架構如何管理中間件集群 256

13.2  Kubernetes如何管理中間件集群 257

13.2.1  Operator和Helm的區別 257

13.2.2  Kubernetes管理中間件集群的流程 258

13.3  Operator的使用 259

13.3.1  使用Operator安裝Redis集群 260

13.3.2  Redis集群一鍵擴容 263

13.3.3  集群清理 264

13.4  Helm的使用 265

13.4.1  安裝Helm客戶端 265

13.4.2  Helm客戶端命令入門 265

13.4.3  安裝Zookeeper集群至Kubernetes 267

13.4.4  安裝Kafka集群至Kubernetes 269

13.4.5  Kafka集群擴容 272

13.4.6  刪除Helm Release 273

13.5  小結 273

第5篇  運  維  篇

第14章  Kubernetes日誌收集 276

14.1  有哪些日誌需要收集 276

14.2  日誌採集工具有哪些 276

14.2.1  ELK & EFK 276

14.2.2  Filebeat 277

14.2.3  新貴Loki 277

14.3  使用EFK收集控制台日誌 278

14.3.1  部署Elasticsearch+Fluentd+Kibana 279

14.3.2  Kibana的使用 280

14.4  使用Filebeat收集自定義文件日誌 283

14.4.1  創建Kafka和Logstash 283

14.4.2  註入Filebeat Sidecar 284

14.4.3  清理 287

14.5  Loki初體驗 287

14.5.1  安裝Loki Stack 287

14.5.2  Loki語法入門 290

14.6  小結 292

第15章  Kubernetes監控告警 293

15.1  Prometheus的架構介紹 293

15.2  Prometheus的安裝 295

15.3  雲原生和非雲原生應用的監控流程 298

15.3.1  監控數據來源 298

15.3.2  什麽是ServiceMonitor 300

15.3.3  ServiceMonitor找不到監控主機排查 302

15.3.4  雲原生應用監控 307

15.3.5  非雲原生監控Exporter 311

15.4  黑盒監控 315

15.5  Prometheus靜態配置 315

15.6  Prometheus監控Windows(外部)主機 318

15.7  Prometheus語法PromQL入門 319

15.7.1  PromQL語法初體驗 319

15.7.2  PromQL操作符 323

15.7.3  PromQL常用函數 326

15.8  Alertmanager告警入門 329

15.8.1  Alertmanager配置文件解析 329

15.8.2  Alertmanager路由規則 331

15.8.3  Alertmanager郵件通知 332

15.8.4  Alertmanager企業微信通知 337

15.8.5  自定義告警模板 341

15.9  Prometheus告警實戰 343

15.9.1  PrometheusRule 343

15.9.2  告警通用配置步驟 344

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.9.1  配置黑名單 360

16.9.2  配置白名單 361

16.10  Ingress Nginx速率限制 362

16.11  使用Nginx實現灰度/金絲雀發布 363

16.11.1  創建v1版本 363

16.11.2  創建v2版本 363

16.11.3  Canary版本切入部分流量 364

16.11.4  測試灰度發布 364

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.4.1  Jenkinsfile初體驗 395

17.4.2  Jenkinsfile進階 398

17.5  DevOps平臺建設 405

17.5.1  安裝Jenkins 406

17.5.2  安裝GitLab 409

17.5.3  安裝Harbor 414

17.5.4  Jenkins憑證Credentials 419

17.5.5  配置Agent 422

17.5.6  Jenkins配置Kubernetes多集群 423

17.6  自動化構建Java應用 425

17.6.1  創建Java測試用例 425

17.6.2  定義Jenkinsfile 427

17.6.3  Jenkinsfile詳解 428

17.6.4  定義Dockerfile 433

17.6.5  定義Kubernetes資源 433

17.6.6  創建Jenkins任務 436

17.7  自動化構建Vue/H5前端應用 441

17.7.1  定義Jenkinsfile 441

17.7.2  定義Dockerfile 442

17.7.3  定義Kubernetes資源 442

17.7.4  創建Jenkins Job 444

17.8  自動化構建Golang項目 446

17.8.1  定義Jenkinsfile 446

17.8.2  定義Dockerfile 447

17.8.3  創建Jenkins Job 447

17.9  自動觸發構建 448

17.10  UAT及生產環境流水線設計 452

17.11  小結 456

第7篇  拓  展  篇

第18章  服務網格 458

18.1  服務網格概述 458

18.1.1  服務網格的基本概念 458

18.1.2  服務網格的功能 459

18.1.3  服務網格產品 460

18.2  Istio的基本概念 460

18.2.1  Istio的架構 461

18.2.2  Istio的組件 461

18.3  Istio的核心資源 463

18.3.1  VirtualService 463

18.3.2  DestinationRule 465

18.3.3  Gateway 466

18.4  安裝Istio 468

18.4.1  使用Operator部署Istio 468

18.4.2  配置自動註入 470

18.4.3  可視化工具Kiali 470

18.4.4  Prometheus和Grafana 472

18.5  Istio流量治理實踐 474

18.5.1  部署測試用例 474

18.5.2  Istio實現灰度部署 478

18.5.3  Istio實現AB測試 482

18.5.4  Istio註入延遲故障 484

18.5.5  Istio註入中斷故障 486

18.5.6  Istio快速超時配置 487

18.5.7  Istio地址重寫和重定向 488

18.5.8  Istio負載均衡算法 489

18.5.9  Istio熔斷 490

18.6  小結 492