本書的主要內(nèi)容有:學習容器和Kubernetes的基本原理,無需任何經(jīng)驗。運行自己的集群,或選擇Amazon、Google,以及其他公司托管的Kubernetes服務。通過Kubernetes管理資源的使用和容器生命周期。從成本、性能、彈性、容量和可伸縮性等方面優(yōu)化集群。學習開發(fā)、測試和部署應用程序的工具。應用安全、可觀察性和監(jiān)控方面的行業(yè)慣例。通過開發(fā)運維原則來打造精簡、快速和高效的團隊。
關于Kubernetes基礎設施維護與支持的全面、權威、實用的書籍。。
Kubernetes是云原生世界的操作系統(tǒng),為運行容器化的工作負載提供了可靠、可伸縮的平臺。在這本實用教程中,本書作者充分向你展示了Kubernetes有哪些功能,以及你可以利用Kubernetes做些什么。
你將學習Kubernetes的生態(tài)系統(tǒng),使用久經(jīng)考驗的解決方案來解決日常問題。你可以按照書中的示例逐步學習如何構建云原生應用程序及其支持的基礎設施,還將學習如何構建應用程序的開發(fā)環(huán)境及持續(xù)部署流水線。
關于Kubernetes基礎設施維護與支持的全面、權威、實用的書籍。。
Jeremy Yates
Home Depot QuoteCenter的SRE團隊成員
邏輯清晰,內(nèi)容豐富,涵蓋了所有細節(jié),同時兼具可讀性。
Will Thames
Skedulo平臺工程師
前言
在IT 運維領域,開發(fā)運維的核心原則已廣為人知并得到了廣泛采用,但是如今情況正在發(fā)生變化,一個名為Kubernetes 的新應用程序平臺已被全世界各個不同行業(yè)的公司迅速采用。隨著越來越多的應用程序和企業(yè)從傳統(tǒng)服務器遷移到Kubernetes 環(huán)境,人們開始關心如何在這個新世界中開展開發(fā)運維的工作。
本書講解了以Kubernetes 為標準平臺的云原生世界中開發(fā)運維的含義。不僅可以幫助你從Kubernetes 生態(tài)系統(tǒng)中挑選工具和框架,而且還呈上了一套使用這些工具和框架的統(tǒng)一方式,此外還提供了久經(jīng)考驗可在實際生產(chǎn)環(huán)境中運行的解決方案。
主要內(nèi)容
你將學習Kubernetes 是什么,它來自何處,以及對軟件開發(fā)和運維的未來意味著什么。你將學習容器的工作原理,如何構建和管理容器,以及如何設計云原生服務和基礎架構。
你將了解自行構建并運行Kubernetes 集群與使用托管服務之間的利弊,將學習流行的Kubernetes 安裝工具(比如kops、kubeadm 和Kubespray)的功能、局限性以及優(yōu)缺點,還將大致了解亞馬遜、Google 以及微軟提供的主流Kubernetes 托管產(chǎn)品的概況。
你將學習大量實踐經(jīng)驗,包括如何編寫和部署Kubernetes 應用程序,如何配置和操作Kubernetes 集群,以及如何使用Helm 等工具自動化云基礎設施與部署。你將了解Kubernetes 對安全、身份驗證和權限的支持,包括基于角色的訪問控制(RBAC),以及在生產(chǎn)中保護容器和Kubernetes 的實踐。
你將學習如何設置Kubernetes 的持續(xù)集成和部署,如何備份和還原數(shù)據(jù),如何測試集群的一致性和可靠性,如何監(jiān)控、跟蹤、記錄和匯總指標,以及如何保證Kubernetes 基礎架構兼具可擴展性、彈性和高性價比。
為了方便說明,我們引入了一個非常簡單的演示應用程序。你可以通過本書Git 代碼庫中的代碼來學習所有的示例。
本書面向的讀者對象
本書主要面向負責服務器、應用程序和服務的IT 運維人員,以及負責構建云原生服務或將現(xiàn)有應用程序遷移到Kubernetes 和云端的開發(fā)人員。我們不要求你了解有關Kubernetes 或容器的前提知識,書中已經(jīng)涵蓋這些基本知識,所以請不用擔心。
經(jīng)驗豐富的Kubernetes 用戶也可以從本書中找到很多有價值的材料,比如本書涵蓋了RBAC、持續(xù)部署、機密管理以及可觀察性等高級主題。無論你的專業(yè)水平如何,我們都希望你可以從本書中找到有用的信息。
本書解決的主要問題
在計劃和創(chuàng)作本書期間,我們與數(shù)百人就云原生和Kubernetes 進行了交流,其中既有行業(yè)領導者和專家,也有初學者。下面是他們希望本書能夠解決的問題:
我希望了解為什么我應該把時間投入到這項技術上。它能夠幫助我和我的團隊解決哪些問題?
Kubernetes 看起來很棒,但是學習曲線相當陡峭。建立一個快速的演示很容易,但是運維和故障排除似乎非常有難度。我們希望獲得一些可靠的指導,了解人們?nèi)绾卧诂F(xiàn)實世界中運行Kubernetes 集群,以及我們可能會遇到哪些問題。
希望提供一些真知灼見。對于新手團隊來說,Kubernetes 生態(tài)系統(tǒng)提供了太多選擇。當有多種方式都可以完成同一項工作時,哪一種才是好的?我們該如何選擇?
而其中重要的問題是:
如何在不破壞公司現(xiàn)有狀況的情況下使用Kubernetes ?
在編寫本書時,我們牢記包括上述問題在內(nèi)的許多問題,并竭盡全力回答這些問題。這些問題是否得到了解答?請仔細閱讀本書吧。
排版約定
本書使用了下述排版約定。
斜體(Italic)
表示新術語、URL、示例電子郵件地址、文件名、擴展名、路徑名和目錄。
等寬字體(Constant Width)
表示命令、選項、開關、變量、屬性、鍵、函數(shù)、類型、類、命名空間、方法、模塊、屬性、參數(shù)、值、對象、事件、事件句柄、XML 標簽、HTML 標簽、宏、文件的內(nèi)容,或者命令的輸出。
斜體等寬字體(constant width italic)
表示應該替換成用戶提供的值。
使用代碼示例
你可以通過如下鏈接下載本書的補充材料(代碼示例,練習等):https://github.com/cloudnativedevops/demo
本書的目的是幫助你完成工作。一般來說,你可以在自己的程序或者文檔中使用本書附帶的示例代碼。你無需聯(lián)系我們獲得使用許可,除非你要復制大量的代碼。例如,使用本書中的多個代碼片段編寫程序就無需獲得許可。但以CD-ROM 的形式銷售或者分發(fā)OReilly 書中的示例代碼則需要獲得許可。回答問題時援引本書內(nèi)容以及書中示例代碼,無需獲得許可。在你自己的項目文檔中使用本書大量的示例代碼時,則需要獲得許可。
我們不強制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和國際標準書號。例如: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),請通過郵件和我們聯(lián)系,地址是 permissions@oreilly.com。
OReilly Online Learning
40 年間,OReilly Media 為眾多公司提供技術和商業(yè)培訓,提升知識儲備和洞察力,為企業(yè)的成功助力。
我們有一群獨家專家和創(chuàng)新者,他們通過圖書、文章、會議和在線學習平臺分享知識和技術。OReilly 的在線學習平臺提供按需訪問的直播培訓課程、詳細的學習路徑、交互式編程環(huán)境,以及由OReilly 和其他200 多家出版社出版的書籍和視頻。
詳情請訪問 http://oreilly.com。
聯(lián)系方式
請將你對本書的評價和問題發(fā)給出版社:
美國:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)
奧萊利技術咨詢(北京)有限公司
這本書有專屬網(wǎng)頁,你可以在那里找到本書的勘誤、示例和其他信息。地址是:http://bit.ly/cloud-nat-dev-ops
如果你對本書有一些評論或技術上的建議,請發(fā)送電子郵件到bookquestions@oreilly.com。
要了解OReilly 圖書、培訓課程和新聞的更多信息,請訪問我們的網(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多年計算機行業(yè)的從業(yè)經(jīng)驗。他為全世界各大公司提供有關Kubernetes、云,以及基礎設施的咨詢。Justin Domingus是CareZone.com的開發(fā)運維工程師,專門從事Kubernetes和云計算。
目錄
序 . 1
前言 . 3
第1 章 云革命 11
1.1 云的誕生 12
1.1.1 購買時間12
1.1.2 基礎設施即服務 13
1.2 開發(fā)運維拉開序幕 14
1.2.1 沒有人真正理解開發(fā)運維 15
1.2.2 業(yè)務優(yōu)勢16
1.2.3 基礎設施即代碼 17
1.2.4 共同學習17
1.3 容器的到來 18
1.3.1 的技術 18
1.3.2 箱子帶來的啟發(fā) 19
1.3.3 將軟件放入容器 20
1.3.4 即插即用的應用程序 .21
1.4 容器的編排 22
1.5 Kubernetes 23
1.5.1 從Borg 到Kubernetes 23
1.5.2 什么因素導致Kubernetes 如此有價值? 24
1.5.3 Kubernetes 會消失嗎? 26
1.5.4 Kubernetes 并非 .26
1.6 云原生 28
1.7 運維的未來 30
1.7.1 分布式開發(fā)運維 31
1.7.2 有些仍然是中心式 31
1.7.3 開發(fā)人員生產(chǎn)力工程 .31
1.7.4 你就是未來 .32
1.8 小結 .33
第2 章 Kubernetes 簡介 35
2.1 次運行容器 35
2.1.1 安裝Docker 桌面版 36
2.1.2 什么是Docker ? 37
2.1.3 運行容器鏡像 37
2.2 演示應用程序 .38
2.2.1 查看源代碼 .38
2.2.2 Go 簡介 39
2.2.3 演示應用程序的原理 .40
2.3 建立容器 40
2.3.1 了解Dockerfile .41
2.3.2 限度的容器鏡像 .42
2.3.3 運行Docker image build 42
2.3.4 命名鏡像43
2.3.5 端口轉發(fā)43
2.4 容器倉庫 44
2.4.1 容器倉庫的身份驗證 .45
2.4.2 命名和推送鏡像 45
2.4.3 運行鏡像46
2.5 Kubernetes 入門 .46
2.5.1 運行演示應用 47
2.5.2 如果容器無法啟動 48
2.6 Minikube 48
2.7 小結 .48
第3 章 獲取Kubernetes 51
3.1 集群架構 52
3.1.1 控制平面52
3.1.2 節(jié)點組件53
3.1.3 高可用性54
3.2 自托管Kubernetes 的成本 56
3.2.1 超出預期的工作量 56
3.2.2 不僅僅是初始設置 57
3.2.3 不能完全依賴工具 58
3.2.4 Kubernetes 的難度很大 59
3.2.5 管理費用59
3.2.6 從托管服務開始 59
3.3 托管Kubernetes 服務 .60
3.3.1 Google Kubernetes Engine(GKE) 61
3.3.2 集群自動伸縮 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 購買還是構建:我們的建議 67
3.6.1 運行更少軟件 68
3.6.2 盡可能使用托管Kubernetes 68
3.6.3 如何應對提供商鎖定? 69
3.6.4 根據(jù)需要使用標準的Kubernetes 自托管工具 70
3.6.5 當你的選擇受到限制時 70
3.6.6 裸金屬與內(nèi)部服務器 .70
3.7 無集群容器服務 71
3.7.1 Amazon Fargate 72
3.7.2 Azure Container Instances(ACI) .72
3.8 小結 .73
第4 章 Kubernetes 對象 75
4.1 部署 .75
4.1.1 監(jiān)督與調(diào)度 .76
4.1.2 重新啟動容器 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 服務資源85
4.6.5 使用kubectl 查詢集群 88
4.6.6 資源的高級使用方式 .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 小結 .93
第5 章 資源管理 95
5.1 了解資源 95
5.1.1 資源單位96
5.1.2 資源請求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 中斷預算 104
5.3 命名空間 .106
5.3.1 使用命名空間 .107
5.3.2 應該使用哪些命名空間? 107
5.3.3 服務地址 108
5.3.4 資源配額109
5.3.5 默認資源請求和約束 111
5.4 優(yōu)化集群的成本 . 112
5.4.1 優(yōu)化部署 112
5.4.2 優(yōu)化Pod 113
5.4.3 Pod 垂直自動伸縮器 114
5.4.4 優(yōu)化節(jié)點 114
5.4.5 優(yōu)化存儲 116
5.4.6 清理未使用的資源 117
5.4.7 檢查備用容量 .120
5.4.8 使用預留實例 .120
5.4.9 搶占式(Spot)實例 121
5.4.10 保持工作負載均衡 .123
5.5 小結 126
第6 章 集群運維 129
6.1 集群的規(guī)模與伸縮 .129
6.1.1 容量規(guī)劃130
6.1.2 節(jié)點與實例 133
6.1.3 伸縮集群136
6.2 一致性檢查 138
6.2.1 CNCF 認證 139
6.2.2 Sonobuoy 一致性測試 141
6.3 驗證與審計 141
6.3.1 K8Guard 142
6.3.2 Copper 142
6.3.3 kube-bench 143
6.3.4 Kubernetes 審計日志 143
6.4 混亂測試 .144
6.4.1 生產(chǎn)環(huán)境是無法復制的 .144
6.4.2 Chaoskube 145
6.4.3 kube-monkey 146
6.4.4 PowerfulSeal 146
6.5 小結 147
第7 章 強大的Kubernetes 工具 . 149
7.1 掌握kubectl 149
7.1.1 Shell 別名 .150
7.1.2 使用縮寫的標志 150
7.1.3 縮寫資源的類型 151
7.1.4 自動補齊kubectl 命令 151
7.1.5 獲取幫助152
7.1.6 獲取有關Kubernetes 資源的幫助 .152
7.1.7 顯示更詳細的輸出 153
7.1.8 使用JSON 數(shù)據(jù)和jq 154
7.1.9 監(jiān)視對象155
7.1.10 描述對象 .155
7.2 處理資源 .156
7.2.1 命令式的kubectl 命令 156
7.2.2 何時不應該使用命令式的命令 157
7.2.3 生成資源清單 .158
7.2.4 導出資源159
7.2.5 對比資源的差異 159
7.3 處理容器 .160
7.3.1 查看容器的日志 160
7.3.2 附著到容器 162
7.3.3 利用kubespy 監(jiān)視Kubernetes 資源 162
7.3.4 轉發(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 實時調(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 構建自己的Kubernetes 工具 175
7.7 小結 176
第8 章 運行容器 179
8.1 容器與Pod .179
8.1.1 什么是容器? .180
8.1.2 容器中有什么? 181
8.1.3 Pod 中有什么? .182
8.2 容器清單 .183
8.2.1 鏡像標識符 184
8.2.2 latest 標簽 .185
8.2.3 容器摘要186
8.2.4 基礎鏡像標簽 .186
8.2.5 端口 .187
8.2.6 資源請求和約束 187
8.2.7 鏡像拉取策略 .188
8.2.8 環(huán)境變量188
8.3 容器安全 .189
8.3.1 以非root 用戶身份運行容器 190
8.3.2 阻止Root 容器 191
8.3.3 設置只讀文件系統(tǒng) 192
8.3.4 禁用權限提升 .192
8.3.5 能力 .193
8.3.6 Pod 安全上下文 .195
8.3.7 Pod 安全策略 195
8.3.8 Pod 服務賬號 196
8.4 卷 197
8.4.1 emptyDir 卷 .197
8.4.2 持久卷 199
8.5 重啟策略 .200
8.6 鏡像拉取機密 200
8.7 小結 201
第9 章 管理Pod 203
9.1 標簽 203
9.1.1 什么是標簽? .204
9.1.2 選擇器 204
9.1.3 高級選擇器 205
9.1.4 標簽的其他用途 207
9.1.5 標簽與注釋 208
9.2 節(jié)點親和性 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 何時使用Pod 親和性 214
9.4 污點與容忍 214
9.5 Pod 控制器 .216
9.5.1 守護進程集 217
9.5.2 狀態(tài)集 218
9.5.3 作業(yè) .220
9.5.4 定時作業(yè)221
9.5.5 Pod 水平自動伸縮器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 小結 233
第10 章 配置與機密數(shù)據(jù) 235
10.1 ConfigMap 236
10.1.1 創(chuàng)建ConfigMap 236
10.1.2 利用ConfigMap 設置環(huán)境變量 237
10.1.3 利用ConfigMap 設置整個環(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 利用機密數(shù)據(jù)設置環(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 在版本控制中加密機密 252
10.3.2 遠程存儲Secret 253
10.3.3 使用專業(yè)的機密管理工具253
10.3.4 推薦 254
10.4 使用Sops 加密機密數(shù)據(jù) 255
10.4.1 Sops 簡介 255
10.4.2 使用Sops 加密文件 256
10.4.3 使用KMS 后端 258
10.5 小結 259
第11 章 安全與備份 261
11.1 訪問控制與權限 261
11.1.1 按集群管理訪問 261
11.1.2 基于角色的訪問控制 262
11.1.3 角色 263
11.1.4 將角色綁定到用戶 .264
11.1.5 我需要哪些角色? .265
11.1.6 保護集群管理員的權限 265
11.1.7 應用程序與部署 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 大小災害 .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 云提供商控制臺 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 小結 285
第12 章 部署Kubernetes 應用程序 287
12.1 使用Helm 構建清單 287
12.1.1 Helm Chart 包含什么? 288
12.1.2 Helm 模板 289
12.1.3 插值變量 .291
12.1.4 引用模板中的值 .292
12.1.5 指定依賴項 292
12.2 部署Heml Chart 293
12.2.1 設置變量 .293
12.2.2 在Helm Release 中指定值 .294
12.2.3 使用Helm 更新應用程序 295
12.2.4 回滾到以前的版本 .296
12.2.5 創(chuàng)建Helm Chart 庫 296
12.2.6 使用Sops 管理Helm Chart 的機密數(shù)據(jù) .297
12.3 使用Helmfile 管理多個Chart 300
12.3.1 Helmfile 中有什么? 300
12.3.2 Chart 元數(shù)據(jù) .301
12.3.3 應用Helmfile302
12.4 高級清單管理工具 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 小結 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 滾動更新 .312
13.2.2 Recreate 模式 313
13.2.3 maxSurge 和maxUnavailable 313
13.2.4 藍綠部署 .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 小結 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 云構建 .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 云構建的CD 流水線 .326
14.4.1 設置Google 云和GKE 326
14.4.2 分叉demo 代碼庫 327
14.4.3 Google 云構建簡介 327
14.4.4 構建測試容器 327
14.4.5 運行測試 .329
14.4.6 構建應用程序容器 .329
14.4.7 驗證Kubernetes 清單 329
14.4.8 發(fā)布鏡像 .330
14.4.9 Git SHA 標簽 330
14.4.10 創(chuàng)建個構建觸發(fā)器 331
14.4.11 測試觸發(fā)器 .332
14.4.12 CD 流水線部署 .333
14.4.13 創(chuàng)建部署觸發(fā)器336
14.4.14 優(yōu)化構建流水線337
14.4.15 調(diào)整示例流水線338
14.5 小結 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 指標 347
15.1.6 跟蹤 349
15.1.7 可觀察性 .350
15.2 可觀測性流水線 351
15.3 Kubernetes 中的監(jiān)控 .353
15.3.1 外部的黑盒檢查 .353
15.3.2 內(nèi)部健康檢查 355
15.4 小結 357
第16 章 Kubernetes 指標 . 359
16.1 什么是指標? 359
16.1.1 時間序列數(shù)據(jù) 360
16.1.2 計數(shù)器和計量器 .361
16.1.3 指標可以告訴我們什么?361
16.2 選擇指標 361
16.2.1 服務:RED 模式 362
16.2.2 資源:USE 模式 .364
16.2.3 業(yè)務指標 .365
16.2.4 Kubernetes 指標 366
16.3 分析指標 370
16.3.1 簡單的平均值有什么問題? .371
16.3.2 平均值、中位數(shù)和離群值371
16.3.3 百分位數(shù) .372
16.3.4 將百分位數(shù)應用于指標數(shù)據(jù) .373
16.3.5 一般我們想知道壞的情況 .375
16.3.6 比百分位數(shù)更好的方式 375
16.4 通過儀表板顯示指標的圖表 376
16.4.1 所有服務都使用標準布局376
16.4.2 利用主儀表板構建信息發(fā)射源 377
16.4.3 在儀表板上顯示預示故障的數(shù)據(jù) 379
16.5 根據(jù)指標發(fā)出警報 380
16.5.1 警報有什么問題? .380
16.5.2 值班不應該成為地獄 381
16.5.3 緊急、重大且需要付諸行動的警報 382
16.5.4 跟蹤警報、工作時間外的呼叫 383
16.6 指標工具和服務 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 小結 390
后記 393
作者介紹 397
封面介紹 397