Kubernetes生產化實踐之路 ( 簡體 字) |
作者:孟凡杰 等 | 類別:1. -> 程式設計 -> 綜合 |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 53766 詢問書籍請說出此書號!【缺書】 NT售價: 690 元 |
出版日:12/1/2020 |
頁數:552 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121399176 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:推 薦 序
國慶前,老孟跟我說,幫我們的書寫個序吧,我開玩笑說,你們怎么不找一個更有名氣的人來寫呢:)老孟說,已經找了,但是還是想找你寫一下序,因為你更了解我們的日常工作。
我自己平時也很喜歡做總結,自己也在寫專欄,我深知寫一兩篇文章容易,要堅持寫很多篇,并且匯集成書是很需要毅力的。老孟他們平時的工作強度很大,回家還要照顧孩子,今天能成書實屬不易。
老孟,小強,文利還有蘇菲,在寫這本書的時候就像《Kubernetes 生產化實踐之路》的書名一樣,把自己這么多年在生產環境摸爬滾打的經驗都毫無保留地傾囊分享了,要駕馭eBay這個規模的生產環境,必須了解技術背后的原理,而不能僅僅停留在操作層面,因此,這本書更多的是幫大家梳理系統設計背后的思考和細節。
想要學習云計算,需要學習很多很多的基礎知識,我們部門的新人剛加入的時候都覺得不適應密集型的信息轟炸,我覺得以后我們部門有新人加入時,會建議先學習一遍老孟他們的這本書。大家如果經歷一兩次生產環境的問題,再回來看這本書,估計體會會更深刻。
老孟,我真的覺得,書里面的知識無論從覆蓋面還是深度都超越我們內部的文檔啊,看來鼓勵大家寫書才是推進我們內部文檔質量提高的出路啊 ?
我看這本書的時候就跟看回憶錄差不多的。我記得我們在把eBay的Feature測試環境從Openstack換成Kubernetes的時候,還順便換掉了原先的負載均衡系統,上線后出了事故被“捅”到了CTO那里,老孟他們通過持續努力,好不容易從坑里爬出來,之后我給老孟團隊發了一個獎狀,我把獎狀交給老孟的時候跟他說,這個獎狀外人看上去是個獎狀,但是我們自己都知道是一個提醒,提醒我們從開源系統到生產環境高可用之間還有很多路要走。老孟一直把這個獎狀擺在他桌子的顯眼位置上。
看到書中介紹Contour和Istio的章節,我們部門內部在關于技術選型時選用Contour還是Istio的激烈爭吵還歷歷在目,我們基礎架構部全球副總裁為了這個事情,還讓老孟寫一個詳細的分析報告,并且跟副總逐一分析技術細節。書中說CGroup弄的不好,會造成系統性能影響,還有內存水位線的介紹、RSS/RPS/RFS的介紹等,其實我們都是吃了苦頭了,內部總結會是在公司3樓的會議室Fencing和Training Room開的,整個會議室坐滿了人,一起學習了兩個多小時,開完會天都黑了,還是周末,但是我覺得這時間花的值。
Resource Quota的章節,專門解釋了資源橫向切分和縱向切分的思考,這次國慶放假前最后一天上班,小強還在跟我討論這個問題,eBay因為歷史原因數據中心資源被割裂成很多孤島,我跟小強說,你的工作就像一條鯰魚迫使整個公司重新審視過去十多年的資源管理方式,eBay并不做內部部門間的單獨財務結算。在這種情況下,我覺得如果真的要在保證資源利用率的前提下,縮短我們交付云計算資源的時間任重而道遠。
在看第2章的時候,我就會想起,周末我去公司,看到文利還在那里思考怎么解決Cassini(eBay內部的搜索引擎集群)在 Kubernetes上為什么會出現性能問題,一查就是兩個月,最后還是被他“死磕”搞定了。
看到介紹ContainerD的章節就會想起蘇菲,我們公司所有Kubernetes集群替換成containerD runtime就是她做的,把NPD從Daemonset換成系統服務也是吃了虧后改的……還有很多很多不能在這里一一例舉了,書中輕描淡寫的一兩句話,背后其實是有我們很多的思考、教訓、嘗試做支撐的。
我們這5年多來也是起起伏伏,公司做Kubernetes有一點是一直堅持的,就是要往深里做,把系統為什么這么設計搞清楚。一路的教訓讓我們非常重視系統上線前的壓測和失效分析,而這些無不讓我們對系統底層有了更深的認識。
老孟,等書正式發售的時候,我不要你送我一本,我得自己花錢買一本,也擺在我辦公桌的顯眼位置,因為這記錄了我們的成長。我還很期待我們可以再寫一本生產環境踩坑實錄?
許健
2020年10月7日
前 言
扉頁之后,來到一個合適的位置,以交待我與這本書的淵緣。一個偶然的機會,編輯老師問我,是否有意愿寫一本關于Kubernetes生產化經驗的書。沒有太多猶豫,我回復道:“好的”,這回復發自內心的本能直覺。
從Kubernetes項目開源至今已五載有余,我和我的小伙伴們,有幸從第一個版本開始,就參與基于容器平臺和Kubernetes技術棧的架構、開發、規模化生產落地、運維等一系列工作。在此期間,我們積累了一些值得分享的經驗,也踩了不少關于新技術棧的坑。
相比于虛擬化技術,容器技術更輕量、優雅,也更符合微服務時代應用的構建與部署需求。基于容器技術的Kubernetes并不是一個孤立的云平臺,它有成為云計算規范的野心;與此同時,它已儼然成為云計算的事實標準。
? Kubernetes可以被看作一個云計算控制平面的框架,而云計算三要素——計算、網絡和存儲,均以插件形式與Kubernetes集成。這樣做的好處是,使用者可以選擇自己的插件實現來落地。因此,當計算技術、網絡技術或存儲技術更新換代時,Kubernetes能夠很容易地集成。于是在容器技術“能打”的今天,Kubernetes將對其提供全面支持;明天容器技術被其他技術取代,Kubernetes作為管理平臺,只需要替換一個運行時插件即可,因此其地位不可撼動。
? 在容器技術基礎之上,Kubernetes還做了更精妙的模型抽象。以規范后的模型作為統一API,Kubernetes打破了集群管理者和應用開發者的邊界。它用統一的語言將不同角色進行關聯,通過特定的語義來實現平臺層和應用層的協商。
?
? Kubernetes的擴展性非常強。基于自定義模型,圍繞著Kubernetes形成了豐富的生態圈,并且擴展的項目非常活躍。這些項目通常有大廠背書,同時以構建業界標準為方向而前進,其中包括小到輔助應用構建的Helm,大到服務網格解決方案Istio,再到立項之初就嘗試走標準化之路的開放應用模型(Open Application Model),都是按照相同的模式成長起來的。
寫這本書的一個最重要的初衷,其實很純粹,就是滿足一種傾訴欲——當看到這些精妙的設計,分享欲會噴薄而出。因此,本書不會羅列大量代碼、示例,也不會大篇幅地羅列代碼、配置,或者教讀者如何執行Kubernetes命令,而是嘗試去介紹這些精巧設計背后的細節、它的設計考量、設計選擇,以及選擇這樣的設計付出的代價。
除此之外,由于新技術的生產化落地并非一帆風順,必然會遇到這樣或那樣的問題。因此,我們希望從生產化落地的角度,分享生產系統中面臨的挑戰和可實施的最佳實踐方案,還包括如何規避風險、避免最后一根稻草壓死駱駝,以及如何優化系統以獲得最優性能。
經歷了五年的摸爬滾打,Kubernetes在eBay歷史上成為了唯一一個統管大數據、搜索后臺和云業務的支撐平臺。截至目前,Kubernetes已經管理了上百個集群和數萬臺物理機,其最終目標是管理所有共計十多萬臺計算節點,其歷程不可謂不艱辛。本書更多是從互聯網公司角度探討Kubernetes生產化過程中,面對超大規模集群和海量應用,需要面臨和解決哪些問題。所謂生產化最佳實踐經驗,無非是一個又一個坑踩過來以后的心理歷程。
本書共分12章,每個章節自成體系,嘗試從不同側面闡述生產化過程中帶來的挑戰:
第1章:介紹Kubernetes架構基礎,了解Kubernetes架構基礎是學習本書的根本。本章介紹容器技術的優勢、Kubernetes對象設計的原則、Kubernetes控制平面組件的協同工作原理,并對控制面板組件作簡要介紹。
第2章:通過以點帶面的方式,聚焦單個節點,展開介紹容器技術的技術細節,以及與節點相關的調優方案,包括Kubernetes如何利用Namespace和CGroups技術、如何選擇和構建存儲方案,以及如何對CPU、內存、磁盤和網絡進行調優,以使集群獲得最優性能。
第3章:介紹如何構建高可用的Kubernetes集群,旨在提供生產化集群管理的思路。保證高可用是核心要義,其中包括如何構建高可用的Kubernetes平臺、如何確保平臺支撐的應用高可用,以及如何管理高可用的Kubernetes平臺。
第4章:介紹如何構建生產化鏡像倉庫及鏡像的安全保證。無論選擇哪種鏡像倉庫,需要解決的本質問題都離不開Metadata的管理、鏡像的塊文件管理,以及鏡像的分發。因此,本章介紹了鏡像倉庫的實現,以及基于容器鏡像掃描和準入的安全保證方案。
第5章:Kubernetes作為開放式平臺,需要多租戶的支持,而其本身并未提供租戶的概念,因而本章嘗試從不同層面描述多租戶集群需要解決的問題,以及Kubernetes提供的備選方案,包括認證集成、授權管理、隔離和配額管理等。
第6章:介紹網路接入方案,包括不同層級的網絡協議、負載均衡原理,以及Kubernetes的網絡接入支持。
第7章:介紹API網關和服務網格,API網關是集群的流量入口。本章分析了Ingress的設計缺陷、社區相應的替代方案、輕量級的入站流量管理擴展項目Contour,以及嘗試將入站流量和服務網格統一管理的Istio,同時剖析了時下熱門的數據面組件Envoy的架構與實現。
第8章:社區的集群聯邦歷經多次迭代,而本章重點闡述V2版本的設計與實現原理,以及如何基于集群聯邦技術,構建跨數據中心的高可用應用。
第9章:邊緣計算是隨著物聯網而出現的一種計算模式,基于Kubernetes架構的邊緣計算項目KubeEdge已在孵化中。本章分享邊緣數據中心的構建案例,并展開分析KubeEdge的架構和其嘗試解決的問題,以及在邊緣網絡中面臨的挑戰和設計考量。
第10章:從虛擬機技術到容器化技術是一個巨大的轉變,因此,應用本身需要適應并積極擁抱這些變化,才能避免應用落地時可能面臨的陷阱。本章記錄了應用落地時面臨的問題及應對方案,如“為什么我的應用容器化以后不工作了?性能下降了?資源開銷大了?”,以上答案都將在本章揭曉。
第11章:在分布式系統中,監控指標是一個衡量系統功能是否達到運維標準的重要因素。本章介紹基于Kubernetes的監控要素,包括指標收集、日志管理、系統運維流程上遵循的最佳實踐,以及基于監控系統指標數據的集群自動恢復的方法。
第12章:容器技術和Kubernetes及相應的工具鏈打通了DevOps的所有環節。工具鏈的發展是非常迅速的,比如持續集成工具從最初的Jenkins,演進到Prow,再到Tekton,只用了數年時間。然而本章未從工具鏈的角度展開,更多著力于從流程和職能劃分的角度分析DevOps該如何做。
?
Kubernetes是一個超大的話題,限于篇幅的原因,內容進行了一定的取舍;Kubernetes依然是一個快速迭代的技術,本書分享的內容具有一定的時效性;另外因為成書時間緊,作者眼界和水平有限,如有錯漏,敬請廣大讀者指正。 |
內容簡介:本書與kubernetes架構細節為引子,深入挖掘kubernetes生產化時間過程中所遇到的挑戰和方案細節,重點包括:1. 規劃和構建企業級的kubernetes高可用集群2. 如何解決kubernetes落地過程中與企業生態系統的整合,構建多租戶解決方案3. 基于kubernetes的邊緣計算4. 全方位的性能調優,節點,網絡,kubernetes組件5. 如何保證用戶應用的高可用,如何通過監控,告警,自動策略等保證高可用。在這些話題的基礎上,本書的核心目的是,通過以上角度,全方位分享eBay在4年多kubernetes生產化時間之路中的經驗,目標是使本書稱為kubernetes生產化的案例參考手冊。 |
目錄:第1章 架構基礎 1
1.1 云計算的變革 3
1.1.1 物理機時代 3
1.1.2 虛擬化時代 4
1.1.3 容器化時代 6
1.2 Kubernetes模型設計 11
1.2.1 對象的通用設計原則 11
1.2.2 模型設計 12
1.2.3 核心對象概覽 16
1.2.4 控制器模式 20
1.2.5 控制器的協同工作原理 23
1.3 Kubernetes核心架構 25
1.3.1 核心控制平面組件 26
1.3.2 工作節點控制平面組件 33
1.3.3 Pod詳解 43
第2章 計算節點管理 52
2.1 操作系統 55
2.2 文件系統規劃 57
2.3 容器核心技術 58
2.3.1 Namespace 59
2.3.2 Cgroups 64
2.3.3 容器運行時 71
2.3.4 容器存儲驅動 77
2.4 節點資源管理 82
2.4.1 狀態上報 82
2.4.2 資源預留 83
2.4.3 驅逐管理 84
2.4.4 容器和系統資源配置 87
2.5 存儲方案 99
2.5.1 存儲卷插件管理 99
2.5.2 存儲的分類 102
2.6 節點調優 114
2.6.1 NUMA架構 114
2.6.2 CPU性能 115
2.6.3 內存 117
2.6.4 磁盤 120
2.6.5 網絡性能 121
第3章 構建高可用集群 138
3.1 高可用的常用手段 141
3.2 Kubernetes高可用層級 144
3.3 控制平面的高可用保證 148
3.3.1 etcd高可用保證 149
3.3.2 API Server高可用保證 156
3.3.3 控制器高可用保證 164
3.3.4 集群的安全性保證 165
3.4 面向應用的高可用特性 173
3.5 模型驅動的集群搭建與管理 176
第4章 構建企業級鏡像倉庫 184
4.1 鏡像倉庫綜述 185
4.1.1 鏡像倉庫 185
4.1.2 鏡像管理 187
4.2 企業級鏡像倉庫 189
4.2.1 架構總覽 191
4.2.2 數據庫 193
4.2.3 塊存儲 194
4.2.4 鏡像倉庫實例部署 195
4.3 鏡像倉庫緩存 196
4.3.1 鏡像分發的挑戰 196
4.3.2 鏡像緩存服務拓撲 198
4.3.3 鏡像緩存流量管理 199
4.3.4 高可用鏡像緩存服務 199
4.4 鏡像安全 200
4.4.1 鏡像掃描 201
4.4.2 鏡像策略準入控制 206
4.4.3 鏡像安全監控 210
第5章 多租戶生產集群 213
5.1 租戶 214
5.1.1 多租戶支持 214
5.1.2 Kubernetes多租戶有限支持 216
5.1.3 Kubernetes租戶擴展 218
5.2 認證 222
5.2.1 Kubernetes認證 222
5.2.2 用戶認證 225
5.2.3 高負載認證實踐 227
5.3 授權 229
5.3.1 Kubernetes授權 230
5.3.2 租戶授權 235
5.3.3 特殊權限管理 236
5.3.4 特殊權限應用 238
5.4 隔離 243
5.4.1 節點隔離 244
5.4.2 容器隔離 247
5.4.3 網絡策略隔離 249
5.5 配額 252
5.5.1 Kubernetes配額 252
5.5.2 高階配額 255
5.5.3 租戶配額 262
5.5.4 租戶配額實踐 265
第6章 網絡接入方案 267
6.1 數據中心基礎架構 268
6.2 域名服務 270
6.3 Linux網絡基礎 273
6.3.1 理解Linux網絡協議棧工作機制 273
6.3.2 iptables 275
6.3.3 ipset 277
6.3.4 IPVS 278
6.4 負載均衡 280
6.4.1 負載均衡的實現機制 281
6.4.2 負載均衡的技術實現 283
6.4.3 負載均衡的部署模式 288
6.4.4 負載均衡策略 289
6.4.5 健康檢查 291
6.5 Kubernetes中的服務發布 291
6.5.1 創建服務 293
6.5.2 服務的類型 296
6.5.3 基于kube-proxy實現的流量轉發 300
6.5.4 Service高級特性 308
6.6 DNS 312
第7章 API網關和服務網格 315
7.1 API網關 316
7.2 服務網格 320
7.3 深入了解Envoy 322
7.3.1 Envoy發現機制 325
7.3.2 Envoy架構 330
7.4 Ingress 334
7.4.1 功能概述 334
7.4.2 Ingress的挑戰 336
7.5 Contour 337
7.5.1 架構 338
7.5.2 高級功能 341
7.6 Istio 350
7.6.1 架構 350
7.6.2 Sidecar 353
7.6.3 Ingress網關 360
7.6.4 金絲雀發布和流量灰度 363
7.6.5 安全保證 365
7.6.6 策略管理和遙測 368
7.6.7 數據平面加速 371
7.6.8 優勢和挑戰 372
第8章 集群聯邦 374
8.1 集群聯邦概覽 377
8.1.1 集群聯邦設計 377
8.1.2 集群注冊中心 379
8.1.3 聯邦共享邏輯 380
8.1.4 聯邦類型配置 384
8.1.5 同步控制器 385
8.1.6 副本調度控制器 386
8.1.7 全局DNS服務 388
8.2 定義聯邦資源 390
8.2.1 集群資源 390
8.2.2 聯邦資源 391
8.2.3 定義聯邦資源 393
8.2.4 聯邦資源管理 397
8.3 聯邦應用 398
8.3.1 聯邦應用 400
8.3.2 聯邦應用部署 401
8.3.3 聯邦應用運維 402
8.3.4 集群聯邦的局限性與解決方案 409
第9章 邊緣計算 416
9.1 邊緣數據中心 417
9.1.1 智能域名服務(GSLB) 418
9.1.2 邊緣網絡接入 420
9.1.3 規劃邊緣計算應用 428
9.2 KubeEdge 430
9.2.1 通信協議 432
9.2.2 CloudCore 440
9.2.3 EdgeCore 446
9.2.4 設備映射器 450
9.2.5 未來展望 455
第10章 應用落地 456
10.1 應用容器化 459
10.1.1 Dockerfile 459
10.1.2 容器化帶來的影響 463
10.2 應用接入的最佳實踐 466
10.2.1 資源定義 466
10.2.2 靈活定義Pod 468
10.2.3 應用配置 473
10.3 應用管理 477
10.3.1 無狀態應用 477
10.3.2 有狀態應用 480
10.3.3 Operator 483
10.4 集群應用運維 485
第11章 監控和自動修復 488
11.1 指標監控系統 490
11.1.1 監控系統的構建 491
11.1.2 Prometheus Operator 499
11.2 日志管理系統 501
11.3 關鍵指標定義 503
11.4 自動修復系統 505
11.4.1 Node Problem Detector 505
11.4.2 自動修復控制器 508
11.5 事件監控系統 509
11.6 狀態監控系統 511
第12章 DEVOPS 513
12.1 擁抱DevOps 515
12.2 自治跨職能團隊 520
12.3 敏捷開發 523
12.4 GitOps 529
12.5 質量保證 533 |
序: |