本書從初學者的角度出發(fā),以實戰(zhàn)為導向,幫助讀者快速掌握Kubernetes的核心知識,并在實踐中用好Kubernetes。本書共7章。第1章介紹如何搭建一個易上手的Kubernetes實驗環(huán)境;第2章以Docker為例介紹容器、鏡像、鏡像倉庫等概念和運行原理;第3章介紹容器編排概念,并搭建Minikube的單機環(huán)境和kubeadm的集群環(huán)境;第4章先講解Kubernetes的運行機制和YAML語言,再介紹Pod、Job、CronJob、ConfigMap和Secret對象;第5章講解Kubernetes中的重要對象,包括Deployment、DaemonSet、Service、Ingress、PersistentVolume、StatefulSet等;第6章介紹Kubernetes的高級運維管理知識,包括滾動更新、狀態(tài)探針、資源配額管理、集群資源監(jiān)控、網(wǎng)絡插件等;第7章介紹Kubernetes的學習經(jīng)驗和建議。
本書從初學者的角度出發(fā),不要求Go語言基礎,不涉及內部源碼或者實現(xiàn)細節(jié),以實戰(zhàn)為導向,幫助讀者快速掌握Kubernetes的核心知識,解決工作中遇到的實際問題。
1. 實戰(zhàn)導向:配套4大項目實戰(zhàn),從搭建實驗環(huán)境到高級宋芾,全秤懜帝E憧燜僬莆誎ubernetes精髓。
2. 通俗易懂:每節(jié)聚焦一個知識點,配以代碼和圖示,幫助讀者更好地理解Kubernetes。
3. 系統(tǒng)全面:涵蓋Kubernetes的各方面知識,Kubernetes的核心對象與運行原理,同時介紹高級運維管理知識,系統(tǒng)全面,讓你深入了解并駕馭Kubernetes。
羅劍鋒,網(wǎng)名“Chrono”,Nginx/OpenResty開源項目貢獻者,極客時間“Kubernetes入門實戰(zhàn)課”“透視HTTP協(xié)議”等專欄的作者。目前在Kong公司擔任高級工程師,從事Kong Gateway、Kong IngressController等項目的開發(fā)工作。著有《C++實戰(zhàn)筆記》《Nginx完全開發(fā)指南》《OpenResty完全開發(fā)指南》等。
第1章 Kubernetes基本環(huán)境搭建 1
1.1 本地主機 1
1.2 虛擬機軟件 2
1.3 Linux發(fā)行版 2
1.4 創(chuàng)建虛擬機 3
1.5 安裝操作系統(tǒng) 4
1.6 常用的Linux操作 5
1.7 小結 6
第2章 Kubernetes底層基礎:容器技術 7
2.1 認識Docker 7
2.1.1 Docker的誕生 7
2.1.2 Docker的形態(tài) 8
2.1.3 Docker的安裝 9
2.1.4 Docker Engine的架構 10
2.1.5 Docker的基本用法 12
2.1.6 小結 13
2.2 理解容器的本質 13
2.2.1 容器究竟是什么 14
2.2.2 為什么要隔離 15
2.2.3 容器與虛擬機的區(qū)別 16
2.2.4 隔離是怎么實現(xiàn)的 17
2.2.5 小結 18
2.3 容器化的應用 18
2.3.1 容器與鏡像 19
2.3.2 常用的鏡像操作命令 20
2.3.3 常用的容器操作命令 21
2.3.4 小結 23
2.4 創(chuàng)建應用鏡像 24
2.4.1 鏡像內部機制 24
2.4.2 什么是Dockerfile 26
2.4.3 編寫Dockerfile 27
2.4.4 鏡像構建工流程 29
2.4.5 小結 30
2.5 鏡像倉庫 31
2.5.1 什么是Docker Hub 31
2.5.2 在Docker Hub上挑選鏡像 32
2.5.3 Docker Hub鏡像的命名規(guī)則 34
2.5.4 向Docker Hub上傳鏡像 37
2.5.5 離線環(huán)境使用Docker Hub 38
2.5.6 小結 38
2.6 容器與外界的通信 39
2.6.1 容器內外的文件拷貝 39
2.6.2 共享宿主機的文件 40
2.6.3 網(wǎng)絡互聯(lián)互通 41
2.6.4 小結 44
2.7 實戰(zhàn)演練 44
2.7.1 要點回顧 45
2.7.2 私有鏡像倉庫 46
2.7.3 WordPress網(wǎng)站 47
2.7.4 小結 51
第3章 Kubernetes實驗環(huán)境搭建 52
3.1 認識Kubernetes 52
3.1.1 什么是容器編排 52
3.1.2 什么是Kubernetes 53
3.1.3 小結 54
3.2 使用Minikube 54
3.2.1 什么是Minikube 54
3.2.2 安裝Minikube 55
3.2.3 運行Minikube 56
3.2.4 小結 58
3.3 使用kubeadm 59
3.3.1 什么是kubeadm 59
3.3.2 集群架構 60
3.3.3 準備工作 61
3.3.4 安裝kubeadm 62
3.3.5 安裝控制面節(jié)點 63
3.3.6 安裝網(wǎng)絡插件 65
3.3.7 安裝數(shù)據(jù)面節(jié)點 65
3.3.8 安裝操作臺節(jié)點 66
3.3.9 小結 66
第4章 Kubernetes運行機制和基本API對象 67
4.1 Kubernetes工作機制 67
4.1.1 云時代的操作系統(tǒng) 67
4.1.2 總體架構 68
4.1.3 控制面 70
4.1.4 數(shù)據(jù)面 70
4.1.5 工作流程 71
4.1.6 擴展 71
4.1.7 小結 73
4.2 工作語言YAML 73
4.2.1 聲明式與命令式 73
4.2.2 什么是YAML 74
4.2.3 什么是API對象 76
4.2.4 用YAML描述API對象 78
4.2.5 編寫YAML的技巧 79
4.2.6 小結 81
4.3 核心概念Pod 81
4.3.1 為什么要有Pod 82
4.3.2 為什么Pod是核心概念 82
4.3.3 用YAML描述Pod 83
4.3.4 用kubectl操作Pod 85
4.3.5 小結 87
4.4 離線業(yè)務Job和CronJob 88
4.4.1 為什么不直接使用Pod 88
4.4.2 為什么要有Job和CronJob 89
4.4.3 用YAML描述Job和CronJob 90
4.4.4 用kubectl操作Job 91
4.4.5 用kubectl操作CronJob 94
4.4.6 小結 96
4.5 配置信息ConfigMap和Secret 96
4.5.1 什么是ConfigMap 97
4.5.2 什么是Secret 98
4.5.3 加載為環(huán)境變量 100
4.5.4 加載為文件 103
4.5.5 小結 106
4.6 實戰(zhàn)演練 106
4.6.1 要點回顧 106
4.6.2 搭建WordPress網(wǎng)站 108
4.6.3 小結 113
第5章 Kubernetes業(yè)務應用API對象 114
5.1 永不宕機的Deployment 114
5.1.1 為什么要有Deployment 114
5.1.2 用YAML描述Deployment 115
5.1.3 Deployment的關鍵字段 116
5.1.4 用kubectl操作Deployment 118
5.1.5 小結 120
5.2 忠實可靠的看門狗DaemonSet 121
5.2.1 為什么要有DaemonSet 121
5.2.2 用YAML描述DaemonSet 122
5.2.3 用kubectl操作DaemonSet 124
5.2.4 污點和容忍度 124
5.2.5 靜態(tài)Pod 126
5.2.6 小結 127
5.3 微服務必需的Service 127
5.3.1 為什么要有Service 127
5.3.2 用YAML描述Service 128
5.3.3 用kubectl操作Service 130
5.3.4 以域名的方式訪問Service 133
5.3.5 在集群外暴露Service 135
5.3.6 小結 136
5.4 管理集群出入流量的Ingress 137
5.4.1 為什么要有Ingress 137
5.4.2 為什么要有Ingress Controller 138
5.4.3 為什么要有Ingress Class 139
5.4.4 用YAML描述Ingress和Ingress Class 140
5.4.5 用kubectl操作Ingress和Ingress Class 142
5.4.6 使用Nginx Ingress Controller 143
5.4.7 使用Kong Ingress Controller 146
5.4.8 擴展Kong Ingress Controller 150
5.4.9 小結 153
5.5 數(shù)據(jù)持久化PersistentVolume 154
5.5.1 什么是PersistentVolume 155
5.5.2 什么是PersistentVolumeClaim和StorageClass 155
5.5.3 用YAML描述PersistentVolume 156
5.5.4 用YAML描述PersistentVolumeClaim 158
5.5.5 在Pod里使用PersistentVolume 158
5.5.6 在Pod里使用靜態(tài)網(wǎng)絡存儲 161
5.5.7 在Pod里使用動態(tài)網(wǎng)絡存儲 164
5.5.8 小結 167
5.6 有狀態(tài)的應用StatefulSet 168
5.6.1 什么是有狀態(tài)的應用 168
5.6.2 用YAML描述StatefulSet 169
5.6.3 用kubectl操作StatefulSet 170
5.6.4 StatefulSet的數(shù)據(jù)持久化 173
5.6.5 小結 175
5.7 實戰(zhàn)演練 176
5.7.1 要點回顧 176
5.7.2 使用Deployment搭建WordPress網(wǎng)站 178
5.7.3 使用StatefulSet優(yōu)化WordPress網(wǎng)站的設計 185
5.7.4 小結 187
第6章 Kubernetes運維、監(jiān)控和管理 188
6.1 應用滾動更新 188
6.1.1 應用的版本更新 188
6.1.2 應用版本更新的過程 190
6.1.3 管理更新 193
6.1.4 更新描述 195
6.1.5 小結 196
6.2 容器狀態(tài)探針 197
6.2.1 探針的種類 197
6.2.2 使用探針 199
6.2.3 小結 201
6.3 容器資源配額管理 202
6.3.1 申請資源配額 202
6.3.2 處理策略 203
6.3.3 小結 204
6.4 集群資源配額管理 204
6.4.1 什么是名字空間 204
6.4.2 如何使用名字空間 205
6.4.3 設置資源配額 206
6.4.4 使用資源配額 208
6.4.5 默認資源配額 210
6.4.6 小結 212
6.5 集群資源監(jiān)控 212
6.5.1 使用Metrics Server 212
6.5.2 水平自動伸縮 214
6.5.3 使用Prometheus 217
6.5.4 小結 221
6.6 集群網(wǎng)絡插件 222
6.6.1 網(wǎng)絡模型 222
6.6.2 什么是CNI 223
6.6.3 CNI的工作原理 224
6.6.4 使用Calico插件 227
6.6.5 小結 229
6.7 實戰(zhàn)演練 230
6.7.1 要點回顧 230
6.7.2 部署Dashboard 231
6.7.3 小結 237
第7章 結束語 238
7.1 學習經(jīng)驗分享 238
7.2 學習方式建議 239
7.3 臨別感言 240
附錄A Kubernetes棄用Docker 241
A.1 CRI 241
A.2 Containerd 242
A.3 正式棄用Docker 243
A.4 Docker的未來 245
附錄B docker-compose 246
B.1 什么是docker-compose 246
B.2 搭建私有鏡像倉庫 247
B.3 搭建WordPress網(wǎng)站 250
B.4 小結 253
附錄C Harbor 254
C.1 什么是Harbor 254
C.2 安裝Harbor 254
C.3 使用Harbor 256
附錄D NFS網(wǎng)絡存儲服務 258
D.1 安裝NFS服務端 258
D.2 安裝NFS客戶端 259
D.3 驗證NFS存儲 259
D.4 安裝NFS Provisioner 260