Kubernetes in Action中文版

網站

更多書籍點擊進入>> CiCi島php

下載

電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支持正版,喜歡的請購買正版書籍html

封頁

封頁

編輯推薦

適讀人羣 :本書適合系統架構師、開發和測試人員、運維人員閱讀,對企業 IT 主管、系統管理員、平臺管理員、SRE 人員等一樣具備參考價值,固然也可做爲高等院校雲計算及容器技術方向的專業教材。 Kubernetes容器編排系統安全地管理分佈式應用的結構和流程,以極高的效率組織容器和服務。Kubernetes充當集羣的操做系統,消除了在設計中考慮底層網絡和服務器基礎設施的須要。本書教你使用Kubernetes部署基於容器的分佈式應用。在構建Kubernetes集羣前,將從Docker和Kubernetes的概觀開始學習。你將逐步擴展初始應用程序、添加特性並加深對Kubernetes架構和操做的瞭解。當你瀏覽這本全面的指南時,還將探索高級的主題,如監控、調優和擴容。本書包括: ◎Kubernetes內部原理 ◎跨集羣部署容器 ◎保障集羣的安全 ◎不停機更新應用git

內容簡介

本書主要講解如何在 Kubernetes 中部署分佈式容器應用。本書開始部分概要介紹了 Docker 和Kubernetes 的由來和發展,而後經過在 Kubernetes 中部署一個應用程序,一點點增長功能,逐步加深咱們對於Kubernetes架構的理解和操做的實踐。在本書的後面部分,也能夠學習一些高階的主題,好比監控、調試及伸縮。Kubernetes是希臘文,意思是「舵手」,帶領咱們安全地到達未知水域。Kubernetes這樣的容器編排系統,會幫助咱們妥善地管理分佈式應用的部署結構和線上流量,高效地組織容器和服務。Kubernetes 做爲數據中心操做系統,在設計軟件系統時,可以儘可能下降在底層網絡和硬件設施上的負擔。github

做者簡介

原著做者簡介 Marko Luksa是一位擁有20年以上專業開發經驗的軟件工程師,經手項目小到簡單的Web應用,大到ERP系統、框架和中間件軟件,應有盡有。在爲Red Hat工做期間,他從Google App Engine API實現的開發起步, 這些API將基於Red Hat的JBoss中間件產品,以後他一直在爲CDI/Weld、Infinispan/JBoss DataGrid等項目貢獻力量。2014後, 他加入Red Hat的Cloud Enablement團隊,負責 Kubernetes和相關技術開發的更新,保障公司的中間件軟件能將Kubernetes與OpenShift特性的潛能徹底發揮出來。 譯者簡介 七牛容器雲 (KIRK)團隊,是負責七牛雲基於自身公有云業務在容器方面的多年實踐經驗,針對企業應用快速部署、便捷運維打造的容器雲計算平臺。提供持續集成、彈性伸縮、應用市場等功能特性,使企業專一於業務邏輯開發,縮短業務上線週期,優化資源利用率,提升服務響應效率的一支技術團隊。數據庫

目 錄

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 註解 pod73

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 建立和檢查 ReplicaSet106

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.3 限制 pod 使用安全相關的特性 396

13.4 隔離 pod 的網絡 406

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.3 瞭解 pod QoS 等級 423

14.4 爲命名空間中的 pod 設置默認的 requests 和 limits 427

14.5 限制命名空間中的可用資源總量 431

14.6 監控 pod 的資源使用量 436

14.7 本章小結 442

15  自動橫向伸縮 pod 與集羣節點 443

15.1 pod 的橫向自動伸縮 444

15.2 pod 的縱向自動伸縮 456

15.3 集羣節點的橫向伸縮 457

15.4 本章小結 461

16  高級調度463

16.1 使用污點和容忍度阻止節點調度到特定節點 463

16.2 使用節點親緣性將 pod 調度到特定節點上 469

16.3 使用 pod 親緣性與非親緣性對 pod 進行協同部署 475

16.4 本章小結 483

17  開發應用的最佳實踐 485

