Kubernetes 即學即用, 2/e Kubernetes Up and Running : Dive into the Future of Infrastructure, 2/e

Brendan Burns 馬晶慧 譯

商品描述

Kubernetes的時代已然到來。
在短短幾年內,這款容器編排器從根本上改變了開發人員和運維人員在雲中構建、部署,以及維護應用程序的方式。
無論你是分佈式系統的新手,還是多年來一直在部署雲原生應用程序的老手,
Kubernetes都可以幫助你在速度、敏捷性、可靠性,以及效率等方面更上一層樓。
《Kubernetes即學即用(第二版)》作者長期致力於Kubernetes的概念抽像以及構建實踐,
他們將通過該書向你展示怎樣將Kubernetes完美地融入分佈式應用程序的生命週期。
你將學習如何使用各種工具以及API來實現可擴展分佈式系統的自動化,
無論你的系統是在線服務、機器學習應用程序,還是樹莓派計算機集群。
創建和運行一個簡單的集群,了解Kubernetes的基本工作原理。
深入了解使用Kubernetes.Pod.服務、Ingress,以及副本集部署應用程序的細節。
將存儲集成到Kubernetes的容器化微服務中。
學習Kubernetes中的專用對象,例如守護進程集、作業、ConfigMap,以及Secret等。
掌握在Kubernetes中開發和部署應用程序的實戰經驗。

作者簡介

Brendan Burns

是Kubernetes的合夥創始人,微軟Azure的傑出工程師,
負責領導開發運維、開源,以及微服務等團隊。

Joe Beda

是Kubernetes的合夥創始人,VMware的首席工程師。
他曾是Heptio的合夥創始人,直到該公司被VMware收購前一直擔任CTO之職。
他在VMware公司範圍內推動了Kubernetes戰略的實施。


Kelsey Hightower

是Google雲平台的首席開發,他曾在科技職業生涯中出任多個職位,主要領導軟件的發行工作。

目錄大綱

目錄
前言 .1
第1 章 概述 .9
1.1 速度 10
1.1.1 不可變性的價值 . 11
1.1.2 聲明式配置 13
1.1.3 自我修復系統 13
1.2 擴展服務和團隊 14
1.2.1 解耦 15
1.2.2 輕鬆擴展應用程序和集群 . 15
1.2.3 通過微服務擴展開發團隊 . 16
1.2.4 一致性與擴展性的關注點分離 17
1.3 抽象基礎設施 19
1.4 效率 20
1.5 小結 21

第2 章 創建和運行容器 22
2.1 容器鏡像 24
2.2 使用Docker 構建應用程序鏡像 26
2.2.1 Dockerfiles 26
2.2.2 優化鏡像的大小 . 28
2.2.3 鏡像安全. 30
2.3 多階段鏡像構建 30
2.4 將鏡像存儲到遠程倉庫 32
2.5 Docker 容器運行時 . 34
2.5.1 通過Docker 運行容器 . 34
2.5.2 探索kuard 應用程序. 34
2.5.3 限制資源使用 35
2.6 清理 36
2.7 小結 37

第3 章 部署Kubernetes 集群 38
3.1 在公共雲上安裝Kubernetes 39
3.1.1 Google Kubernetes Engine . 39
3.1.2 使用Azure Kubernetes 服務安裝Kubernetes 40
3.1.3 在Amazon Web Services 上安裝Kubernetes 41
3.2 使用minikube 在本地安裝Kubernetes . 41
3.3 在Docker 中運行Kubernetes 42
3.4 在樹莓派上運行Kubernetes 43
3.5 Kubernetes 客戶端 43
3.5.1 檢查集群狀態 43
3.5.2 列出Kubernetes 的工作節點 44
3.6 集群組件 47
3.6.1 Kubernetes 代理 47
3.6.2 Kubernetes DNS . 48
3.6.3 Kubernetes 用戶界面 48
3.7 小結 49

第4 章 常用的kubectl 命令 .50
4.1 命名空間 50
4.2 上下文 50
4.3 查看Kubernetes API 對象 51
4.4 創建、更新和銷毀Kubernetes 對象 52
4.5 給對象添加標籤和註釋 54
4.6 調試命令 54
4.7 自動補齊命令 56
4.8 查看集群的其他方法 . 57
4.9 小結 57

