本書通過理論與實踐相結(jié)合,全方位地介紹Kubernetes這一容器編排的理想工具。本書共14章,涉及的主題包括理解Kubernetes架構(gòu),創(chuàng)建Kubernetes集群,監(jiān)控、日志記錄和故障排除,高可用性和可靠性,配置Kubernetes安全、限制和賬戶,使用關(guān)鍵Kubernetes資源,管理Kubernetes存儲,使用Kubernetes運行有狀態(tài)應(yīng)用程序,滾動更新、可伸縮性和配額,高級Kubernetes網(wǎng)絡(luò),在云平臺和集群聯(lián)邦中運行Kubernetes,自定義Kubernetes API和插件,操作Kubernetes軟件包管理器以及Kubernetes的未來。本書綜合考慮不同環(huán)境和用例,使讀者了解如何創(chuàng)建大型系統(tǒng)并將其部署在Kubernetes上。在各章節(jié)主題中,讀者提供了豐富的實踐案例分析,娓娓道來,引人入勝。
本書可以作為Kubernetes的實踐參考手冊,聚焦于設(shè)計和管理Kubernetes集群,為開發(fā)人員、運維工程師詳細介紹了Kubernetes所提供的功能和服務(wù)。
1.針對Kubernetes 1.10技術(shù)內(nèi)容進行寫作,幫助讀者掌握在各種云平臺上設(shè)計和部署大型集群的技能。
2.案例比較豐富,并附帶基礎(chǔ)練習題供讀者加深對知識的理解;
Kubernetes是一個用于自動化部署、擴展和管理容器化應(yīng)用程序的開源系統(tǒng)。如果您運行多個容器,或者希望對容器進行自動化管理,那么Kubernetes是必需的。
本書聚焦于Kubernetes集群設(shè)計和管理,列舉了在生產(chǎn)中使用容器編排時常見的問題,解釋了網(wǎng)絡(luò)配置的選項,并且提供了對各種Kubernetes網(wǎng)絡(luò)插件進行設(shè)置、操作和故障排除的指導原則。
本書介紹了如何在Kubernetes上運行復雜的有狀態(tài)微服務(wù),包括水平Pod自動伸縮、滾動更新、資源配額和持久存儲后端等高級功能,以及如何自動化和維護工作流中的自定義資源開發(fā)與利用。
另外,本書還概述了Kubernetes設(shè)計中的指導原則,展示了安全性、高可用性和集群聯(lián)邦領(lǐng)域中的最佳實踐。
您將學到以下內(nèi)容:
為程序運行構(gòu)建一個健壯的Kubernetes集群
了解Kubernetes在GCE、AWS、Azure和裸金屬上運行的優(yōu)點
查看Kubernetes的身份驗證模塊和集群聯(lián)邦的選項
對Kubernetes集群進行監(jiān)控和故障排除并運行高可用Kubernetes
創(chuàng)建和配置自定義Kubernetes資源,并在自動化工作流中使用第三方資源
了解如何在容器環(huán)境中運行復雜的有狀態(tài)應(yīng)用程序
將應(yīng)用程序作為標準包交付
Gigi Sayfan是VRVIU的首席系統(tǒng)架構(gòu)師 ,他致力于開發(fā)軟件專業(yè)20多年,涉及的領(lǐng)域包括即時消息傳送、變形、芯片制造過程控制、用于游戲控制臺的嵌入式多媒體應(yīng)用、大腦啟發(fā)式機器學習,定制瀏覽器開發(fā),3D分布式Web服務(wù)游戲平臺以及最近的物聯(lián)網(wǎng)/傳感器。他擅長C、C++、C#、Python、Java等,以用于Windows(3.11至7)。他的技術(shù)專長包括數(shù)據(jù)庫、分布式系統(tǒng)、非正統(tǒng)用戶界面。
第 1章 理解Kubernetes架構(gòu) 1
1.1 理解容器編排 1
1.1.1 物理機、虛擬機和容器 1
1.1.2 云端容器 2
1.1.3 服務(wù)器運行模式 2
1.2 Kubernetes的相關(guān)概念 3
1.2.1 集群 4
1.2.2 節(jié)點 4
1.2.3 主節(jié)點 4
1.2.4 Pod 4
1.2.5 標簽 5
1.2.6 注解 5
1.2.7 標簽選擇器 5
1.2.8 副本控制器和副本集 6
1.2.9 服務(wù) 6
1.2.10 存儲卷 6
1.2.11 有狀態(tài)服務(wù)集 7
1.2.12 密鑰對象 7
1.2.13 名稱 7
1.2.14 命名空間 8
1.3 深入了解Kubernetes架構(gòu) 8
1.4 Kubernetes API 10
1.4.1 Kubernetes API 10
1.4.2 自動伸縮 API 10
1.5 Kubernetes組件 11
1.5.1 主組件 11
1.5.2 節(jié)點組件 12
1.6 Kubernetes運行時 13
1.6.1 運行時接口 13
1.6.2 Docker 14
1.6.3 Rkt 15
1.6.4 Hyper Container 16
1.7 持續(xù)集成與部署 17
1.7.1 CI/CD流水線 17
1.7.2 為Kubernetes設(shè)計CI/CD流水線 18
1.8 總結(jié) 19
第 2章 創(chuàng)建Kubernetes集群 20
2.1 用Minikube快速創(chuàng)建單節(jié)點集群 20
2.1.1 準備工作 20
2.1.2 創(chuàng)建集群 22
2.1.3 故障排除 23
2.1.4 檢查集群 24
2.1.5 部署服務(wù) 25
2.1.6 用儀表板檢查集群 26
2.2 用Kubeadm創(chuàng)建多節(jié)點集群 26
2.2.1 準備工作 26
2.2.2 組建Vagrant虛擬機集群 26
2.2.3 安裝所需軟件 27
2.2.4 創(chuàng)建集群 29
2.2.5 建立Pod網(wǎng)絡(luò) 30
2.2.6 添加工作節(jié)點 31
2.3 在GCP、AWS和Azure云端創(chuàng)建集群 32
2.3.1 云提供商接口 32
2.3.2 GCP 33
2.3.3 AWS 33
2.3.4 Azure 34
2.4 從頭開始創(chuàng)建裸金屬集群 34
2.4.1 裸金屬用例 34
2.4.2 什么時候應(yīng)該考慮創(chuàng)建裸金屬集群 35
2.5 進程 35
2.6 使用虛擬私有云基礎(chǔ)設(shè)施 35
2.7 總結(jié) 36
第3章 監(jiān)控、日志記錄和故障排除 37
3.1 用Heapster監(jiān)控Kubernetes 37
3.2 InfluxDB后端 39
3.2.1 存儲模式 40
3.2.2 Grafana可視化 42
3.3 儀表板的性能分析 43
3.3.1 頂視圖 44
3.3.2 添加中央日志 49
3.4 檢測節(jié)點問題 51
3.4.1 節(jié)點問題檢測器 52
3.4.2 DaemonSet 52
3.4.3 節(jié)點問題檢測DaemonSet 52
3.5 故障排除方案 53
3.6 設(shè)計健壯的系統(tǒng) 53
3.6.1 硬件故障 54
3.6.2 配額、份額和限制 54
3.6.3 Bad Configuration 55
3.6.4 成本和性能 56
3.7 總結(jié) 57
第4章 高可用性和可靠性 58
4.1 高可用性概念 58
4.1.1 冗余 58
4.1.2 熱交換 59
4.1.3 領(lǐng)導選舉 59
4.1.4 智能負載均衡 59
4.1.5 冪等 59
4.1.6 自愈 60
4.2 高可用性最佳實踐 60
4.2.1 創(chuàng)建高可用性集群 60
4.2.2 確保節(jié)點可靠 61
4.2.3 保護集群狀態(tài) 62
4.2.4 保護數(shù)據(jù) 66
4.2.5 運行冗余API服務(wù)器 67
4.2.6 用Kubernetes運行領(lǐng)導選舉 67
4.2.7 使預演環(huán)境高度可用 69
4.2.8 測試高可用性 70
4.3 集群在線升級 71
4.3.1 滾動升級 71
4.3.2 藍綠升級 73
4.3.3 管理數(shù)據(jù)契約變更 73
4.3.4 數(shù)據(jù)遷移 74
4.3.5 檢測過期API 74
4.4 大型集群的性能、成本和設(shè)計權(quán)衡 75
4.4.1 可用性要求 75
4.4.2 盡力而為 75
4.4.3 維護窗口 76
4.4.4 快速恢復 76
4.4.5 零停機時間 77
4.4.6 性能和數(shù)據(jù)的一致性 78
4.5 總結(jié) 78
第5章 配置Kubernetes安全、限制和賬戶 80
5.1 理解Kubernetes安全挑戰(zhàn) 80
5.1.1 節(jié)點挑戰(zhàn) 81
5.1.2 網(wǎng)絡(luò)挑戰(zhàn) 81
5.1.3 鏡像挑戰(zhàn) 82
5.1.4 配置和部署挑戰(zhàn) 83
5.1.5 Pod和容器挑戰(zhàn) 84
5.1.6 組織、文化和過程挑戰(zhàn) 84
5.2 加固Kubernetes 85
5.2.1 理解Kubernetes的服務(wù)賬戶 85
5.2.2 訪問API服務(wù)器 87
5.2.3 保護Pod 90
5.2.4 管理網(wǎng)絡(luò)策略 95
5.2.5 使用密鑰對象 97
5.3 運行多用戶集群 100
5.3.1 多用戶集群的案例 100
5.3.2 安全多租戶使用命名空間 101
5.3.3 避免命名空間陷阱 102
5.4 總結(jié) 102
第6章 使用關(guān)鍵Kubernetes資源 103
6.1 設(shè)計Hue平臺 103
6.1.1 定義Hue的范圍 103
6.1.2 規(guī)劃工作流 107
6.2 利用Kubernetes構(gòu)建Hue平臺 107
6.2.1 有效使用kubectl 107
6.2.2 理解kubectl資源配置文件 108
6.2.3 在Pod中部署長時間運行的微服務(wù) 110
6.3 內(nèi)外部服務(wù)分離 114
6.3.1 部署內(nèi)部服務(wù) 114
6.3.2 創(chuàng)建Hue-reminders服務(wù) 115
6.3.3 從外部公開服務(wù) 116
6.4 使用命名空間限制訪問 118
6.5 啟動Job 120
6.5.1 并行運行作業(yè) 121
6.5.2 清理已完成的作業(yè) 122
6.5.3 調(diào)度計劃作業(yè) 122
6.6 kubectl獲得Pod 123
6.7 混合非集群組件 124
6.7.1 集群網(wǎng)絡(luò)外部組件 124
6.7.2 集群網(wǎng)絡(luò)內(nèi)部組件 125
6.7.3 用Kubernetes管理Hue平臺 125
6.7.4 使用就緒探針管理依賴 126
6.8 為有序啟動Pod采用初始容器 127
6.9 用Kubernetes進化Hue平臺 129
6.9.1 Hue在企業(yè)中的運用 129
6.9.2 用Hue推進科學 129
6.9.3 用Hue實施教育 129
6.10 總結(jié) 129
第7章 管理Kubernetes存儲 131
7.1 持久存儲卷指導 131
7.1.1 存儲卷 131
7.1.2 創(chuàng)建持久存儲卷 135
7.1.3 持續(xù)存儲卷聲明 137
7.1.4 按使用存儲卷掛載聲明 138
7.1.5 存儲類 139
7.1.6 從端到端演示持久存儲卷 140
7.2 公共存儲卷類型——GCE、AWS和Azure 144
7.2.1 AWS彈性塊存儲(EBS) 144
7.2.2 AWS彈性文件系統(tǒng)(EFS) 145
7.2.3 GCE持久化磁盤 145
7.2.4 Azure數(shù)據(jù)盤 146
7.2.5 Azure文件存儲 147
7.3 Kubernetes中的GlusterFS和Ceph存儲卷 148
7.3.1 使用GlusterFS 148
7.3.2 使用Ceph 151
7.4 Flocker作為集群容器數(shù)據(jù)存儲卷管理器 153
7.5 將企業(yè)存儲集成到Kubernetes 155
7.6 總結(jié) 156
第8章 使用Kubernetes運行有狀態(tài)的應(yīng)用程序 157
8.1 Kubernetes中的有狀態(tài)與無狀態(tài)應(yīng)用 157
8.1.1 理解分布式數(shù)據(jù)密集型應(yīng)用的本質(zhì) 157
8.1.2 為什么在Kubernetes中管理狀態(tài) 158
8.1.3 為什么在Kubernetes以外管理狀態(tài) 158
8.2 共享環(huán)境變量與DNS記錄 158
8.2.1 通過DNS訪問外部數(shù)據(jù)存儲 159
8.2.2 通過環(huán)境變量訪問外部數(shù)據(jù)存儲 159
8.2.3 使用冗余內(nèi)存狀態(tài) 161
8.2.4 使用DaemonSet進行冗余持久存儲 161
8.2.5 應(yīng)用持久存儲卷聲明 161
8.2.6 利用有狀態(tài)服務(wù)集 162
8.3 在Kubernetes運行Cassandra集群 163
8.3.1 Cassandra快速入門 164
8.3.2 Cassandra Docker鏡像 164
8.3.3 連接Kubernetes和Cassandra 169
8.3.4 創(chuàng)建Cassandra無源服務(wù) 172
8.3.5 使用有狀態(tài)服務(wù)集創(chuàng)建Cassandra集群 172
8.3.6 使用副本控制器分布Cassandra 176
8.3.7 利用DaemonSet分布Cassandra 179
8.4 總結(jié) 180
第9章 滾動更新、可伸縮性和配額 181
9.1 水平Pod自動伸縮 181
9.1.1 聲明水平Pod自動伸縮器 182
9.1.2 自定義度量 183
9.1.3 使用Kubectl自動伸縮 185
9.2 用自動伸縮進行滾動更新 187
9.3 用限制和配額處理稀缺資源 188
9.3.1 啟用資源配額 189
9.3.2 資源配額類型 189
9.3.3 配額范圍 191
9.3.4 請求與限制 192
9.3.5 使用配額 192
9.4 選擇與管理集群性能 197
9.4.1 選擇節(jié)點類型 197
9.4.2 選擇存儲解決方案 197
9.4.3 交易成本與響應(yīng)時間 198
9.4.4 有效使用多節(jié)點配置 198
9.4.5 利用彈性云資源 198
9.4.6 考慮Hyper.sh 200
9.5 挑戰(zhàn)Kubernetes性能極限 200
9.5.1 提高Kubernetes的性能和可擴展性 201
9.5.2 測量Kubernetes的性能和可伸縮性 202
9.5.3 按規(guī)模測試Kubernetes 205
9.6 總結(jié) 206
第 10章 高級Kubernetes網(wǎng)絡(luò) 207
10.1 理解Kubernetes網(wǎng)絡(luò)模型 207
10.1.1 容器內(nèi)通信(容器-容器) 207
10.1.2 Pod間通信(Pod-Pod) 208
10.1.3 Pod-服務(wù)通信 208
10.1.4 外部訪問 208
10.1.5 Kubernetes網(wǎng)絡(luò)與Docker網(wǎng)絡(luò) 209
10.1.6 查找與發(fā)現(xiàn) 210
10.1.7 Kubernetes網(wǎng)絡(luò)插件 212
10.2 Kubernetes網(wǎng)絡(luò)解決方案 217
10.2.1 裸金屬集群橋接 217
10.2.2 Contiv 218
10.2.3 Open vSwitch 218
10.2.4 Nuage網(wǎng)絡(luò)VCS 219
10.2.5 Canal 219
10.2.6 Flannel 220
10.2.7 Calico工程 221
10.2.8 Romana 222
10.2.9 Weave Net 222
10.3 有效使用網(wǎng)絡(luò)策略 223
10.4 負載均衡選項 224
10.4.1 外部負載均衡器 225
10.4.2 服務(wù)負載均衡器 228
10.4.3 入口 228
10.5 編寫自己的CNI插件 231
10.6 總結(jié) 236
第 11章 在云平臺和集群聯(lián)邦中運行Kubernetes 237
11.1 理解集群聯(lián)邦 237
11.1.1 集群聯(lián)邦的重要用例 238
11.1.2 聯(lián)邦控制平面 240
11.1.3 聯(lián)邦資源 241
11.1.4 高難度部分 245
11.2 管理Kubernetes集群聯(lián)邦 248
11.3 從底層建立集群聯(lián)邦 248
11.3.1 初始設(shè)置 249
11.3.2 使用官方hyperkube鏡像 249
11.3.3 運行聯(lián)邦控制平面 249
11.3.4 用聯(lián)邦注冊Kubernetes集群 250
11.3.5 更新KubeDNS 251
11.3.6 關(guān)閉聯(lián)邦 251
11.3.7 用Kubefed建立集群聯(lián)邦 251
11.4 運行聯(lián)邦工作負載 257
11.4.1 創(chuàng)建聯(lián)邦服務(wù) 257
11.4.2 添加后端Pod 258
11.4.3 驗證公共DNS記錄 258
11.4.4 發(fā)現(xiàn)聯(lián)邦服務(wù) 259
11.4.5 后端Pod和整個集群的故障處理 261
11.4.6 故障排除 261
11.5 總結(jié) 262
第 12章 自定義Kubernetes API和插件 264
12.1 使用Kubernetes API 264
12.1.1 理解OpenAPI 264
12.1.2 設(shè)置代理 265
12.1.3 直接探索Kubernetes API 265
12.1.4 通過Kubernetes API創(chuàng)建Pod 268
12.1.5 通過Python客戶端訪問Kubernetes API 269
12.2 擴展Kubernetes API 275
12.2.1 理解第三方資源的結(jié)構(gòu) 276
12.2.2 開發(fā)第三方資源 276
12.2.3 整合第三方資源 277
12.3 編寫Kubernetes插件 278
12.4 編寫授權(quán)插件 284
12.4.1 編寫準入控制接口 284
12.4.2 編寫自定義度量插件 287
12.4.3 編寫卷插件 288
12.5 總結(jié) 291
第 13章 操作Kubernetes軟件包管理器 292
13.1 理解Helm 292
13.1.1 Helm的動機 292
13.1.2 Helm架構(gòu) 293
13.1.3 Helm組件 293
13.1.4 Helm與Helm-Classic 294
13.2 使用Helm 294
13.2.1 安裝Helm 294
13.2.2 尋找圖表 295
13.2.3 安裝包 297
13.2.4 使用安裝包庫 302
13.2.5 使用Helm管理圖表 303
13.3 創(chuàng)建自己的圖表 304
13.3.1 Chart.yaml文件 304
13.3.2 圖表元數(shù)據(jù)文件 306
13.3.3 管理圖表依賴 306
13.3.4 使用模板和值 309
13.4 總結(jié) 312
第 14章 Kubernetes的未來 313
14.1 未來發(fā)展道路 313
14.1.1 Kubernetes的發(fā)行版和里程碑 313
14.1.2 Kubernetes的特別興趣小組和工作組 314
14.2 面臨的挑戰(zhàn) 314
14.2.1 捆綁價值 314
14.2.2 Docker Swarm 315
14.2.3 Mesos/Mesosphere 315
14.2.4 云平臺 315
14.2.5 AWS 315
14.2.6 Azure 316
14.2.7 阿里云 316
14.3 Kubernetes勢頭 316
14.3.1 社區(qū) 316
14.3.2 GitHub 316
14.3.3 會議 316
14.3.4 思維共享 317
14.3.5 生態(tài)系統(tǒng) 317
14.3.6 公有云提供商 317
14.4 教育和培訓 318
14.5 動態(tài)插件 318
14.6 總結(jié) 319