17.1 集中一切資源 486

17.2 瞭解 pod 的生命週期 487

17.3 確保全部的客戶端請求都獲得了妥善處理 500

17.4 讓應用在 Kubernetes 中方便運行和管理 505

17.5 開發和測試的最佳實踐 510

17.6 本章小結 515

18  Kubernetes 應用擴展 517

18.1 定義自定義 API 對象 517

18.2 使用 Kubernetes 服務目錄擴展 Kubernetes 528

18.3 基於 Kubernetes 搭建的平臺 536

18.4 本章小結 541

A  在多個集羣中使用 kubectl 543

B  使用 kubeadm 配置多節點集羣 549

C  使用其餘容器運行時 563

D  Cluster Federation 567

前 言 推 薦 序

2013 年,Docker 問世,因爲其簡練易用的使用範式,極大下降了容器技術的使用門檻,引爆了容器技術,一場轟轟烈烈的由容器帶來的新計算革命開始了。

2014 年,預見到了容器帶來的革命性變化,七牛內部成立了一個新項目——QCOS,全稱爲 Qiniu Cloud Operating System(也能夠理解爲 Qiniu Cluster OperatingSystem),目標是實現一個數據中心操做系統,讓開發人員使用數據中心如同使用一臺機器同樣容易。在當時,Kubernetes 項目也剛剛開始,還在規格設計階段。咱們通讀了 Kubernetes 的設計,決定本身幹。這是一個很是瘋狂的想法。促使咱們決定本身乾的緣由有兩點 :一是咱們存儲也本身幹,並且幹成了,因此計算本身幹,也不無成功的可能 ;二是 Kubernetes 剛開始,一切若是跟隨 Kubernetes,那麼咱們作起事情來確定束手束腳,沒辦法按照商業公司的推動速度來推動。

可是作着作着咱們就發現,計算不像存儲,計算問題是一個很是開放性的問題。而以容器爲核心的計算系統,其複雜性也不一樣於以虛擬機(VM)爲表明的計算系統,由於虛擬機(VM)是以虛擬一臺機器爲邊界的,其問題域一樣比較閉合。可是容器計算就是要打破機器的邊界,讓計算力在數據中心內自由調度。這個問題域涉及面很是廣,除了常規的計算力調度、負載均衡、部署升級、服務發現、日誌與監控,這些東西都要以全新的方式來解決。

實際上給數據中心作一個操做系統並非什麼新想法。20 世紀 80 年代中期,貝爾實驗室就開啓了一個名爲 Plan9 的操做系統項目,目的就是作一個數據中心操做系統。參與這個操做系統的名單都大名鼎鼎 :Rob Pike、Ken Thompson,等等。你沒看錯,就是今天建立了 Go 語言的那幫人。他們在 Plan9 項目解散後被 Google搶了過去,換了一個思路繼續作數據中心操做系統 —— 從面向數據中心的語言開始:Go 語言就這樣誕生了。而隨着 Go 語言的流行,Docker、Kubernetes 接連誕生,繼續續寫着數據中心操做系統的夢想。

Kubernetes 誕生之初,雖然嘴裏銜着 Google Borg 系統的金鑰匙,可是同期競爭的項目仍是比較多的,除了七牛本身內部發起的 QCOS 外,比較知名的還有 Docker Swam 和 Mesos。可是到了 2016 年,這場競爭愈來愈趨於 Kubernetes 一統天下。七牛內部 QCOS 項目也放棄了自研,將方向轉向了 Kubernetes 陣營。

QCOS 項目對七牛有着特殊的意義,它是七牛業務多元化的開始。在此以前,七牛秉承專一作好一件事情,着眼於對象存儲一個點,從單點切入,把單點作到極致的思路,得到了極佳的口碑,大量的移動互聯網應用都選擇了七牛做爲它們的圖片和視頻託管的雲服務提供商。選擇作 QCOS,其實是咱們在打第二個根據地時,選擇了一條極其艱難的道路。

