Kubernetes in Action (簡體中文版)
七牛容器雲團隊
- 出版商: 電子工業
- 出版日期: 2019-02-01
- 售價: $888
- 貴賓價: 9.5 折 $844
- 語言: 簡體中文
- 頁數: 592
- ISBN: 7121349957
- ISBN-13: 9787121349959
-
相關分類:
Kubernetes
- 此書翻譯自: Kubernetes in Action (Paperback) 銷售排行: 👍 2019 年度 簡體中文書 銷售排行 第 9 名
🥉 2019/3 簡體中文書 銷售排行 第 3 名
立即出貨 (庫存 < 4)
買這商品的人也買了...
-
$620$490 -
$650$507 -
$250Ceph 分佈式存儲學習指南 (Learning Ceph)
-
$780$663 -
$403Spring 微服務實戰 (Spring Microservices in Action)
-
$520$411 -
$403AWS 雲計算實戰 (Amazon Web Services in Action)
-
$680$537 -
$594$564 -
$313Elasticsearch 實戰 (Elasticsearch in Action)
-
$1,280$1,088 -
$454DevOps 和自動化運維實踐
-
$420$332 -
$454持續交付 2.0 業務引領的 DevOps 精要
-
$607Effective Java, 3/e (簡體中文版)
-
$480$379 -
$534$507 -
$352深入淺出 Docker
-
$680$578 -
$726微服務架構設計模式 (Microservices Patterns: With examples in Java)
-
$480$408 -
$720$612 -
$374企業級 Kubernetes 應用
-
$980$774 -
$520$411
相關主題
商品描述
本書主要講解如何在Kubernetes 中部署分佈式容器應用。
本書開始部分概要介紹了Docker 和Kubernetes 的由來和發展,然後通過在Kubernetes 中部署一個應用程序,一點點增加功能,逐步加深我們對於Kubernetes架構的理解和操作的實踐。
在本書的後面部分,也可以學習一些高階的主題,比如監控、調試及伸縮。Kubernetes是希臘文,意思是“舵手”,帶領我們安全地到達未知水域。
Kubernetes這樣的容器編排系統,會幫助我們妥善地管理分佈式應用的部署結構和線上流量,高效地組織容器和服務。
Kubernetes 作為數據中心操作系統,在設計軟件系統時,能夠盡量降低在底層網絡和硬件設施上的負擔。
目錄大綱
1 Kubernetes 介紹 .....................................................................1
1.1 Kubernetes 系統的需求 ...................................................................................2
1.1.1 從單體應用到微服務 ..........................................................................2
1.1.2 為應用程序提供一個一致的環境 ......................................................5
1.1.3 邁向持續交付 :DevOps 和無運維 ....................................................6
1.2 介紹容器技術 ..................................................................................................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 集群架構 .........................................................................17
1.3.4 在 Kubernetes 中運行應用 ................................................................18
1.3.5 使用 Kubernetes 的好處 ....................................................................20
1.4 本章小結 ........................................................................................................22
2 開始使用 Kubernetes 和 Docker ..............................................23
2.1 創建、運行及共享容器鏡像 ........................................................................23
2.1.1 安裝 Docker 並運行 Hello World 容器 .............................................24
2.1.2 創建一個簡單的 Node.js 應用 ..........................................................26
2.1.3 為鏡像創建 Dockerfile ......................................................................27
2.1.4 構建容器鏡像 ....................................................................................27
2.1.5 運行容器鏡像 ....................................................................................30
2.1.6 探索運行容器的內部 ........................................................................31
2.1.7 停止和刪除容器 ................................................................................32
2.1.8 向鏡像倉庫推送鏡像 ........................................................................33
2.2 配置 Kubernetes 集群 ....................................................................................34
2.2.1 用 Minikube 運行一個本地單節點 Kubernetes 集群 ......................34
2.2.2 使用 Google Kubernetes Engine 托管 Kubernetes 集群 ...................36
2.2.3 為 kubectl 配置別名和命令行補齊 ..................................................39
2.3 在 Kubernetes 上運行第一個應用 ................................................................40
2.3.1 部署 Node.js 應用 ..............................................................................40
2.3.2 訪問 Web 應用 ...................................................................................43
2.3.3 系統的邏輯部分 ................................................................................45
2.3.4 水平伸縮應用 ....................................................................................46
2.3.5 查看應用運行在哪個節點上 ............................................................49
2.3.6 介紹 Kubernetes dashboard ...............................................................50
2.4 本章小結 ........................................................................................................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 描述文件創建 pod ........................................................58
3.2.1 檢查現有 pod 的 YAML 描述文件 ...................................................59
3.2.2 為 pod 創建一個簡單的 YAML 描述文件 .......................................61
3.2.3 使用 kubectl create 來創建 pod .........................................................63
3.2.4 查看應用程序日誌 ............................................................................64
3.2.5 向 pod 發送請求 ................................................................................65
3.3 使用標簽組織 pod .........................................................................................66
3.3.1 介紹標簽 ............................................................................................66
3.3.2 創建 pod 時指定標簽 ........................................................................67
3.3.3 修改現有 pod 的標簽 ........................................................................68
3.4 通過標簽選擇器列出 pod 子集 ....................................................................69
3.4.1 使用標簽選擇器列出 pod .................................................................69
3.4.2 在標簽選擇器中使用多個條件 ........................................................71
3.5 使用標簽和選擇器來約束 pod 調度 ............................................................71
3.5.1 使用標簽分類工作節點 ....................................................................72
3.5.2 將 pod 調度到特定節點 ....................................................................72
3.5.3 調度到一個特定節點 ........................................................................73
3.6 註解 pod .........................................................................................................73
3.6.1 查找對象的註解 ................................................................................74
3.6.2 添加和修改註解 ................................................................................74
3.7 使用命名空間對資源進行分組 ....................................................................75
3.7.1 瞭解對命名空間的需求 ....................................................................75
3.7.2 發現其他命名空間及其 pod .............................................................75
3.7.3 創建一個命名空間 ............................................................................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 本章小結 ........................................................................................................81
4 副本機制和其他控制器 :部署托管的 pod .................................83
4.1 保持 pod 健康 ................................................................................................84
4.1.1 介紹存活探針 ....................................................................................84
4.1.2 創建基於 HTTP 的存活探針 ............................................................85
4.1.3 使用存活探針 ....................................................................................86
4.1.4 配置存活探針的附加屬性 ................................................................87
4.1.5 創建有效的存活探針 ........................................................................88
4.2 瞭解 ReplicationController ............................................................................89
4.2.1 ReplicationController 的操作 ............................................................90
4.2.2 創建一個 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 創建和檢查 ReplicaSet ....................................................................106
4.3.4 使用 ReplicaSet 的更富表達力的標簽選擇器 ...............................106
4.3.5 ReplicaSet 小結 ................................................................................107
4.4 使用 DaemonSet 在每個節點上運行一個 pod ...........................................107
4.4.1 使用 DaemonSet 在每個節點上運行一個 pod ..............................108
4.4.2 使用 DaemonSet 只在特定的節點上運行 pod ..............................109
4.5 運行執行單個任務的 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 完成任務的時間 ........................................................ 116
4.6 安排 Job 定期運行或在將來運行一次 ....................................................... 116
4.6.1 創建一個 CronJob ............................................................................ 116
4.6.2 瞭解計劃任務的運行方式 .............................................................. 118
4.7 本章小結 ...................................................................................................... 118
5 服務 :讓客戶端發現 pod 並與之通信 .....................................121
5.1 介紹服務 ......................................................................................................122
5.1.1 創建服務 ..........................................................................................123
5.1.2 服務發現 ..........................................................................................129
5.2 連接集群外部的服務 ..................................................................................132
5.2.1 介紹服務 endpoint ...........................................................................133
5.2.2 手動配置服務的 endpoint ...............................................................133
5.2.3 為外部服務創建別名 ......................................................................135
5.3 將服務暴露給外部客戶端 ..........................................................................136
5.3.1 使用 NodePort 類型的服務 .........................................................137
5.3.2 通過負載均衡器將服務暴露出來 ..................................................140
5.3.3 瞭解外部連接的特性 ......................................................................142
5.4 通過 Ingress 暴露服務 .................................................................................143
5.4.1 創建 Ingress 資源 .............................................................................145
5.4.2 通過 Ingress 訪問服務 .....................................................................146
5.4.3 通過相同的 Ingress 暴露多個服務 .................................................147
5.4.4 配置 Ingress 處理 TLS 傳輸 ...........................................................149
5.5 pod 就緒後發出信號 ...................................................................................150
5.5.1 介紹就緒探針 ..................................................................................151
5.5.2 向 pod 添加就緒探針 ......................................................................152
5.5.3 瞭解就緒探針的實際作用 ..............................................................154
5.6 使用 headless 服務來發現獨立的 pod ........................................................155
5.6.1 創建 headless 服務 ...........................................................................156
5.6.2 通過 DNS 發現 pod .........................................................................156
5.6.3 發現所有的 pod——包括未就緒的 pod.........................................157
5.7 排除服務故障 ..............................................................................................158
5.8 本章小結 ......................................................................................................159
6 捲 :將磁盤掛載到容器 .........................................................161
6.1 介紹捲 ..........................................................................................................162
6.1.1 捲的應用示例 .................................................................................162
6.1.2 介紹可用的捲類型 ..........................................................................164
6.2 通過捲在容器之間共享數據 ......................................................................165
6.2.1 使用 emptyDir 捲 .............................................................................165
6.2.2 使用 Git 倉庫作為存儲捲 ...............................................................168
6.3 訪問工作節點文件系統上的文件 ..............................................................171
6.3.1 介紹 hostPath 捲 ..............................................................................171
6.3.2 檢查使用 hostPath 捲的系統 pod ...................................................172
6.4 使用持久化存儲 ..........................................................................................173
6.4.1 使用 GCE 持久磁盤作為 pod 存儲捲 ............................................174
6.4.2 通過底層持久化存儲使用其他類型的捲 ......................................177
6.5 從底層存儲技術解耦 pod ...........................................................................179
6.5.1 介紹持久捲和持久捲聲明 ..............................................................179
6.5.2 創建持久捲 ......................................................................................180
6.5.3 通過創建持久捲聲明來獲取持久捲 ..............................................182
6.5.4 在 pod 中使用持久捲聲明 ..............................................................184
6.5.5 瞭解使用持久捲和持久捲聲明的好處 ..........................................185
6.5.6 回收持久捲 ......................................................................................186
6.6 持久捲的動態捲配置 ..................................................................................187
6.6.1 通過 StorageClass 資源定義可用存儲類型 ...................................188
6.6.2 請求持久捲聲明中的存儲類 ..........................................................188
6.6.3 不指定存儲類的動態配置 ..............................................................190
6.7 本章小結 ......................................................................................................193
7 ConfigMap 和 Secret :配置應用程序 .....................................195
7.1 配置容器化應用程序 ..................................................................................195
7.2 向容器傳遞命令行參數 ..............................................................................196
7.2.1 在 Docker 中定義命令與參數 ........................................................196
7.2.2 在 Kubernetes 中覆蓋命令和參數 ..................................................199
7.3 為容器設置環境變量 ..................................................................................200
7.3.1 在容器定義中指定環境變量 ..........................................................201
7.3.2 在環境變量值中引用其他環境變量 ..............................................201
7.3.3 瞭解硬編碼環境變量的不足之處 ..................................................202
7.4 利用 ConfigMap 解耦配置 ..........................................................................202
7.4.1 ConfigMap 介紹 ...............................................................................202
7.4.2 創建 ConfigMap ...............................................................................203
7.4.3 給容器傳遞 ConfigMap 條目作為環境變量 ..................................206
7.4.4 一次性傳遞 ConfigMap 的所有條目作為環境變量 ......................208
7.4.5 傳遞 ConfigMap 條目作為命令行參數 ..........................................209
7.4.6 使用 configMap 捲將條目暴露為文件 ...........................................210
7.4.7 更新應用配置且不重啟應用程序 ..................................................216
7.5 使用 Secret 給容器傳遞敏感數據 ..............................................................218
7.5.1 介紹 Secret .......................................................................................218
7.5.2 默認令牌 Secret 介紹 ......................................................................218
7.5.3 創建 Secret .......................................................................................220
7.5.4 對比 ConfigMap 與 Secret ...............................................................221
7.5.5 在 pod 中使用 Secret .......................................................................222
7.6 本章小結 ......................................................................................................228
8 從應用訪問 pod 元數據以及其他資源 .....................................229
8.1 通過 Downward API 傳遞元數據 ...............................................................229
8.1.1 瞭解可用的元數據 ..........................................................................230
8.1.2 通過環境變量暴露元數據 ..............................................................231
8.1.3 通過 downwardAPI 捲來傳遞元數據 .............................................234
8.2 與 Kubernetes API 服務器交互 ...................................................................237
8.2.1 探究 Kubernetes REST API .............................................................238
8.2.2 從 pod 內部與 API 服務器進行交互 ..............................................242
8.2.3 通過 ambassador 容器簡化與 API 服務器的交互 .........................248
8.2.4 使用客戶端庫與 API 服務器交互 ..................................................251
8.3 本章小結 ......................................................................................................253
9 Deployment: 聲明式地升級應用 ...........................................255
9.1 更新運行在 pod 內的應用程序 ..................................................................256
9.1.1 刪除舊版本 pod,使用新版本 pod 替換 .......................................257
9.1.2 先創建新 pod 再刪除舊版本 pod ...................................................257
9.2 使用 ReplicationController 實現自動的滾動升級 .....................................259
9.2.1 運行第一個版本的應用 ..................................................................259
9.2.2 使用 kubectl 來執行滾動式升級 ....................................................261
9.2.3 為什麽 kubectl rolling-update 已經過時 .........................................265
9.3 使用 Deployment 聲明式地升級應用.........................................................266
9.3.1 創建一個 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 本章小結 ......................................................................................................284
10 StatefulSet :部署有狀態的多副本應用 ................................285
10.1 復制有狀態 pod .........................................................................................285
10.1.1 運行每個實例都有單獨存儲的多副本 ........................................286
10.1.2 每個 pod 都提供穩定的標識 ........................................................287
10.2 瞭解 Statefulset ..........................................................................................289
10.2.1 對比 Statefulset 和 ReplicaSet .......................................................289
10.2.2 提供穩定的網絡標識 ....................................................................290
10.2.3 為每個有狀態實例提供穩定的專屬存儲 ....................................292
10.2.4 Statefulset 的保障 ..........................................................................294
10.3 使用 Statefulset ..........................................................................................295
10.3.1 創建應用和容器鏡像 ....................................................................295
10.3.2 通過 Statefulset 部署應用 .............................................................296
10.3.3 使用你的 pod .................................................................................301
10.4 在 Statefulset 中發現夥伴節點 .................................................................305
10.4.1 通過 DNS 實現夥伴間彼此發現 ..................................................306
10.4.2 更新 Statefulset ..............................................................................308
10.4.3 嘗試集群數據存儲 ........................................................................309
10.5 瞭解 Statefulset 如何處理節點失效 .........................................................310
10.5.1 模擬一個節點的網絡斷開 ............................................................310
10.5.2 手動刪除 pod .................................................................................312
10.6 本章小結 ....................................................................................................313
11 瞭解 Kubernetes 機理 ........................................................315
11.1 瞭解架構 ...................................................................................................315
11.1.1 Kubernetes 組件的分佈式特性 .....................................................316
11.1.2 Kubernetes 如何使用 etcd .............................................................318
11.1.3 API 服務器做了什麽 .....................................................................322
11.1.4 API 服務器如何通知客戶端資源變更 .........................................324
11.1.5 瞭解調度器 ....................................................................................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 總結概覽 ......................................................................................335
11.2 控制器如何協作 ........................................................................................335
11.2.1 瞭解涉及哪些組件 ........................................................................335
11.2.2 事件鏈 ............................................................................................336
11.2.3 觀察集群事件 ................................................................................337
11.3 瞭解運行中的 pod 是什麽 ........................................................................339
11.4 跨 pod 網絡 ................................................................................................340
11.4.1 網絡應該是什麽樣的 ....................................................................340
11.4.2 深入瞭解網絡工作原理 ................................................................341
11.4.3 引入容器網絡接口 ........................................................................343
11.5 服務是如何實現的 ....................................................................................344
11.5.1 引入 kube-proxy .............................................................................344
11.5.2 kube-proxy 如何使用 iptables .......................................................344
11.6 運行高可用集群 ........................................................................................346
11.6.1 讓你的應用變得高可用 ................................................................346
11.6.2 讓 Kubernetes 控制平面變得高可用 ............................................347
11.7 本章小結 ....................................................................................................350
12 Kubernetes API 服務器的安全防護 .....................................351
12.1 瞭解認證機制 ............................................................................................351
12.1.1 用戶和組 ........................................................................................352
12.1.2 ServiceAccount 介紹 ......................................................................353
12.1.3 創建 ServiceAccount ......................................................................354
12.1.4 將 ServiceAccount 分配給 pod ......................................................356
12.2 通過基於角色的權限控制加強集群安全 ................................................358
12.2.1 介紹 RBAC 授權插件 ...................................................................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 理性地授予授權權限 ....................................................................379
12.3 本章小結 ....................................................................................................379
13 保障集群內節點和網絡安全 ................................................381
13.1 在 pod 中使用宿主節點的 Linux 命名空間 .............................................381
13.1.1 在 pod 中使用宿主節點的網絡命名空間 ....................................382
13.1.2 綁定宿主節點上的埠而不使用宿主節點的網絡命名空間 .......383
13.1.3 使用宿主節點的 PID 與 IPC 命名空間 .......................................385
13.2 配置節點的安全上下文 ............................................................................386
13.2.1 使用指定用戶運行容器 ................................................................387
13.2.2 阻止容器以 root 用戶運行 ............................................................388
13.2.3 使用特權模式運行 pod .................................................................389
13.2.4 為容器單獨添加內核功能 ............................................................390
13.2.5 在容器中禁用內核功能 ................................................................391
13.2.6 阻止對容器根文件系統的寫入 ....................................................392
13.2.7 容器使用不同用戶運行時共享存儲捲 ........................................394
13.3 限制 pod 使用安全相關的特性 ................................................................396
13.3.1 PodSecurityPolicy 資源介紹 .........................................................396
13.3.2 瞭解 runAsUser、 fsGroup 和 supplementalGroup 策略 ...............398
13.3.3 配置允許、默認添加、禁止使用的內核功能 ............................400
13.3.4 限制 pod 可以使用的存儲捲類型 ................................................402
13.3.5 對不同的用戶與組分配不同的 PodSecurityPolicy .....................402
13.4 隔離 pod 的網絡 ........................................................................................406
13.4.1 在一個命名空間中啟用網絡隔離 ................................................406
13.4.2 允許同一命名空間中的部分 pod 訪問一個服務端 pod ...............407
13.4.3 在不同 Kubernetes 命名空間之間進行網絡隔離 ........................408
13.4.4 使用 CIDR 隔離網絡 .....................................................................409
13.4.5 限制 pod 的對外訪問流量 ............................................................409
13.5 本章小結 ....................................................................................................410
14 計算資源管理 ...................................................................411
14.1 為 pod 中的容器申請資源 ........................................................................ 411
14.1.1 創建包含資源 requests 的 pod ......................................................412
14.1.2 資源 requests 如何影響調度 .........................................................413
14.1.3 CPU requests 如何影響 CPU 時間分配 .......................................418
14.1.4 定義和申請自定義資源 ................................................................418
14.2 限制容器的可用資源 ................................................................................419
14.2.1 設置容器可使用資源量的硬限制 ................................................419
14.2.2 超過 limits ......................................................................................421
14.2.3 容器中的應用如何看待 limits ......................................................422
14.3 瞭解 pod QoS 等級 ....................................................................................423
14.3.1 定義 pod 的 QoS 等級 ...................................................................424
14.3.2 內存不足時哪個進程會被殺死 ....................................................426
14.4 為命名空間中的 pod 設置默認的 requests 和 limits ...............................427
14.4.1 LimitRange 資源簡介 ....................................................................428
14.4.2 LimitRange 對象的創建 ................................................................428
14.4.3 強制進行限制 ................................................................................430
14.4.4 應用資源 requests 和 limits 的默認值 ..........................................430
14.5 限制命名空間中的可用資源總量 ............................................................431
14.5.1 ResourceQuota 資源介紹 ..............................................................431
14.5.2 為持久化存儲指定配額 ................................................................434
14.5.3 限制可創建對象的個數 ................................................................434
14.5.4 為特定的 pod 狀態或者 QoS 等級指定配額 ...............................435
14.6 監控 pod 的資源使用量 ............................................................................436
14.6.1 收集、獲取實際資源使用情況 ....................................................437
14.6.2 保存並分析歷史資源的使用統計信息 ........................................439
14.7 本章小結 ....................................................................................................442
15 自動橫向伸縮 pod 與集群節點 ............................................443
15.1 pod 的橫向自動伸縮 .................................................................................444
15.1.1 瞭解自動伸縮過程 ........................................................................444
15.1.2 基於 CPU 使用率進行自動伸縮 ..................................................447
15.1.3 基於內存使用進行自動伸縮 ........................................................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 集群節點的橫向伸縮 ................................................................................457
15.3.1 Cluster Autoscaler 介紹 .................................................................457
15.3.2 啟用 Cluster Autoscaler .................................................................459
15.3.3 限制集群縮容時的服務乾擾 ........................................................460
15.4 本章小結 ....................................................................................................461
16 高級調度 .........................................................................463
16.1 使用污點和容忍度阻止節點調度到特定節點 ........................................463
16.1.1 介紹污點和容忍度 ........................................................................464
16.1.2 在節點上添加自定義污點 ............................................................466
16.1.3 在 pod 上添加污點容忍度 ............................................................467
16.1.4 瞭解污點和污點容忍度的使用場景 ............................................467
16.2 使用節點親緣性將 pod 調度到特定節點上 ............................................469
16.2.1 指定強制性節點親緣性規則 ........................................................470
16.2.2 調度 pod 時優先考慮某些節點 ....................................................472
16.3 使用 pod 親緣性與非親緣性對 pod 進行協同部署 ................................475
16.3.1 使用 pod 間親緣性將多個 pod 部署在同一個節點上 ................475
16.3.2 將 pod 部署在同一機櫃、可用性區域或者地理地域 ................478
16.3.3 表達 pod 親緣性優先級取代強制性要求 ....................................479
16.3.4 利用 pod 的非親緣性分開調度 pod .............................................481
16.4 本章小結 ....................................................................................................483
17 開發應用的最佳實踐 .........................................................485
17.1 集中一切資源 ............................................................................................486
17.2 瞭解 pod 的生命周期 ................................................................................487
17.2.1 應用必須預料到會被殺死或者重新調度 ....................................487
17.2.2 重新調度死亡的或者部分死亡的 pod .........................................490
17.2.3 以固定順序啟動 pod .....................................................................491
17.2.4 增加生命周期鉤子 ........................................................................493
17.2.5 瞭解 pod 的關閉 ............................................................................497
17.3 確保所有的客戶端請求都得到了妥善處理 ............................................500
17.3.1 在 pod 啟動時避免客戶端連接斷開 ............................................500
17.3.2 在 pod 關閉時避免客戶端連接斷開 ............................................501
17.4 讓應用在 Kubernetes 中方便運行和管理 ................................................505
17.4.1 構建可管理的容器鏡像 ................................................................505
17.4.2 合理地給鏡像打標簽,正確地使用 ImagePullPolicy ................506
17.4.3 使用多維度而不是單維度的標簽 ................................................506
17.4.4 通過註解描述每個資源 ................................................................506
17.4.5 給進程終止提供更多的信息 ........................................................507
17.4.6 處理應用日誌 ................................................................................508
17.5 開發和測試的最佳實踐 ............................................................................510
17.5.1 開發過程中在 Kubernetes 之外運行應用 ....................................510
17.5.2 在開發過程中使用 Minikube ........................................................512
17.5.3 發布版本和自動部署資源清單 ....................................................513
17.5.4 使用 Ksonnet 作為編寫 YAML/JSON manifest
文件的額外選擇 ............................................................................513
17.5.5 利用持續集成和持續交付 ............................................................514
17.6 本章小結 ....................................................................................................515
18 Kubernetes 應用擴展 ........................................................517
18.1 定義自定義 API 對象 ................................................................................517
18.1.1 CustomResourceDefinitions 介紹 ..................................................518
18.1.2 使用自定義控制器自動定製資源 ................................................522
18.1.3 驗證自定義對象 ............................................................................526
18.1.4 為自定義對象提供自定義 API 服務器 ........................................527
18.2 使用 Kubernetes 服務目錄擴展 Kubernetes .............................................528
18.2.1 服務目錄介紹 ................................................................................529
18.2.2 服務目錄 API 服務器與控制器管理器介紹 ................................530
18.2.3 Service 代理和 OpenServiceBroker API .......................................530
18.2.4 提供服務與使用服務 ....................................................................533
18.2.5 解除綁定與取消配置 ....................................................................535
18.2.6 服務目錄給我們帶來了什麽 ........................................................535
18.3 基於 Kubernetes 搭建的平臺 ....................................................................536
18.3.1 紅帽 OpenShift 容器平臺 ..............................................................536
18.3.2 Deis Workflow 與 Helm .................................................................539
18.4 本章小結 ....................................................................................................541
A 在多個集群中使用 kubectl ...................................................543
B 使用 kubeadm 配置多節點集群 ............................................549
C 使用其他容器運行時 ...........................................................563
D Cluster Federation .............................................................567