關(guān)于我們
書單推薦
新書推薦
|
Kubernetes in Action中文版 讀者對象:本書適合系統(tǒng)架構(gòu)師、開發(fā)和測試人員、運維人員閱讀,對企業(yè) IT 主管、系統(tǒng)管理員、平臺管理員、SRE 人員等同樣具有參考價值,當然也可作為高等院校云計算及容器技術(shù)方向的專業(yè)教材。
本書主要講解如何在 Kubernetes 中部署分布式容器應(yīng)用。本書開始部分概要介紹了 Docker 和Kubernetes 的由來和發(fā)展,然后通過在 Kubernetes 中部署一個應(yīng)用程序,一點點增加功能,逐步加深我們對于Kubernetes架構(gòu)的理解和操作的實踐。在本書的后面部分,也可以學習一些高階的主題,比如監(jiān)控、調(diào)試及伸縮。Kubernetes是希臘文,意思是“舵手”,帶領(lǐng)我們安全地到達未知水域。Kubernetes這樣的容器編排系統(tǒng),會幫助我們妥善地管理分布式應(yīng)用的部署結(jié)構(gòu)和線上流量,高效地組織容器和服務(wù)。Kubernetes 作為數(shù)據(jù)中心操作系統(tǒng),在設(shè)計軟件系統(tǒng)時,能夠盡量降低在底層網(wǎng)絡(luò)和硬件設(shè)施上的負擔。
Marko Luk?a是一位擁有20年以上專業(yè)開發(fā)經(jīng)驗的軟件工程師,經(jīng)手項目小到簡單的Web應(yīng)用,大到ERP系統(tǒng)、框架和中間件軟件,應(yīng)有盡有。在為Red Hat工作期間,他從Google App Engine API實現(xiàn)的開發(fā)起步, 這些API將基于Red Hat的JBoss中間件產(chǎn)品,之后他一直在為CDI/Weld、Infinispan/JBoss DataGrid等項目貢獻力量。2014后, 他加入Red Hat的Cloud Enablement團隊,負責 Kubernetes和相關(guān)技術(shù)開發(fā)的更新,保障公司的中間件軟件能將Kubernetes與OpenShift特性的潛能用到極致。
七牛容器云 (KIRK)團隊,是負責七牛云基于自身公有云業(yè)務(wù)在容器方面的多年實踐經(jīng)驗,針對企業(yè)應(yīng)用快速部署、便捷運維打造的容器云計算平臺。提供持續(xù)集成、彈性伸縮、應(yīng)用市場等功能特性,使企業(yè)專注于業(yè)務(wù)邏輯開發(fā),縮短業(yè)務(wù)上線周期,優(yōu)化資源利用率,提高服務(wù)響應(yīng)效率的一支技術(shù)團隊。
1 Kubernetes 介紹 .....................................................................1
1.1 Kubernetes 系統(tǒng)的需求 ...................................................................................2
1.1.1 從單體應(yīng)用到微服務(wù) ..........................................................................2
1.1.2 為應(yīng)用程序提供一個一致的環(huán)境 ......................................................5
1.1.3 邁向持續(xù)交付 :DevOps 和無運維 ....................................................6
1.2 介紹容器技術(shù) ..................................................................................................7
1.2.1 什么是容器 ..........................................................................................7
1.2.2 Docker 容器平臺介紹 ....................................................................... 11
1.2.3 rkt——一個 Docker 的替代方案 ......................................................14
1.3 Kubernetes 介紹 .............................................................................................15
1.3.1 初衷 ....................................................................................................15
1.3.2 深入淺出地了解 Kubernetes .............................................................15
1.3.3 Kubernetes 集群架構(gòu) .........................................................................17
1.3.4 在 Kubernetes 中運行應(yīng)用 ................................................................18
1.3.5 使用 Kubernetes 的好處 ....................................................................20
1.4 本章小結(jié) ........................................................................................................22
2 開始使用 Kubernetes 和 Docker ..............................................23
2.1 創(chuàng)建、運行及共享容器鏡像 ........................................................................23
2.1.1 安裝 Docker 并運行 Hello World 容器 .............................................24
2.1.2 創(chuàng)建一個簡單的 Node.js 應(yīng)用 ..........................................................26
2.1.3 為鏡像創(chuàng)建 Dockerfile ......................................................................27
2.1.4 構(gòu)建容器鏡像 ....................................................................................27
2.1.5 運行容器鏡像 ....................................................................................30
2.1.6 探索運行容器的內(nèi)部 ........................................................................31
2.1.7 停止和刪除容器 ................................................................................32
2.1.8 向鏡像倉庫推送鏡像 ........................................................................33
2.2 配置 Kubernetes 集群 ....................................................................................34
2.2.1 用 Minikube 運行一個本地單節(jié)點 Kubernetes 集群 ......................34
2.2.2 使用 Google Kubernetes Engine 托管 Kubernetes 集群 ...................36
2.2.3 為 kubectl 配置別名和命令行補齊 ..................................................39
2.3 在 Kubernetes 上運行第一個應(yīng)用 ................................................................40
2.3.1 部署 Node.js 應(yīng)用 ..............................................................................40
2.3.2 訪問 Web 應(yīng)用 ...................................................................................43
2.3.3 系統(tǒng)的邏輯部分 ................................................................................45
2.3.4 水平伸縮應(yīng)用 ....................................................................................46
2.3.5 查看應(yīng)用運行在哪個節(jié)點上 ............................................................49
2.3.6 介紹 Kubernetes dashboard ...............................................................50
2.4 本章小結(jié) ........................................................................................................51
3 pod :運行于 Kubernetes 中的容器 ..........................................53
3.1 介紹 pod .........................................................................................................53
3.1.1 為何需要 pod .....................................................................................54
3.1.2 了解 pod .............................................................................................55
3.1.3 通過 pod 合理管理容器 ....................................................................56
3.2 以 YAML 或 JSON 描述文件創(chuàng)建 pod ........................................................58
3.2.1 檢查現(xiàn)有 pod 的 YAML 描述文件 ...................................................59
3.2.2 為 pod 創(chuàng)建一個簡單的 YAML 描述文件 .......................................61
3.2.3 使用 kubectl create 來創(chuàng)建 pod .........................................................63
3.2.4 查看應(yīng)用程序日志 ............................................................................64
3.2.5 向 pod 發(fā)送請求 ................................................................................65
3.3 使用標簽組織 pod .........................................................................................66
3.3.1 介紹標簽 ............................................................................................66
3.3.2 創(chuàng)建 pod 時指定標簽 ........................................................................67
3.3.3 修改現(xiàn)有 pod 的標簽 ........................................................................68
3.4 通過標簽選擇器列出 pod 子集 ....................................................................69
3.4.1 使用標簽選擇器列出 pod .................................................................69
3.4.2 在標簽選擇器中使用多個條件 ........................................................71
3.5 使用標簽和選擇器來約束 pod 調(diào)度 ............................................................71
3.5.1 使用標簽分類工作節(jié)點 ....................................................................72
3.5.2 將 pod 調(diào)度到特定節(jié)點 ....................................................................72
3.5.3 調(diào)度到一個特定節(jié)點 ........................................................................73
3.6 注解 pod .........................................................................................................73
3.6.1 查找對象的注解 ................................................................................74
3.6.2 添加和修改注解 ................................................................................74
3.7 使用命名空間對資源進行分組 ....................................................................75
3.7.1 了解對命名空間的需求 ....................................................................75
3.7.2 發(fā)現(xiàn)其他命名空間及其 pod .............................................................75
3.7.3 創(chuàng)建一個命名空間 ............................................................................76
3.7.4 管理其他命名空間中的對象 ............................................................77
3.7.5 命名空間提供的隔離 ........................................................................78
3.8 停止和移除 pod .............................................................................................78
3.8.1 按名稱刪除 pod .................................................................................78
3.8.2 使用標簽選擇器刪除 pod .................................................................79
3.8.3 通過刪除整個命名空間來刪除 pod .................................................80
3.8.4 刪除命名空間中的所有 pod,但保留命名空間 .............................80
3.8.5 刪除命名空間中的(幾乎)所有資源 ............................................80
3.9 本章小結(jié) ........................................................................................................81
4 副本機制和其他控制器 :部署托管的 pod .................................83
4.1 保持 pod 健康 ................................................................................................84
4.1.1 介紹存活探針 ....................................................................................84
4.1.2 創(chuàng)建基于 HTTP 的存活探針 ............................................................85
4.1.3 使用存活探針 ....................................................................................86
4.1.4 配置存活探針的附加屬性 ................................................................87
4.1.5 創(chuàng)建有效的存活探針 ........................................................................88
4.2 了解 ReplicationController ............................................................................89
4.2.1 ReplicationController 的操作 ............................................................90
4.2.2 創(chuàng)建一個 ReplicationController ........................................................92
4.2.3 使用 ReplicationController ................................................................94
4.2.4 將 pod 移入或移出 ReplicationController 的作用域 .......................97
4.2.5 修改 pod 模板 ..................................................................................100
4.2.6 水平縮放 pod ...................................................................................101
4.2.7 刪除一個 ReplicationController ......................................................103
4.3 使用 ReplicaSet 而不是 ReplicationController ...........................................104
4.3.1 比較 ReplicaSet 和 ReplicationController .......................................104
4.3.2 定義 ReplicaSet ................................................................................105
4.3.3 創(chuàng)建和檢查 ReplicaSet ....................................................................106
4.3.4 使用 ReplicaSet 的更富表達力的標簽選擇器 ...............................106
4.3.5 ReplicaSet 小結(jié) ................................................................................107
4.4 使用 DaemonSet 在每個節(jié)點上運行一個 pod ...........................................107
4.4.1 使用 DaemonSet 在每個節(jié)點上運行一個 pod ..............................108
4.4.2 使用 DaemonSet 只在特定的節(jié)點上運行 pod ..............................109
4.5 運行執(zhí)行單個任務(wù)的 pod ........................................................................... 112
4.5.1 介紹 Job 資源 ................................................................................... 112
4.5.2 定義 Job 資源 ................................................................................... 113
4.5.3 看 Job 運行一個 pod ........................................................................ 114
4.5.4 在 Job 中運行多個 pod 實例 ........................................................... 114
4.5.5 限制 Job pod 完成任務(wù)的時間 ........................................................ 116
4.6 安排 Job 定期運行或在將來運行一次 ....................................................... 116
4.6.1 創(chuàng)建一個 CronJob ............................................................................ 116
4.6.2 了解計劃任務(wù)的運行方式 .............................................................. 118
4.7 本章小結(jié) ...................................................................................................... 118
5 服務(wù) :讓客戶端發(fā)現(xiàn) pod 并與之通信 .....................................121
5.1 介紹服務(wù) ......................................................................................................122
5.1.1 創(chuàng)建服務(wù) ..........................................................................................123
5.1.2 服務(wù)發(fā)現(xiàn) ..........................................................................................129
5.2 連接集群外部的服務(wù) ..................................................................................132
5.2.1 介紹服務(wù) endpoint ...........................................................................133
5.2.2 手動配置服務(wù)的 endpoint ...............................................................133
5.2.3 為外部服務(wù)創(chuàng)建別名 ......................................................................135
5.3 將服務(wù)暴露給外部客戶端 ..........................................................................136
5.3.1 使用 NodePort 類型的服務(wù) .........................................................137
5.3.2 通過負載均衡器將服務(wù)暴露出來 ..................................................140
5.3.3 了解外部連接的特性 ......................................................................142
5.4 通過 Ingress 暴露服務(wù) .................................................................................143
5.4.1 創(chuàng)建 Ingress 資源 .............................................................................145
5.4.2 通過 Ingress 訪問服務(wù) .....................................................................146
5.4.3 通過相同的 Ingress 暴露多個服務(wù) .................................................147
5.4.4 配置 Ingress 處理 TLS 傳輸 ...........................................................149
5.5 pod 就緒后發(fā)出信號 ...................................................................................150
5.5.1 介紹就緒探針 ..................................................................................151
5.5.2 向 pod 添加就緒探針 ......................................................................152
5.5.3 了解就緒探針的實際作用 ..............................................................154
5.6 使用 headless 服務(wù)來發(fā)現(xiàn)獨立的 pod ........................................................155
5.6.1 創(chuàng)建 headless 服務(wù) ...........................................................................156
5.6.2 通過 DNS 發(fā)現(xiàn) pod .........................................................................156
5.6.3 發(fā)現(xiàn)所有的 pod——包括未就緒的 pod.........................................157
5.7 排除服務(wù)故障 ..............................................................................................158
5.8 本章小結(jié) ......................................................................................................159
6 卷 :將磁盤掛載到容器 .........................................................161
6.1 介紹卷 ..........................................................................................................162
6.1.1 卷的應(yīng)用示例 .................................................................................162
6.1.2 介紹可用的卷類型 ..........................................................................164
6.2 通過卷在容器之間共享數(shù)據(jù) ......................................................................165
6.2.1 使用 emptyDir 卷 .............................................................................165
6.2.2 使用 Git 倉庫作為存儲卷 ...............................................................168
6.3 訪問工作節(jié)點文件系統(tǒng)上的文件 ..............................................................171
6.3.1 介紹 hostPath 卷 ..............................................................................171
6.3.2 檢查使用 hostPath 卷的系統(tǒng) pod ...................................................172
6.4 使用持久化存儲 ..........................................................................................173
6.4.1 使用 GCE 持久磁盤作為 pod 存儲卷 ............................................174
6.4.2 通過底層持久化存儲使用其他類型的卷 ......................................177
6.5 從底層存儲技術(shù)解耦 pod ...........................................................................179
6.5.1 介紹持久卷和持久卷聲明 ..............................................................179
6.5.2 創(chuàng)建持久卷 ......................................................................................180
6.5.3 通過創(chuàng)建持久卷聲明來獲取持久卷 ..............................................182
6.5.4 在 pod 中使用持久卷聲明 ..............................................................184
6.5.5 了解使用持久卷和持久卷聲明的好處 ..........................................185
6.5.6 回收持久卷 ......................................................................................186
6.6 持久卷的動態(tài)卷配置 ..................................................................................187
6.6.1 通過 StorageClass 資源定義可用存儲類型 ...................................188
6.6.2 請求持久卷聲明中的存儲類 ..........................................................188
6.6.3 不指定存儲類的動態(tài)配置 ..............................................................190
6.7 本章小結(jié) ......................................................................................................193
7 ConfigMap 和 Secret :配置應(yīng)用程序 .....................................195
7.1 配置容器化應(yīng)用程序 ..................................................................................195
7.2 向容器傳遞命令行參數(shù) ..............................................................................196
7.2.1 在 Docker 中定義命令與參數(shù) ........................................................196
7.2.2 在 Kubernetes 中覆蓋命令和參數(shù) ..................................................199
7.3 為容器設(shè)置環(huán)境變量 ..................................................................................200
7.3.1 在容器定義中指定環(huán)境變量 ..........................................................201
7.3.2 在環(huán)境變量值中引用其他環(huán)境變量 ..............................................201
7.3.3 了解硬編碼環(huán)境變量的不足之處 ..................................................202
7.4 利用 ConfigMap 解耦配置 ..........................................................................202
7.4.1 ConfigMap 介紹 ...............................................................................202
7.4.2 創(chuàng)建 ConfigMap ...............................................................................203
7.4.3 給容器傳遞 ConfigMap 條目作為環(huán)境變量 ..................................206
7.4.4 一次性傳遞 ConfigMap 的所有條目作為環(huán)境變量 ......................208
7.4.5 傳遞 ConfigMap 條目作為命令行參數(shù) ..........................................209
7.4.6 使用 configMap 卷將條目暴露為文件 ...........................................210
7.4.7 更新應(yīng)用配置且不重啟應(yīng)用程序 ..................................................216
7.5 使用 Secret 給容器傳遞敏感數(shù)據(jù) ..............................................................218
7.5.1 介紹 Secret .......................................................................................218
7.5.2 默認令牌 Secret 介紹 ......................................................................218
7.5.3 創(chuàng)建 Secret .......................................................................................220
7.5.4 對比 ConfigMap 與 Secret ...............................................................221
7.5.5 在 pod 中使用 Secret .......................................................................222
7.6 本章小結(jié) ......................................................................................................228
8 從應(yīng)用訪問 pod 元數(shù)據(jù)以及其他資源 .....................................229
8.1 通過 Downward API 傳遞元數(shù)據(jù) ...............................................................229
8.1.1 了解可用的元數(shù)據(jù) ..........................................................................230
8.1.2 通過環(huán)境變量暴露元數(shù)據(jù) ..............................................................231
8.1.3 通過 downwardAPI 卷來傳遞元數(shù)據(jù) .............................................234
8.2 與 Kubernetes API 服務(wù)器交互 ...................................................................237
8.2.1 探究 Kubernetes REST API .............................................................238
8.2.2 從 pod 內(nèi)部與 API 服務(wù)器進行交互 ..............................................242
8.2.3 通過 ambassador 容器簡化與 API 服務(wù)器的交互 .........................248
8.2.4 使用客戶端庫與 API 服務(wù)器交互 ..................................................251
8.3 本章小結(jié) ......................................................................................................253
9 Deployment: 聲明式地升級應(yīng)用 ...........................................255
9.1 更新運行在 pod 內(nèi)的應(yīng)用程序 ..................................................................256
9.1.1 刪除舊版本 pod,使用新版本 pod 替換 .......................................257
9.1.2 先創(chuàng)建新 pod 再刪除舊版本 pod ...................................................257
9.2 使用 ReplicationController 實現(xiàn)自動的滾動升級 .....................................259
9.2.1 運行第一個版本的應(yīng)用 ..................................................................259
9.2.2 使用 kubectl 來執(zhí)行滾動式升級 ....................................................261
9.2.3 為什么 kubectl rolling-update 已經(jīng)過時 .........................................265
9.3 使用 Deployment 聲明式地升級應(yīng)用.........................................................266
9.3.1 創(chuàng)建一個 Deployment .....................................................................267
9.3.2 升級 Deployment .............................................................................269
9.3.3 回滾 Deployment .............................................................................273
9.3.4 控制滾動升級速率 ..........................................................................276
9.3.5 暫停滾動升級 ..................................................................................278
9.3.6 阻止出錯版本的滾動升級 ..............................................................279
9.4 本章小結(jié) ......................................................................................................284
10 StatefulSet :部署有狀態(tài)的多副本應(yīng)用 ................................285
10.1 復制有狀態(tài) pod .........................................................................................285
10.1.1 運行每個實例都有單獨存儲的多副本 ........................................286
10.1.2 每個 pod 都提供穩(wěn)定的標識 ........................................................287
10.2 了解 Statefulset ..........................................................................................289
10.2.1 對比 Statefulset 和 ReplicaSet .......................................................289
10.2.2 提供穩(wěn)定的網(wǎng)絡(luò)標識 ....................................................................290
10.2.3 為每個有狀態(tài)實例提供穩(wěn)定的專屬存儲 ....................................292
10.2.4 Statefulset 的保障 ..........................................................................294
10.3 使用 Statefulset ..........................................................................................295
10.3.1 創(chuàng)建應(yīng)用和容器鏡像 ....................................................................295
10.3.2 通過 Statefulset 部署應(yīng)用 .............................................................296
10.3.3 使用你的 pod .................................................................................301
10.4 在 Statefulset 中發(fā)現(xiàn)伙伴節(jié)點 .................................................................305
10.4.1 通過 DNS 實現(xiàn)伙伴間彼此發(fā)現(xiàn) ..................................................306
10.4.2 更新 Statefulset ..............................................................................308
10.4.3 嘗試集群數(shù)據(jù)存儲 ........................................................................309
10.5 了解 Statefulset 如何處理節(jié)點失效 .........................................................310
10.5.1 模擬一個節(jié)點的網(wǎng)絡(luò)斷開 ............................................................310
10.5.2 手動刪除 pod .................................................................................312
10.6 本章小結(jié) ....................................................................................................313
11 了解 Kubernetes 機理 ........................................................315
11.1 了解架構(gòu) ...................................................................................................315
11.1.1 Kubernetes 組件的分布式特性 .....................................................316
11.1.2 Kubernetes 如何使用 etcd .............................................................318
11.1.3 API 服務(wù)器做了什么 .....................................................................322
11.1.4 API 服務(wù)器如何通知客戶端資源變更 .........................................324
11.1.5 了解調(diào)度器 ....................................................................................325
11.1.6 介紹控制器管理器中運行的控制器 ............................................327
11.1.7 Kubelet 做了什么 ...........................................................................331
11.1.8 Kubernetes Service Proxy 的作用 .................................................332
11.1.9 介紹 Kubernetes 插件 ....................................................................333
11.1.10 總結(jié)概覽 ......................................................................................335
11.2 控制器如何協(xié)作 ........................................................................................335
11.2.1 了解涉及哪些組件 ........................................................................335
11.2.2 事件鏈 ............................................................................................336
11.2.3 觀察集群事件 ................................................................................337
11.3 了解運行中的 pod 是什么 ........................................................................339
11.4 跨 pod 網(wǎng)絡(luò) ................................................................................................340
11.4.1 網(wǎng)絡(luò)應(yīng)該是什么樣的 ....................................................................340
11.4.2 深入了解網(wǎng)絡(luò)工作原理 ................................................................341
11.4.3 引入容器網(wǎng)絡(luò)接口 ........................................................................343
11.5 服務(wù)是如何實現(xiàn)的 ....................................................................................344
11.5.1 引入 kube-proxy .............................................................................344
11.5.2 kube-proxy 如何使用 iptables .......................................................344
11.6 運行高可用集群 ........................................................................................346
11.6.1 讓你的應(yīng)用變得高可用 ................................................................346
11.6.2 讓 Kubernetes 控制平面變得高可用 ............................................347
11.7 本章小結(jié) ....................................................................................................350
12 Kubernetes API 服務(wù)器的安全防護 .....................................351
12.1 了解認證機制 ............................................................................................351
12.1.1 用戶和組 ........................................................................................352
12.1.2 ServiceAccount 介紹 ......................................................................353
12.1.3 創(chuàng)建 ServiceAccount ......................................................................354
12.1.4 將 ServiceAccount 分配給 pod ......................................................356
12.2 通過基于角色的權(quán)限控制加強集群安全 ................................................358
12.2.1 介紹 RBAC 授權(quán)插件 ...................................................................359
12.2.2 介紹 RBAC 資源 ...........................................................................360
12.2.3 使用 Role 和 RoleBinding .............................................................363
12.2.4 使用 ClusterRole 和 ClusterRoleBinding ......................................367
12.2.5 了解默認的 ClusterRole 和 ClusterRoleBinding ..........................376
12.2.6 理性地授予授權(quán)權(quán)限 ....................................................................379
12.3 本章小結(jié) ....................................................................................................379
13 保障集群內(nèi)節(jié)點和網(wǎng)絡(luò)安全 ................................................381
13.1 在 pod 中使用宿主節(jié)點的 Linux 命名空間 .............................................381
13.1.1 在 pod 中使用宿主節(jié)點的網(wǎng)絡(luò)命名空間 ....................................382
13.1.2 綁定宿主節(jié)點上的端口而不使用宿主節(jié)點的網(wǎng)絡(luò)命名空間 .......383
13.1.3 使用宿主節(jié)點的 PID 與 IPC 命名空間 .......................................385
13.2 配置節(jié)點的安全上下文 ............................................................................386
13.2.1 使用指定用戶運行容器 ................................................................387
13.2.2 阻止容器以 root 用戶運行 ............................................................388
13.2.3 使用特權(quán)模式運行 pod .................................................................389
13.2.4 為容器單獨添加內(nèi)核功能 ............................................................390
13.2.5 在容器中禁用內(nèi)核功能 ................................................................391
13.2.6 阻止對容器根文件系統(tǒng)的寫入 ....................................................392
13.2.7 容器使用不同用戶運行時共享存儲卷 ........................................394
13.3 限制 pod 使用安全相關(guān)的特性 ................................................................396
13.3.1 PodSecurityPolicy 資源介紹 .........................................................396
13.3.2 了解 runAsUser、 fsGroup 和 supplementalGroup 策略 ...............398
13.3.3 配置允許、默認添加、禁止使用的內(nèi)核功能 ............................400
13.3.4 限制 pod 可以使用的存儲卷類型 ................................................402
13.3.5 對不同的用戶與組分配不同的 PodSecurityPolicy .....................402
13.4 隔離 pod 的網(wǎng)絡(luò) ........................................................................................406
13.4.1 在一個命名空間中啟用網(wǎng)絡(luò)隔離 ................................................406
13.4.2 允許同一命名空間中的部分 pod 訪問一個服務(wù)端 pod ...............407
13.4.3 在不同 Kubernetes 命名空間之間進行網(wǎng)絡(luò)隔離 ........................408
13.4.4 使用 CIDR 隔離網(wǎng)絡(luò) .....................................................................409
13.4.5 限制 pod 的對外訪問流量 ............................................................409
13.5 本章小結(jié) ....................................................................................................410
14 計算資源管理 ...................................................................411
14.1 為 pod 中的容器申請資源 ........................................................................ 411
14.1.1 創(chuàng)建包含資源 requests 的 pod ......................................................412
14.1.2 資源 requests 如何影響調(diào)度 .........................................................413
14.1.3 CPU requests 如何影響 CPU 時間分配 .......................................418
14.1.4 定義和申請自定義資源 ................................................................418
14.2 限制容器的可用資源 ................................................................................419
14.2.1 設(shè)置容器可使用資源量的硬限制 ................................................419
14.2.2 超過 limits ......................................................................................421
14.2.3 容器中的應(yīng)用如何看待 limits ......................................................422
14.3 了解 pod QoS 等級 ....................................................................................423
14.3.1 定義 pod 的 QoS 等級 ...................................................................424
14.3.2 內(nèi)存不足時哪個進程會被殺死 ....................................................426
14.4 為命名空間中的 pod 設(shè)置默認的 requests 和 limits ...............................427
14.4.1 LimitRange 資源簡介 ....................................................................428
14.4.2 LimitRange 對象的創(chuàng)建 ................................................................428
14.4.3 強制進行限制 ................................................................................430
14.4.4 應(yīng)用資源 requests 和 limits 的默認值 ..........................................430
14.5 限制命名空間中的可用資源總量 ............................................................431
14.5.1 ResourceQuota 資源介紹 ..............................................................431
14.5.2 為持久化存儲指定配額 ................................................................434
14.5.3 限制可創(chuàng)建對象的個數(shù) ................................................................434
14.5.4 為特定的 pod 狀態(tài)或者 QoS 等級指定配額 ...............................435
14.6 監(jiān)控 pod 的資源使用量 ............................................................................436
14.6.1 收集、獲取實際資源使用情況 ....................................................437
14.6.2 保存并分析歷史資源的使用統(tǒng)計信息 ........................................439
14.7 本章小結(jié) ....................................................................................................442
15 自動橫向伸縮 pod 與集群節(jié)點 ............................................443
15.1 pod 的橫向自動伸縮 .................................................................................444
15.1.1 了解自動伸縮過程 ........................................................................444
15.1.2 基于 CPU 使用率進行自動伸縮 ..................................................447
15.1.3 基于內(nèi)存使用進行自動伸縮 ........................................................453
15.1.4 基于其他自定義度量進行自動伸縮 ............................................453
15.1.5 確定哪些度量適合用于自動伸縮 ................................................456
15.1.6 縮容到 0 個副本 ............................................................................456
15.2 pod 的縱向自動伸縮 .................................................................................456
15.2.1 自動配置資源請求 ........................................................................457
xxviii 目 錄
15.2.2 修改運行中 pod 的資源請求 ........................................................457
15.3 集群節(jié)點的橫向伸縮 ................................................................................457
15.3.1 Cluster Autoscaler 介紹 .................................................................457
15.3.2 啟用 Cluster Autoscaler .................................................................459
15.3.3 限制集群縮容時的服務(wù)干擾 ........................................................460
15.4 本章小結(jié) ....................................................................................................461
16 高級調(diào)度 .........................................................................463
16.1 使用污點和容忍度阻止節(jié)點調(diào)度到特定節(jié)點 ........................................463
16.1.1 介紹污點和容忍度 ........................................................................464
16.1.2 在節(jié)點上添加自定義污點 ............................................................466
16.1.3 在 pod 上添加污點容忍度 ............................................................467
16.1.4 了解污點和污點容忍度的使用場景 ............................................467
16.2 使用節(jié)點親緣性將 pod 調(diào)度到特定節(jié)點上 ............................................469
16.2.1 指定強制性節(jié)點親緣性規(guī)則 ........................................................470
16.2.2 調(diào)度 pod 時優(yōu)先考慮某些節(jié)點 ....................................................472
16.3 使用 pod 親緣性與非親緣性對 pod 進行協(xié)同部署 ................................475
16.3.1 使用 pod 間親緣性將多個 pod 部署在同一個節(jié)點上 ................475
16.3.2 將 pod 部署在同一機柜、可用性區(qū)域或者地理地域 ................478
16.3.3 表達 pod 親緣性優(yōu)先級取代強制性要求 ....................................479
16.3.4 利用 pod 的非親緣性分開調(diào)度 pod .............................................481
16.4 本章小結(jié) ....................................................................................................483
17 開發(fā)應(yīng)用的最佳實踐 .........................................................485
17.1 集中一切資源 ............................................................................................486
17.2 了解 pod 的生命周期 ................................................................................487
17.2.1 應(yīng)用必須預(yù)料到會被殺死或者重新調(diào)度 ....................................487
17.2.2 重新調(diào)度死亡的或者部分死亡的 pod .........................................490
17.2.3 以固定順序啟動 pod .....................................................................491
17.2.4 增加生命周期鉤子 ........................................................................493
17.2.5 了解 pod 的關(guān)閉 ............................................................................497
17.3 確保所有的客戶端請求都得到了妥善處理 ............................................500
17.3.1 在 pod 啟動時避免客戶端連接斷開 ............................................500
17.3.2 在 pod 關(guān)閉時避免客戶端連接斷開 ............................................501
17.4 讓應(yīng)用在 Kubernetes 中方便運行和管理 ................................................505
17.4.1 構(gòu)建可管理的容器鏡像 ................................................................505
17.4.2 合理地給鏡像打標簽,正確地使用 ImagePullPolicy ................506
17.4.3 使用多維度而不是單維度的標簽 ................................................506
17.4.4 通過注解描述每個資源 ................................................................506
17.4.5 給進程終止提供更多的信息 ........................................................507
17.4.6 處理應(yīng)用日志 ................................................................................508
17.5 開發(fā)和測試的最佳實踐 ............................................................................510
17.5.1 開發(fā)過程中在 Kubernetes 之外運行應(yīng)用 ....................................510
17.5.2 在開發(fā)過程中使用 Minikube ........................................................512
17.5.3 發(fā)布版本和自動部署資源清單 ....................................................513
17.5.4 使用 Ksonnet 作為編寫 YAML/JSON manifest
文件的額外選擇 ............................................................................513
17.5.5 利用持續(xù)集成和持續(xù)交付 ............................................................514
17.6 本章小結(jié) ....................................................................................................515
18 Kubernetes 應(yīng)用擴展 ........................................................517
18.1 定義自定義 API 對象 ................................................................................517
18.1.1 CustomResourceDefinitions 介紹 ..................................................518
18.1.2 使用自定義控制器自動定制資源 ................................................522
18.1.3 驗證自定義對象 ............................................................................526
18.1.4 為自定義對象提供自定義 API 服務(wù)器 ........................................527
18.2 使用 Kubernetes 服務(wù)目錄擴展 Kubernetes .............................................528
18.2.1 服務(wù)目錄介紹 ................................................................................529
18.2.2 服務(wù)目錄 API 服務(wù)器與控制器管理器介紹 ................................530
18.2.3 Service 代理和 OpenServiceBroker API .......................................530
18.2.4 提供服務(wù)與使用服務(wù) ....................................................................533
18.2.5 解除綁定與取消配置 ....................................................................535
18.2.6 服務(wù)目錄給我們帶來了什么 ........................................................535
18.3 基于 Kubernetes 搭建的平臺 ....................................................................536
18.3.1 紅帽 OpenShift 容器平臺 ..............................................................536
18.3.2 Deis Workflow 與 Helm .................................................................539
18.4 本章小結(jié) ....................................................................................................541
A 在多個集群中使用 kubectl ...................................................543
B 使用 kubeadm 配置多節(jié)點集群 ............................................549
C 使用其他容器運行時 ...........................................................563
D Cluster Federation .............................................................567
你還可能感興趣
我要評論
|