今天咱們 QCOS 團隊(內部已改名爲 KIRK 團隊)發起了 Kubernetes in Action一書的翻譯,他們邀請我給譯本做序,我腦子裏情不自禁想起了這段歷史。選擇基於 Kubernetes,是咱們從商業上來講的務實選擇,可是它並不表明放棄自主研發,只是把夢想暫時封存在內心。中國古話說,師夷長技以制夷,別人的好東西咱們是要學習的,學好了咱們才能完成從模仿到超越的過程。

Kubernetes 的背後,是一場新計算革命,是真正的雲計算 2.0,咱們期待更多有想法的開發者可以學習 Kubernetes,可以加入這場計算革命。也歡迎你們加入七牛。

是爲序。

許式偉 七牛雲 CEO

譯 者 序

早在 2011 年創業初期,七牛就決定使用 GoLang 做爲主要開發語言,那時距離 GoLang 1.0 的正式發佈還有將近一年的時間。當時咱們就判定,在分佈式時代,GoLang 這種語言一定會大放異彩。今天,七牛的絕大多數線上服務都是用 GoLang實現的,Golang 幫助咱們以最高的效率實現應用,快速響應客戶需求。如今,咱們也很幸運地看到當前最熱門的開源項目如 Docker、Kubernetes 等,也都是基於GoLang 來實現的。

就像早期擁抱 GoLang 同樣,七牛也是 Docker 和 Kubernetes 技術的堅決擁抱者和踐行者。早在 2014 年,咱們就基於 Docker 自研了一套容器集羣管理系統,用於圖片、音視頻轉碼應用實例的資源調度,這套系統在線上運行了好幾年,如今正逐漸被 Kubernetes 替代。

Docker 和 Kubernetes 的出現,讓咱們發現了構建數據中心操做系統(DCOS)的可能性。Docker 的輕量級、Kubernetes 的靈活性和開放性,能讓咱們以 API 調用的方式來交付計算力(包括 CPU、內存、網絡、磁盤等),能讓業務應用擺脫傳統資源交付方式和既往運維手段的束縛,更快捷地獲得部署、升級和管理,業務迭代速度大大加快,資源利用率大幅提升。

早在幾年前,咱們在七牛就成立了專門的容器雲團隊,致力於打造更健壯、更易用的容器集羣調度管理系統。如今,咱們在七牛內部全面推廣和應用 Kubernetes,不只把無狀態服務運行在 Kubernetes 中,也把有狀態服務好比數據庫運行在Kubernetes 中,正如使用 GoLang 提升了咱們的開發效率同樣,使用 Kubernetes 大大提升了咱們的部署和運維效率。

在七牛,咱們堅決地認爲,Kubernetes 會成爲下一個 Linux,可是管理的再也不是單臺機器,而是以 DCOS 的方式來管理整個數據中心。熟練地掌握和使用Kubernetes,將成爲每一個先後端工程師的必備技能,Kubernetes 將成爲發佈先後端服務的標準途徑。

這本書的翻譯,咱們集中了七牛容器雲團隊,以及其餘七牛內部熱心志願者的力量,針對翻譯的每一個術語咱們認真推敲,盡最大可能達到「信」「達」「雅」的程度。鑑於水平有限,不免有紕漏,請讀者諒解。

但願這本書能帶領你進入 Kubernetes 的世界。

參與本書翻譯的七牛容器團隊成員有 :盧興銘(致謝詞、第 1 章)、李雪瓅(第2 章)、路濤(第 3 章)、孫訥敏(第 4 章)、劉巖(第 5 章)、孫毅飛(第 6 章)、林培裕(第 7 章)、周玉壁(第 8 章)、陳凱俊(第 9 章)、楊冠軍(第 10 章)、張欽堯 (第11 章)、況永巧 (第 12 章)、易弢(第 13 章)、王浩宇(第 14 章)、王雪瑞(第 15 章)、屈嘯(第 16 章)、金鑫鑫(第 17 章)、陳忠傑(第 18 章)。由袁曉沛任翻譯組組長,由李雪瓅、馬力、馮義勇負責審校。