第5 章 Pod 58
5.1 Kubernetes 中的Pod 59
5.2 Pod 的應用思路 60
5.3 Pod 清單 61
5.3.1 創建Pod . 62
5.3.2 創建Pod 清單 62
5.4 運行Pod 63
5.4.1 查詢Pod 列表 63
5.4.2 Pod 的詳細信息 64
5.4.3 刪除Pod . 66
5.5 訪問Pod 66
5.5.1 使用端口轉發 66
5.5.2 通過日誌獲取更多信息 67
5.5.3 使用exec 在容器中運行命令 68
5.5.4 在容器之間複製文件 68
5.6 健康檢查 69
5.6.1 存活探針. 69
5.6.2 就緒探針. 71
5.6.3 健康檢查的類型 . 71
5.7 資源管理 71
5.7.1 資源請求:所需的少資源量 72
5.7.2 通過約束限制資源使用量 . 74
5.8 利用卷持久保存數據 . 75
5.8.1 在Pod 中使用卷 . 75
5.8.2 Pod 中卷的不同使用方式 76
5.8.3 使用遠程磁盤持久保存數據 . 77
5.9 綜合討論 78
5.10 小結 . 79

第6 章 標籤與註釋 .80
6.1 標籤 80
6.1.1 應用標籤. 82
6.1.2 修改標籤. 83
6.1.3 標籤選擇器 84
6.1.4 API 對像中的標籤選擇器 86
6.1.5 Kubernetes 架構中的標籤 87
6.2 註釋 88
6.3 清理 89
6.4 小結 90

第7 章 服務發現 91
7.1 什麼是服務發現? 91
7.2 服務對象 92
7.2.1 DNS 服務 93
7.2.2 就緒檢查. 95
7.3 向外公開集群服務 97
7.4 雲集成 98
7.5 高級集成 99
7.5.1 端點 99
7.5.2 手動發現服務 101
7.5.3 kube-proxy 與集群IP 102
7.5.4 集群IP 環境變量 . 103
7.6 連接到其他環境 104
7.7 清理 . 104
7.8 小結 . 105

第8 章 Ingress 的HTTP 負載均衡 106
8.1 Ingress 的規範與Ingress 控制器 107
8.2 安裝Contour 108
8.2.1 配置DNS. 109
8.2.2 配置本地的hosts 文件 109
8.3 使用Ingress . 110
8.3.1 簡單的用法 111
8.3.2 使用主機名 . 112
8.3.3 使用路徑 114
8.3.4 清理 115
8.4 Ingress 的高級話題和技巧 115
8.4.1 運行多個Ingress 控制器 . 115
8.4.2 多個Ingress 對象 . 116
8.4.3 Ingress 與命名空間 . 116
8.4.4 改寫路徑 117
8.4.5 提供TLS . 117
8.5 Ingress 的其他實現 119
8.6 Ingress 的未來 119
8.7 小結 . 120

第9 章 副本集 121
9.1 協調循環 122
9.2 Pod 與副本集的關聯 123
9.2.1 採用現有的容器 123
9.2.2 隔離容器 124
9.3 副本集的設計思想 124
9.4 副本集的規範 . 124
9.4.1 Pod 模板 125
9.4.2 標籤 125
9.5 創建副本集 126
9.6 檢查副本集 126
9.6.1 根據Pod 查找副本集 . 127
9.6.2 查找副本集管理的Pod 集合 . 127
9.7 副本集的伸縮 . 128
9.7.1 副本集的命令式伸縮:kubectl scale . 128
9.7.2 副本集的聲明式伸縮:kubectl apply 129
9.7.3 自動伸縮副本集 130
9.8 刪除副本集 131
9.9 小結 . 132

第10 章 部署 . 133
10.1 個部署 134
10.2 創建部署 . 136
10.3 管理部署 . 138
10.4 更新部署 . 139
10.4.1 擴展部署 139
10.4.2 更新容器鏡像 . 140
10.4.3 推出的歷史記錄 142
10.5 部署策略 . 145
10.5.1 重建策略 145
10.5.2 滾動更新策略 . 145
10.5.3 放慢部署速度以確保服務健康 149
10.6 刪除部署 . 151
10.7 監控部署 . 151
10.8 小結 152

