本書的主要內(nèi)容有:學(xué)習(xí)容器和Kubernetes的基本原理,無需任何經(jīng)驗(yàn)。運(yùn)行自己的集群,或選擇Amazon、Google,以及其他公司托管的Kubernetes服務(wù)。通過Kubernetes管理資源的使用和容器生命周期。從成本、性能、彈性、容量和可伸縮性等方面優(yōu)化集群。學(xué)習(xí)開發(fā)、測(cè)試和部署應(yīng)用程序的工具。應(yīng)用安全、可觀察性和監(jiān)控方面的行業(yè)慣例。通過開發(fā)運(yùn)維原則來打造精簡(jiǎn)、快速和高效的團(tuán)隊(duì)。
關(guān)于Kubernetes基礎(chǔ)設(shè)施維護(hù)與支持的全面、權(quán)威、實(shí)用的書籍。。
Kubernetes是云原生世界的操作系統(tǒng),為運(yùn)行容器化的工作負(fù)載提供了可靠、可伸縮的平臺(tái)。在這本實(shí)用教程中,本書作者充分向你展示了Kubernetes有哪些功能,以及你可以利用Kubernetes做些什么。
你將學(xué)習(xí)Kubernetes的生態(tài)系統(tǒng),使用久經(jīng)考驗(yàn)的解決方案來解決日常問題。你可以按照書中的示例逐步學(xué)習(xí)如何構(gòu)建云原生應(yīng)用程序及其支持的基礎(chǔ)設(shè)施,還將學(xué)習(xí)如何構(gòu)建應(yīng)用程序的開發(fā)環(huán)境及持續(xù)部署流水線。
關(guān)于Kubernetes基礎(chǔ)設(shè)施維護(hù)與支持的全面、權(quán)威、實(shí)用的書籍。。
Jeremy Yates
Home Depot QuoteCenter的SRE團(tuán)隊(duì)成員
邏輯清晰,內(nèi)容豐富,涵蓋了所有細(xì)節(jié),同時(shí)兼具可讀性。
Will Thames
Skedulo平臺(tái)工程師
前言
在IT 運(yùn)維領(lǐng)域,開發(fā)運(yùn)維的核心原則已廣為人知并得到了廣泛采用,但是如今情況正在發(fā)生變化,一個(gè)名為Kubernetes 的新應(yīng)用程序平臺(tái)已被全世界各個(gè)不同行業(yè)的公司迅速采用。隨著越來越多的應(yīng)用程序和企業(yè)從傳統(tǒng)服務(wù)器遷移到Kubernetes 環(huán)境,人們開始關(guān)心如何在這個(gè)新世界中開展開發(fā)運(yùn)維的工作。
本書講解了以Kubernetes 為標(biāo)準(zhǔn)平臺(tái)的云原生世界中開發(fā)運(yùn)維的含義。不僅可以幫助你從Kubernetes 生態(tài)系統(tǒng)中挑選工具和框架,而且還呈上了一套使用這些工具和框架的統(tǒng)一方式,此外還提供了久經(jīng)考驗(yàn)可在實(shí)際生產(chǎn)環(huán)境中運(yùn)行的解決方案。
主要內(nèi)容
你將學(xué)習(xí)Kubernetes 是什么,它來自何處,以及對(duì)軟件開發(fā)和運(yùn)維的未來意味著什么。你將學(xué)習(xí)容器的工作原理,如何構(gòu)建和管理容器,以及如何設(shè)計(jì)云原生服務(wù)和基礎(chǔ)架構(gòu)。
你將了解自行構(gòu)建并運(yùn)行Kubernetes 集群與使用托管服務(wù)之間的利弊,將學(xué)習(xí)流行的Kubernetes 安裝工具(比如kops、kubeadm 和Kubespray)的功能、局限性以及優(yōu)缺點(diǎn),還將大致了解亞馬遜、Google 以及微軟提供的主流Kubernetes 托管產(chǎn)品的概況。
你將學(xué)習(xí)大量實(shí)踐經(jīng)驗(yàn),包括如何編寫和部署Kubernetes 應(yīng)用程序,如何配置和操作Kubernetes 集群,以及如何使用Helm 等工具自動(dòng)化云基礎(chǔ)設(shè)施與部署。你將了解Kubernetes 對(duì)安全、身份驗(yàn)證和權(quán)限的支持,包括基于角色的訪問控制(RBAC),以及在生產(chǎn)中保護(hù)容器和Kubernetes 的實(shí)踐。
你將學(xué)習(xí)如何設(shè)置Kubernetes 的持續(xù)集成和部署,如何備份和還原數(shù)據(jù),如何測(cè)試集群的一致性和可靠性,如何監(jiān)控、跟蹤、記錄和匯總指標(biāo),以及如何保證Kubernetes 基礎(chǔ)架構(gòu)兼具可擴(kuò)展性、彈性和高性價(jià)比。
為了方便說明,我們引入了一個(gè)非常簡(jiǎn)單的演示應(yīng)用程序。你可以通過本書Git 代碼庫(kù)中的代碼來學(xué)習(xí)所有的示例。
本書面向的讀者對(duì)象
本書主要面向負(fù)責(zé)服務(wù)器、應(yīng)用程序和服務(wù)的IT 運(yùn)維人員,以及負(fù)責(zé)構(gòu)建云原生服務(wù)或?qū)F(xiàn)有應(yīng)用程序遷移到Kubernetes 和云端的開發(fā)人員。我們不要求你了解有關(guān)Kubernetes 或容器的前提知識(shí),書中已經(jīng)涵蓋這些基本知識(shí),所以請(qǐng)不用擔(dān)心。
經(jīng)驗(yàn)豐富的Kubernetes 用戶也可以從本書中找到很多有價(jià)值的材料,比如本書涵蓋了RBAC、持續(xù)部署、機(jī)密管理以及可觀察性等高級(jí)主題。無論你的專業(yè)水平如何,我們都希望你可以從本書中找到有用的信息。
本書解決的主要問題
在計(jì)劃和創(chuàng)作本書期間,我們與數(shù)百人就云原生和Kubernetes 進(jìn)行了交流,其中既有行業(yè)領(lǐng)導(dǎo)者和專家,也有初學(xué)者。下面是他們希望本書能夠解決的問題:
我希望了解為什么我應(yīng)該把時(shí)間投入到這項(xiàng)技術(shù)上。它能夠幫助我和我的團(tuán)隊(duì)解決哪些問題?
Kubernetes 看起來很棒,但是學(xué)習(xí)曲線相當(dāng)陡峭。建立一個(gè)快速的演示很容易,但是運(yùn)維和故障排除似乎非常有難度。我們希望獲得一些可靠的指導(dǎo),了解人們?nèi)绾卧诂F(xiàn)實(shí)世界中運(yùn)行Kubernetes 集群,以及我們可能會(huì)遇到哪些問題。
希望提供一些真知灼見。對(duì)于新手團(tuán)隊(duì)來說,Kubernetes 生態(tài)系統(tǒng)提供了太多選擇。當(dāng)有多種方式都可以完成同一項(xiàng)工作時(shí),哪一種才是好的?我們?cè)撊绾芜x擇?
而其中重要的問題是:
如何在不破壞公司現(xiàn)有狀況的情況下使用Kubernetes ?
在編寫本書時(shí),我們牢記包括上述問題在內(nèi)的許多問題,并竭盡全力回答這些問題。這些問題是否得到了解答?請(qǐng)仔細(xì)閱讀本書吧。
排版約定
本書使用了下述排版約定。
斜體(Italic)
表示新術(shù)語、URL、示例電子郵件地址、文件名、擴(kuò)展名、路徑名和目錄。
等寬字體(Constant Width)
表示命令、選項(xiàng)、開關(guān)、變量、屬性、鍵、函數(shù)、類型、類、命名空間、方法、模塊、屬性、參數(shù)、值、對(duì)象、事件、事件句柄、XML 標(biāo)簽、HTML 標(biāo)簽、宏、文件的內(nèi)容,或者命令的輸出。
斜體等寬字體(constant width italic)
表示應(yīng)該替換成用戶提供的值。
使用代碼示例
你可以通過如下鏈接下載本書的補(bǔ)充材料(代碼示例,練習(xí)等):https://github.com/cloudnativedevops/demo
本書的目的是幫助你完成工作。一般來說,你可以在自己的程序或者文檔中使用本書附帶的示例代碼。你無需聯(lián)系我們獲得使用許可,除非你要復(fù)制大量的代碼。例如,使用本書中的多個(gè)代碼片段編寫程序就無需獲得許可。但以CD-ROM 的形式銷售或者分發(fā)OReilly 書中的示例代碼則需要獲得許可;卮饐栴}時(shí)援引本書內(nèi)容以及書中示例代碼,無需獲得許可。在你自己的項(xiàng)目文檔中使用本書大量的示例代碼時(shí),則需要獲得許可。
我們不強(qiáng)制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和國(guó)際標(biāo)準(zhǔn)書號(hào)。例如:Cloud Native DevOps with Kubernetes by John Arundel and Justin Domingus (OReilly). Copyright 2019 John Arundel and Justin Domingus, 978-1-492-04076-7。
如果你覺得自身情況不在合理使用或上述允許的范圍內(nèi),請(qǐng)通過郵件和我們聯(lián)系,地址是 permissions@oreilly.com。
OReilly Online Learning
40 年間,OReilly Media 為眾多公司提供技術(shù)和商業(yè)培訓(xùn),提升知識(shí)儲(chǔ)備和洞察力,為企業(yè)的成功助力。
我們有一群獨(dú)家專家和創(chuàng)新者,他們通過圖書、文章、會(huì)議和在線學(xué)習(xí)平臺(tái)分享知識(shí)和技術(shù)。OReilly 的在線學(xué)習(xí)平臺(tái)提供按需訪問的直播培訓(xùn)課程、詳細(xì)的學(xué)習(xí)路徑、交互式編程環(huán)境,以及由OReilly 和其他200 多家出版社出版的書籍和視頻。
詳情請(qǐng)?jiān)L問 http://oreilly.com。
聯(lián)系方式
請(qǐng)將你對(duì)本書的評(píng)價(jià)和問題發(fā)給出版社:
美國(guó):
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2 號(hào)成銘大廈C 座807 室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
這本書有專屬網(wǎng)頁(yè),你可以在那里找到本書的勘誤、示例和其他信息。地址是:http://bit.ly/cloud-nat-dev-ops
如果你對(duì)本書有一些評(píng)論或技術(shù)上的建議,請(qǐng)發(fā)送電子郵件到bookquestions@oreilly.com。
要了解OReilly 圖書、培訓(xùn)課程和新聞的更多信息,請(qǐng)?jiān)L問我們的網(wǎng)站,地址是:
http://www.oreilly.com
我們的Facebook:
http://facebook.com/oreilly
我們的Twitter:
http://twitter.com/oreillymedia
我們的Youtube 視頻:
http://www.youtube.com/oreillymedia
致謝
本書得以付梓,我要感謝很多人閱讀本書的初稿并提供了寶貴反饋和建議,還有通過其他方式予以支持的人,包括(但不限于)Abby Bangser、Adam J.McPartlan、Adrienne Domingus、Alexis Richardson、Aron Trauring、Camilla Montonen、 Gabriell Nascimento、Hannah Klemme、Hans Findel、Ian Crosby、Ian Shaw、Ihor Dvoretskyi、Ike Devolder、Jeremy Yates、 Jérme Petazzoni、Jessica Deen、John Harris、Jon Barber、Kitty Karate、Marco Lancini、Mark Ellens、Matt North、Michel Blanc、Mitchell Kent、Nicolas Steinmetz、Nigel Brown、Patrik Duditš、Paul van der Linden、Philippe Ensarguet、Pietro Mamberti、 Richard Harper、Rick Highness、Sathyajith Bhat、Suresh Vishnoi、Thomas Liakos、Tim McGinnis、Toby Sullivan、Tom Hall、 Vincent De Smet 和Will Thames 等。
John Arundel是一位顧問和作家,擁有30多年計(jì)算機(jī)行業(yè)的從業(yè)經(jīng)驗(yàn)。他為全世界各大公司提供有關(guān)Kubernetes、云,以及基礎(chǔ)設(shè)施的咨詢。Justin Domingus是CareZone.com的開發(fā)運(yùn)維工程師,專門從事Kubernetes和云計(jì)算。
目錄
序 . 1
前言 . 3
第1 章 云革命 11
1.1 云的誕生 12
1.1.1 購(gòu)買時(shí)間12
1.1.2 基礎(chǔ)設(shè)施即服務(wù) 13
1.2 開發(fā)運(yùn)維拉開序幕 14
1.2.1 沒有人真正理解開發(fā)運(yùn)維 15
1.2.2 業(yè)務(wù)優(yōu)勢(shì)16
1.2.3 基礎(chǔ)設(shè)施即代碼 17
1.2.4 共同學(xué)習(xí)17
1.3 容器的到來 18
1.3.1 的技術(shù) 18
1.3.2 箱子帶來的啟發(fā) 19
1.3.3 將軟件放入容器 20
1.3.4 即插即用的應(yīng)用程序 .21
1.4 容器的編排 22
1.5 Kubernetes 23
1.5.1 從Borg 到Kubernetes 23
1.5.2 什么因素導(dǎo)致Kubernetes 如此有價(jià)值? 24
1.5.3 Kubernetes 會(huì)消失嗎? 26
1.5.4 Kubernetes 并非 .26
1.6 云原生 28
1.7 運(yùn)維的未來 30
1.7.1 分布式開發(fā)運(yùn)維 31
1.7.2 有些仍然是中心式 31
1.7.3 開發(fā)人員生產(chǎn)力工程 .31
1.7.4 你就是未來 .32
1.8 小結(jié) .33
第2 章 Kubernetes 簡(jiǎn)介 35
2.1 次運(yùn)行容器 35
2.1.1 安裝Docker 桌面版 36
2.1.2 什么是Docker ? 37
2.1.3 運(yùn)行容器鏡像 37
2.2 演示應(yīng)用程序 .38
2.2.1 查看源代碼 .38
2.2.2 Go 簡(jiǎn)介 39
2.2.3 演示應(yīng)用程序的原理 .40
2.3 建立容器 40
2.3.1 了解Dockerfile .41
2.3.2 限度的容器鏡像 .42
2.3.3 運(yùn)行Docker image build 42
2.3.4 命名鏡像43
2.3.5 端口轉(zhuǎn)發(fā)43
2.4 容器倉(cāng)庫(kù) 44
2.4.1 容器倉(cāng)庫(kù)的身份驗(yàn)證 .45
2.4.2 命名和推送鏡像 45
2.4.3 運(yùn)行鏡像46
2.5 Kubernetes 入門 .46
2.5.1 運(yùn)行演示應(yīng)用 47
2.5.2 如果容器無法啟動(dòng) 48
2.6 Minikube 48
2.7 小結(jié) .48
第3 章 獲取Kubernetes 51
3.1 集群架構(gòu) 52
3.1.1 控制平面52
3.1.2 節(jié)點(diǎn)組件53
3.1.3 高可用性54
3.2 自托管Kubernetes 的成本 56
3.2.1 超出預(yù)期的工作量 56
3.2.2 不僅僅是初始設(shè)置 57
3.2.3 不能完全依賴工具 58
3.2.4 Kubernetes 的難度很大 59
3.2.5 管理費(fèi)用59
3.2.6 從托管服務(wù)開始 59
3.3 托管Kubernetes 服務(wù) .60
3.3.1 Google Kubernetes Engine(GKE) 61
3.3.2 集群自動(dòng)伸縮 62
3.3.3 亞馬遜的Elastic Container Service for Kubernetes(EKS) .62
3.3.4 Azure Kubernetes Service(AKS) 63
3.3.5 OpenShift .63
3.3.6 IBM Cloud Kubernetes Service .63
3.4 一站式Kubernetes 解決方案 64
3.5 Kubernetes 安裝程序 64
3.5.1 kops 64
3.5.2 Kubespray 65
3.5.3 TK8 .65
3.5.4 困難模式的Kubernetes 66
3.5.5 kubeadm 66
3.5.6 Tarmak 66
3.5.7 Rancher Kubernetes Engine(RKE) 66
3.5.8 Puppet Kubernetes 模塊 67
3.5.9 Kubeformation 67
3.6 購(gòu)買還是構(gòu)建:我們的建議 67
3.6.1 運(yùn)行更少軟件 68
3.6.2 盡可能使用托管Kubernetes 68
3.6.3 如何應(yīng)對(duì)提供商鎖定? 69
3.6.4 根據(jù)需要使用標(biāo)準(zhǔn)的Kubernetes 自托管工具 70
3.6.5 當(dāng)你的選擇受到限制時(shí) 70
3.6.6 裸金屬與內(nèi)部服務(wù)器 .70
3.7 無集群容器服務(wù) 71
3.7.1 Amazon Fargate 72
3.7.2 Azure Container Instances(ACI) .72
3.8 小結(jié) .73
第4 章 Kubernetes 對(duì)象 75
4.1 部署 .75
4.1.1 監(jiān)督與調(diào)度 .76
4.1.2 重新啟動(dòng)容器 76
4.1.3 查詢部署77
4.2 Pod 78
4.3 副本集 79
4.4 維持所需狀態(tài) .80
4.5 Kubernetes 調(diào)度器 81
4.6 YAML 格式的資源清單 .82
4.6.1 資源就是數(shù)據(jù) 82
4.6.2 部署清單83
4.6.3 使用kubectl apply 84
4.6.4 服務(wù)資源85
4.6.5 使用kubectl 查詢集群 88
4.6.6 資源的高級(jí)使用方式 .89
4.7 Helm:Kubernetes 包管理器 90
4.7.1 安裝Helm 90
4.7.2 安裝Helm Chart 91
4.7.3 Chart、Repository 與Release 92
4.7.4 查看Helm Release 92
4.8 小結(jié) .93
第5 章 資源管理 95
5.1 了解資源 95
5.1.1 資源單位96
5.1.2 資源請(qǐng)求96
5.1.3 資源約束97
5.1.4 控制容器的大小 99
5.2 管理容器的生命周期 99
5.2.1 存活探針99
5.2.2 探針延遲及頻率 100
5.2.3 其他類型的探針 101
5.2.4 gRPC 探針 101
5.2.5 就緒探針102
5.2.6 基于文件的就緒探針 103
5.2.7 minReadySeconds .104
5.2.8 Pod 中斷預(yù)算 104
5.3 命名空間 .106
5.3.1 使用命名空間 .107
5.3.2 應(yīng)該使用哪些命名空間? 107
5.3.3 服務(wù)地址 108
5.3.4 資源配額109
5.3.5 默認(rèn)資源請(qǐng)求和約束 111
5.4 優(yōu)化集群的成本 . 112
5.4.1 優(yōu)化部署 112
5.4.2 優(yōu)化Pod 113
5.4.3 Pod 垂直自動(dòng)伸縮器 114
5.4.4 優(yōu)化節(jié)點(diǎn) 114
5.4.5 優(yōu)化存儲(chǔ) 116
5.4.6 清理未使用的資源 117
5.4.7 檢查備用容量 .120
5.4.8 使用預(yù)留實(shí)例 .120
5.4.9 搶占式(Spot)實(shí)例 121
5.4.10 保持工作負(fù)載均衡 .123
5.5 小結(jié) 126
第6 章 集群運(yùn)維 129
6.1 集群的規(guī)模與伸縮 .129
6.1.1 容量規(guī)劃130
6.1.2 節(jié)點(diǎn)與實(shí)例 133
6.1.3 伸縮集群136
6.2 一致性檢查 138
6.2.1 CNCF 認(rèn)證 139
6.2.2 Sonobuoy 一致性測(cè)試 141
6.3 驗(yàn)證與審計(jì) 141
6.3.1 K8Guard 142
6.3.2 Copper 142
6.3.3 kube-bench 143
6.3.4 Kubernetes 審計(jì)日志 143
6.4 混亂測(cè)試 .144
6.4.1 生產(chǎn)環(huán)境是無法復(fù)制的 .144
6.4.2 Chaoskube 145
6.4.3 kube-monkey 146
6.4.4 PowerfulSeal 146
6.5 小結(jié) 147
第7 章 強(qiáng)大的Kubernetes 工具 . 149
7.1 掌握kubectl 149
7.1.1 Shell 別名 .150
7.1.2 使用縮寫的標(biāo)志 150
7.1.3 縮寫資源的類型 151
7.1.4 自動(dòng)補(bǔ)齊kubectl 命令 151
7.1.5 獲取幫助152
7.1.6 獲取有關(guān)Kubernetes 資源的幫助 .152
7.1.7 顯示更詳細(xì)的輸出 153
7.1.8 使用JSON 數(shù)據(jù)和jq 154
7.1.9 監(jiān)視對(duì)象155
7.1.10 描述對(duì)象 .155
7.2 處理資源 .156
7.2.1 命令式的kubectl 命令 156
7.2.2 何時(shí)不應(yīng)該使用命令式的命令 157
7.2.3 生成資源清單 .158
7.2.4 導(dǎo)出資源159
7.2.5 對(duì)比資源的差異 159
7.3 處理容器 .160
7.3.1 查看容器的日志 160
7.3.2 附著到容器 162
7.3.3 利用kubespy 監(jiān)視Kubernetes 資源 162
7.3.4 轉(zhuǎn)發(fā)容器端口 .163
7.3.5 在容器上執(zhí)行命令 163
7.3.6 容器的故障排除 164
7.3.7 BusyBox 命令 .166
7.3.8 將BusyBox 添加到容器 167
7.3.9 在容器上安裝程序 168
7.3.10 通過kubesquash 實(shí)時(shí)調(diào)試 168
7.4 上下文與命名空間 .170
7.4.1 kubectx 與kubens .171
7.4.2 kube-ps1 172
7.5 Kubernetes shell 與工具 173
7.5.1 kube-shell 173
7.5.2 Click 173
7.5.3 Kubed-sh 174
7.5.4 Stern 174
7.6 構(gòu)建自己的Kubernetes 工具 175
7.7 小結(jié) 176
第8 章 運(yùn)行容器 179
8.1 容器與Pod .179
8.1.1 什么是容器? .180
8.1.2 容器中有什么? 181
8.1.3 Pod 中有什么? .182
8.2 容器清單 .183
8.2.1 鏡像標(biāo)識(shí)符 184
8.2.2 latest 標(biāo)簽 .185
8.2.3 容器摘要186
8.2.4 基礎(chǔ)鏡像標(biāo)簽 .186
8.2.5 端口 .187
8.2.6 資源請(qǐng)求和約束 187
8.2.7 鏡像拉取策略 .188
8.2.8 環(huán)境變量188
8.3 容器安全 .189
8.3.1 以非root 用戶身份運(yùn)行容器 190
8.3.2 阻止Root 容器 191
8.3.3 設(shè)置只讀文件系統(tǒng) 192
8.3.4 禁用權(quán)限提升 .192
8.3.5 能力 .193
8.3.6 Pod 安全上下文 .195
8.3.7 Pod 安全策略 195
8.3.8 Pod 服務(wù)賬號(hào) 196
8.4 卷 197
8.4.1 emptyDir 卷 .197
8.4.2 持久卷 199
8.5 重啟策略 .200
8.6 鏡像拉取機(jī)密 200
8.7 小結(jié) 201
第9 章 管理Pod 203
9.1 標(biāo)簽 203
9.1.1 什么是標(biāo)簽? .204
9.1.2 選擇器 204
9.1.3 高級(jí)選擇器 205
9.1.4 標(biāo)簽的其他用途 207
9.1.5 標(biāo)簽與注釋 208
9.2 節(jié)點(diǎn)親和性 208
9.2.1 硬親和性209
9.2.2 軟親和性210
9.3 Pod 的親和性與反親和性 211
9.3.1 將Pod 調(diào)度到一起 211
9.3.2 分開Pod 212
9.3.3 軟反親和性 213
9.3.4 何時(shí)使用Pod 親和性 214
9.4 污點(diǎn)與容忍 214
9.5 Pod 控制器 .216
9.5.1 守護(hù)進(jìn)程集 217
9.5.2 狀態(tài)集 218
9.5.3 作業(yè) .220
9.5.4 定時(shí)作業(yè)221
9.5.5 Pod 水平自動(dòng)伸縮器222
9.5.6 PodPreset 224
9.5.7 操作器與自定義資源定義(CRD) 226
9.6 Ingress 資源 227
9.6.1 Ingress 規(guī)則 .228
9.6.2 通過Ingress 終止TLS 229
9.6.3 Ingress 控制器 230
9.7 Istio 231
9.8 Envoy 232
9.9 小結(jié) 233
第10 章 配置與機(jī)密數(shù)據(jù) 235
10.1 ConfigMap 236
10.1.1 創(chuàng)建ConfigMap 236
10.1.2 利用ConfigMap 設(shè)置環(huán)境變量 237
10.1.3 利用ConfigMap 設(shè)置整個(gè)環(huán)境 240
10.1.4 在命令參數(shù)中使用環(huán)境變量 .241
10.1.5 利用ConfigMap 創(chuàng)建配置文件 242
10.1.6 配置發(fā)生變化后更新Pod 245
10.2 Kubernetes Secret .245
10.2.1 利用機(jī)密數(shù)據(jù)設(shè)置環(huán)境變量 .246
10.2.2 將Secret 寫入文件 247
10.2.3 讀取Secrest 248
10.2.4 訪問Secret.250
10.2.5 靜態(tài)加密 .250
10.2.6 防止Secret 被刪 .251
10.3 Secret 管理策略 251
10.3.1 在版本控制中加密機(jī)密 252
10.3.2 遠(yuǎn)程存儲(chǔ)Secret 253
10.3.3 使用專業(yè)的機(jī)密管理工具253
10.3.4 推薦 254
10.4 使用Sops 加密機(jī)密數(shù)據(jù) 255
10.4.1 Sops 簡(jiǎn)介 255
10.4.2 使用Sops 加密文件 256
10.4.3 使用KMS 后端 258
10.5 小結(jié) 259
第11 章 安全與備份 261
11.1 訪問控制與權(quán)限 261
11.1.1 按集群管理訪問 261
11.1.2 基于角色的訪問控制 262
11.1.3 角色 263
11.1.4 將角色綁定到用戶 .264
11.1.5 我需要哪些角色? .265
11.1.6 保護(hù)集群管理員的權(quán)限 265
11.1.7 應(yīng)用程序與部署 266
11.1.8 RBAC 故障排除 267
11.2 安全掃描 268
11.2.1 Clair 268
11.2.2 Aqua 268
11.2.3 Anchore Engine 269
11.3 備份 270
11.3.1 Kubernetes 需要備份嗎? 270
11.3.2 備份etcd .270
11.3.3 備份資源狀態(tài) 271
11.3.4 備份集群狀態(tài) 271
11.3.5 大小災(zāi)害 .272
11.3.6 Velero 272
11.4 監(jiān)控集群狀態(tài) 277
11.4.1 Kubectl.277
11.4.2 CPU 和內(nèi)存利用率 280
11.4.3 云提供商控制臺(tái) 280
11.4.4 Kubernetes 儀表板 .281
11.4.5 Weave Scope .283
11.4.6 kube-ops-view 283
11.4.7 node-problem-detector .283
11.5 深入閱讀 284
11.6 小結(jié) 285
第12 章 部署Kubernetes 應(yīng)用程序 287
12.1 使用Helm 構(gòu)建清單 287
12.1.1 Helm Chart 包含什么? 288
12.1.2 Helm 模板 289
12.1.3 插值變量 .291
12.1.4 引用模板中的值 .292
12.1.5 指定依賴項(xiàng) 292
12.2 部署Heml Chart 293
12.2.1 設(shè)置變量 .293
12.2.2 在Helm Release 中指定值 .294
12.2.3 使用Helm 更新應(yīng)用程序 295
12.2.4 回滾到以前的版本 .296
12.2.5 創(chuàng)建Helm Chart 庫(kù) 296
12.2.6 使用Sops 管理Helm Chart 的機(jī)密數(shù)據(jù) .297
12.3 使用Helmfile 管理多個(gè)Chart 300
12.3.1 Helmfile 中有什么? 300
12.3.2 Chart 元數(shù)據(jù) .301
12.3.3 應(yīng)用Helmfile302
12.4 高級(jí)清單管理工具 304
12.4.1 Tanka 304
12.4.2 Kapitan 304
12.4.3 Kustomize 305
12.4.4 kompose 305
12.4.5 Ansible .306
12.4.6 kubeval 307
12.5 小結(jié) 307
第13 章 開發(fā)流程 . 309
13.1 開發(fā)工具 309
13.1.1 Skaffold 310
13.1.2 Draft .310
13.1.3 Telepresence 310
13.1.4 Knative 311
13.2 部署策略 311
13.2.1 滾動(dòng)更新 .312
13.2.2 Recreate 模式 313
13.2.3 maxSurge 和maxUnavailable 313
13.2.4 藍(lán)綠部署 .314
13.2.5 彩虹部署 .315
13.2.6 金絲雀部署 316
13.3 使用Helm 處理遷移 316
13.3.1 Helm 的鉤子 .317
13.3.2 處理失敗的鉤子 .318
13.3.3 其他鉤子 .318
13.3.4 鉤子連接 .319
13.4 小結(jié) 320
第14 章 Kubernetes 的持續(xù)部署 321
14.1 什么是持續(xù)部署? 321
14.2 CD 工具 322
14.2.1 Jenkins .323
14.2.2 Drone 323
14.2.3 Google 云構(gòu)建 .323
14.2.4 Concourse 324
14.2.5 Spinnaker 324
14.2.6 GitLab CI 324
14.2.7 Codefresh 324
14.2.8 Azure 流水線 324
14.3 CD 組件 325
14.3.1 Docker Hub 325
14.3.2 Gitkube 325
14.3.3 Flux 325
14.3.4 Keel 325
14.4 Google 云構(gòu)建的CD 流水線 .326
14.4.1 設(shè)置Google 云和GKE 326
14.4.2 分叉demo 代碼庫(kù) 327
14.4.3 Google 云構(gòu)建簡(jiǎn)介 327
14.4.4 構(gòu)建測(cè)試容器 327
14.4.5 運(yùn)行測(cè)試 .329
14.4.6 構(gòu)建應(yīng)用程序容器 .329
14.4.7 驗(yàn)證Kubernetes 清單 329
14.4.8 發(fā)布鏡像 .330
14.4.9 Git SHA 標(biāo)簽 330
14.4.10 創(chuàng)建個(gè)構(gòu)建觸發(fā)器 331
14.4.11 測(cè)試觸發(fā)器 .332
14.4.12 CD 流水線部署 .333
14.4.13 創(chuàng)建部署觸發(fā)器336
14.4.14 優(yōu)化構(gòu)建流水線337
14.4.15 調(diào)整示例流水線338
14.5 小結(jié) 338
第15 章 可觀察性和監(jiān)控 341
15.1 什么是可觀察性? 341
15.1.1 什么是監(jiān)控? 341
15.1.2 黑盒監(jiān)控 .342
15.1.3 正常指什么? .344
15.1.4 日志 345
15.1.5 指標(biāo) 347
15.1.6 跟蹤 349
15.1.7 可觀察性 .350
15.2 可觀測(cè)性流水線 351
15.3 Kubernetes 中的監(jiān)控 .353
15.3.1 外部的黑盒檢查 .353
15.3.2 內(nèi)部健康檢查 355
15.4 小結(jié) 357
第16 章 Kubernetes 指標(biāo) . 359
16.1 什么是指標(biāo)? 359
16.1.1 時(shí)間序列數(shù)據(jù) 360
16.1.2 計(jì)數(shù)器和計(jì)量器 .361
16.1.3 指標(biāo)可以告訴我們什么?361
16.2 選擇指標(biāo) 361
16.2.1 服務(wù):RED 模式 362
16.2.2 資源:USE 模式 .364
16.2.3 業(yè)務(wù)指標(biāo) .365
16.2.4 Kubernetes 指標(biāo) 366
16.3 分析指標(biāo) 370
16.3.1 簡(jiǎn)單的平均值有什么問題? .371
16.3.2 平均值、中位數(shù)和離群值371
16.3.3 百分位數(shù) .372
16.3.4 將百分位數(shù)應(yīng)用于指標(biāo)數(shù)據(jù) .373
16.3.5 一般我們想知道壞的情況 .375
16.3.6 比百分位數(shù)更好的方式 375
16.4 通過儀表板顯示指標(biāo)的圖表 376
16.4.1 所有服務(wù)都使用標(biāo)準(zhǔn)布局376
16.4.2 利用主儀表板構(gòu)建信息發(fā)射源 377
16.4.3 在儀表板上顯示預(yù)示故障的數(shù)據(jù) 379
16.5 根據(jù)指標(biāo)發(fā)出警報(bào) 380
16.5.1 警報(bào)有什么問題? .380
16.5.2 值班不應(yīng)該成為地獄 381
16.5.3 緊急、重大且需要付諸行動(dòng)的警報(bào) 382
16.5.4 跟蹤警報(bào)、工作時(shí)間外的呼叫 383
16.6 指標(biāo)工具和服務(wù) 384
16.6.1 Prometheus 384
16.6.2 Google Stackdriver.387
16.6.3 AWS Cloudwatch 387
16.6.4 Azure Monitor 388
16.6.5 Datadog 388
16.6.6 New Relic 389
16.7 小結(jié) 390
后記 393
作者介紹 397
封面介紹 397