袁曉沛 容器計算部技術總監

前言

在 Red Hat 工做了幾年以後,2014 年末,我被分配到一個叫 Cloud Enablement的新團隊。咱們的任務是將公司的中間件系列產品引入基於 Kubernetes 開發的OpenShift 容器平臺。當時,Kubernetes 還在初始的 1.0 版本中,甚至尚未正式發佈。

咱們團隊必須儘快瞭解 Kubernetes 的細節,以便可以充分利用 Kubernetes 的一切,爲軟件開發設定正確的方向。當遇到問題時,很難判斷是咱們出錯了,仍是僅僅是碰到了一個 Kubernetes 的 bug。

從那之後,Kubernetes 有了長足的發展,我對它的理解也有了很大的提高。當我第一次使用它的時候,大多數人甚至從未據說過 Kubernetes。如今,幾乎每一個軟件工程師都知道它,Kuberntes 已經成爲在雲上和內部數據中心運行應用程序的增加最快和使用最普遍的方式之一。

在使用 Kubernetes 的第一個月,我寫了一篇包含兩部分的博客文章,介紹如何在 OpenShift/Kubernetes 中運行 JBoss WildFly 應用服務集羣。當時,我從未想過一篇簡單的博客文章會讓曼寧出版社的人聯繫我,詢問我是否願意寫一本關於Kubernetes 的書。固然,我不能拒絕這樣的提議,儘管我確信他們也會聯繫其餘人,甚至最終會選擇其餘人。

通過一年半的寫做和研究,完成了本書,這是一次很棒的經歷。寫一本關於一項技術的書是比使用更好的瞭解它的方法。隨着我對 Kubernetes 瞭解的深刻,以及Kubernetes 自己的不斷髮展,我不斷地回到以前寫完的章節,添加更多的信息。我是一個完美主義者,因此永遠不會對這本書感到絕對滿意,但我很高興聽到 MEAP(Manning Early Access Program)的許多讀者以爲它是一本很好的學習 Kubernetes 的指南。

個人目的是讓讀者瞭解技術自己,並教會他們如何使用工具備效地在Kubernetes 集羣中開發和部署應用程序。本書的重點不在如何創建和維護一個高可用的 Kubernetes 集羣,但本書的最後一部分告訴讀者這樣一個集羣應該包含什麼,這能讓你們很容易地理解處理這個問題的額外資源。

但願你能享受閱讀此書,而且讓你學到如何可以充分利用 Kubernetes 系統的強大之處。

關於本書

本書旨在讓你可以熟練使用 Kubernetes。它介紹了在 Kubernetes 中有效地開發和運行應用所需的幾乎全部概念。

在深刻研究 Kubernetes 以前,本書概述了 Docker 等容器技術,包括如何構建容器,以便即便之前沒有使用過這些技術的讀者也可使用它們。而後,它會慢慢帶你從基本概念到實現原理了解大部分的 Kubernetes 知識。

本書適合誰

本書主要關注應用開發人員,但也從操做的角度概述了應用的管理。它適合任何對在多服務器上運行和管理容器化應用感興趣的人。

對於但願學習容器技術以及大規模的容器編排的人,不管是初學者仍是高級軟件工程師都將獲得在 Kubernetes 環境中開發、容器化和運行應用所需的專業知識。

閱讀本書不須要預先了解容器或 Kubernetes 技術。本書以漸進的方式展開主題,不會使用讓非專家開發者難以理解的應用源代碼。

讀者至少應該具有編程、計算機網絡和運行 Linux 基本命令的基礎知識,並瞭解經常使用的計算機協議,如 HTTP 協議。

本書的組織方式 :路線圖

本書分爲三個部分,涵蓋 18 個章節。

第一部分簡要地介紹 Docker 和 Kubernetes、如何設置 Kubernetes 集羣,以及如何在集羣中運行一個簡單的應用。它包括兩章 :

第 1 章解釋了什麼是 Kubernetes、Kubernetes 的起源,以及它如何幫助解決當今大規模應用管理的問題。