第11 章 守護進程集 . 153
11.1 守護進程集調度器 . 154
11.2 創建守護進程集 155
11.3 將守護進程集限製到特定節點 157
11.3.1 向節點添加標籤 . 157
11.3.2 節點選擇器 158
11.4 更新守護進程集 159
11.5 刪除守護進程集 161
11.6 小結 161

第12 章 作業 . 162
12.1 作業對象 . 162
12.2 作業模式 . 163
12.2.1 一次性作業 163
12.2.2 並行性 168
12.2.3 工作隊列 170
12.3 定時作業 . 175
12.4 小結 176

第13 章 ConfigMap 與Secret 177
13.1 ConfigMap . 177
13.1.1 創建ConfigMap . 178
13.1.2 使用ConfigMap . 179
13.2 Secret 182
13.2.1 創建Secret 183
13.2.2 消費Secret 184
13.2.3 私有Docker 倉庫 186
13.3 命名約束 . 187
13.4 管理ConfigMap 和Secret 188
13.4.1 顯示列表 188
13.4.2 創建 . 189
13.4.3 更新 . 190
13.5 小結 192

第14 章 基於角色的訪問控制 193
14.1 基於角色的訪問控制 194
14.1.1 Kubernetes 中的身份 194
14.1.2 角色和角色綁定 195
14.1.3 Kubernetes 中的角色和角色綁定 196
14.2 RBAC 的管理技巧 . 199
14.2.1 使用can-i 測試授權 . 199
14.2.2 通過源代碼控制管理RBAC 199
14.3 高級主題 . 200
14.3.1 聚合ClusterRoles . 200
14.3.2 使用組進行綁定 201
14.4 小結 203

第15 章 存儲解決方案與Kubernetes 的集成 204
15.1 導入外部服務 205
15.1.1 沒有選擇器的服務 207
15.1.2 外部服務的局限性:健康檢查 209
15.2 運行可靠的單例 209
15.2.1 運行MySQL 單例服務 209
15.2.2 動態卷供應 214
15.3 利用狀態集實現Kubernetes 原生存儲 215
15.3.1 狀態集的屬性 . 215
15.3.2 利用狀態集手動複製MongoDB 216
15.3.3 自動化MongoDB 集群的創建 219
15.3.4 持久卷與狀態集 222
15.3.5 後一步:存活探針 223
15.4 小結 224

第16 章 擴展Kubernetes . 225
16.1 擴展Kubernetes 意味著什麼 226
16.2 可擴展點 . 226
16.3 定制資源的模式 236
16.3.1 僅有數據 236
16.3.2 編譯器 237
16.3.3 操作器 237
16.3.4 如何入門 238
16.4 小結 238

第17 章 部署實際應用程序 239
17.1 Jupyter . 239
17.2 Parse . 241
17.2.1 前提條件 242
17.2.2 構建Parse 服務器 . 242
17.2.3 部署parse-server 242
17.2.4 測試Parse . 244
17.3 Ghost. 244
17.4 Redis . 248
17.4.1 配置Redis 249
17.4.2 創建Redis 服務 . 251
17.4.3 部署Redis 251
17.4.4 使用Redis 集群 . 253
17.5 小結 254

第18 章 組織應用程序 256
18.1 我們的指導原則 256
18.1.1 以文件為準 257
18.1.2 代碼審查的作用 257
18.1.3 特性門控 258
18.2 在源代碼管理中管理應用程序 259
18.2.1 文件系統的佈局 259
18.2.2 管理週期性的版本 260
18.3 為開發、測試與部署組織應用程序的結構 262
18.3.1 目標 . 262
18.3.2 發布的進展 263
18.4 使用模板為應用程序添加參數 264
18.4.1 使用Helm 和模板實現參數化 265
18.4.2 在文件系統佈局中使用參數 266
18.5 部署全球性的應用程序 266
18.5.1 全球部署架構 . 267
18.5.2 實現全球部署 . 268
18.5.3 面向全球部署的儀表板和監視 270
18.6 小結 270
附錄 利用樹莓派搭建Kubernetes 集群 271
作者介紹 281
封面介紹 281