第 2 章是關於如何構建容器鏡像並在 Kubernetes 集羣中運行的實踐教程。還解釋瞭如何運行本地單節點 Kubernetes 集羣,以及在雲上運行適當的多節點集羣。

第二部分介紹了在 Kubernetes 中運行應用必須理解的關鍵概念。本章內容以下:

第 3 章介紹了 Kubernetes 的基本構建模塊——pod,並解釋瞭如何經過標籤組織 pod 和其餘 Kubernetes 對象。

第 4 章將向你介紹 Kubernetes 如何經過自動重啓容器來保持應用程序的健康。還展現瞭如何正確地運行託管的 pod,水平伸縮它們,使它們可以抵抗集羣節點的故障,並在將來或按期運行它們。

第 5 章介紹了 pod 如何向運行在集羣內外的客戶端暴露它們提供的服務,還展現了運行在集羣中的 pod 是如何發現和訪問集羣內外的服務的。

第 6 章解釋了在同一個 pod 中運行的多個容器如何共享文件,以及如何管理持久化存儲並使得 pod 能夠訪問。

第 7 章介紹瞭如何將配置數據和敏感信息(如憑據)傳遞給運行在 pod 中的應用。

第 8 章描述了應用如何得到正在運行的 Kubernetes 環境的信息,以及如何經過與 Kubernetes 通訊來更改集羣的狀態。

第 9 章介紹了 Deployment 的概念,並解釋了在 Kubernetes 環境中運行和更新應用的正確方法。

第 10 章介紹了一種運行須要穩定的標識和狀態的有狀態應用的專門方法。

第三部分深刻研究了 Kubernetes 集羣的內部,介紹了一些額外的概念,並從更高的角度回顧了在前兩部分中所學到的全部內容。這是最後一組章節 :

第 11 章深刻 Kubernetes 的底層,解釋了組成 Kubernetes 集羣的全部組件,以及每一個組件的做用。它還解釋了 pod 如何經過網絡進行通訊,以及服務如何跨多個 pod 造成負載平衡。

第 12 章解釋瞭如何保護 Kubernetes API 服務器,以及經過擴展集羣使用身份驗證和受權。

第 13 章介紹了 pod 如何訪問節點的資源,以及集羣管理員如何防止 pod 訪問節點的資源。

第 14 章深刻了解限制每一個應用程序容許使用的計算資源,配置應用的 QoS(Quality of Service)保證,以及監控各個應用的資源使用狀況。還會介紹如何防止用戶消耗太多資源。

第 15 章討論瞭如何經過配置 Kubernetes 來自動伸縮應用運行的副本數,以及在當前集羣節點數量不能接受任何新增應用時,如何對集羣進行擴容。

第 16 章介紹瞭如何確保 pod 只被調度到特定的節點,或者如何防止它們被調度到其餘節點。還介紹瞭如何確保 pod 被調度在一塊兒,或者如何防止它們調度在一塊兒。

第 17 章介紹瞭如何開發應用程序並部署在集羣中。還介紹瞭如何配置開發和測試工做流來提升開發效率。

第 18 章介紹瞭如何使用本身的自定義對象擴展 Kubernetes,以及其餘人是如何開發並建立企業級應用平臺的。

隨着章節的深刻,不只能夠了解單個構建 Kubernetes 的模塊,還能夠逐步增長對使用 kubectl 命令行工具的理解。

媒體評論 「這本書專業且詳盡。做者以實例的方式教授如何管理任何分佈式和可伸縮應用程序的完整生命週期。」

——Antonio Magnaghi, System 1

「本書突出的亮點是使用了真實的例子。不僅是應用概念,還進行實際操做使用。」

——Paolo Antinori, Red Hat

「本書深刻討論了Kubernetes及其相關技術。你值得擁有!」

——Al Krinker, USPTO

「從零經驗到專業Kubernetes使用者的基礎讀物。」

——Csaba Sari, Chimera Entertainment

本篇文章由一文多發平臺ArtiPub自動發佈

相關文章
相關標籤/搜索