Serverless是一種云原生開發(fā)模型,它使得開發(fā)人員可以專注于構(gòu)建和運(yùn)行應(yīng)用,而無須管理服務(wù)器。Knative是繼云原生之后,云時代下一個十年技術(shù)的Serverless架構(gòu),開發(fā)者應(yīng)如何擁抱這一全新的技術(shù)架構(gòu)?本書將給讀者帶來答案。Knative是Google發(fā)起的,基于Kubernetes構(gòu)建的Serverless開源項(xiàng)目,Google內(nèi)部的 CloudRun就是基于Knative構(gòu)建的Serverless平臺。本書主要通過一個計數(shù)器示例在Knative中的實(shí)踐展開描述,詳細(xì)講解了Knative 的服務(wù)與事件驅(qū)動,以及在企業(yè)應(yīng)用中如何利用Knative實(shí)現(xiàn)自動擴(kuò)/縮容、事件驅(qū)動、灰度發(fā)布等。本書內(nèi)容翔實(shí)、講解深入淺出、語言詼諧幽默,對于想了解、學(xué)習(xí)與研究Knative或者Serverless 的讀者來說,是一本大有裨益的參考書。本書適合的讀者有云原生從業(yè)者、Serverless架構(gòu)師及開發(fā)人員,以及想深入了解Serverless的互聯(lián)網(wǎng)從業(yè)人員。
Jacques Chester是VMware子公司Pivotal的高級軟件工程師。自2015年以來,他一直從事關(guān)鍵研發(fā)工作,為包括Knative在內(nèi)的多個項(xiàng)目做出了貢獻(xiàn)。
趙吉壯,字節(jié)跳動邊緣計算云原生技術(shù)專家,先后就職于 華為 CloudBU 容器團(tuán)隊(duì)、字節(jié)跳動邊緣云原生團(tuán)隊(duì),專注于 k8s、Serverless、容器/安全容器技術(shù)。 Kubernetes、Knative 社區(qū)成員,Knative 子項(xiàng)目維護(hù)者。楊云鋒,字節(jié)跳動邊緣計算云原生技術(shù)專家,就職于字節(jié)跳動邊緣云原生團(tuán)隊(duì),專注于 k8s、Serverless、容器/安全容器技術(shù), Knative 社區(qū)成員。
第1章 介紹 1
1.1 Knative是什么 2
1.1.1 部署、升級和流量路由 3
1.1.2 自動擴(kuò)/縮容 3
1.1.3 事件模塊 3
1.2 Knative能干什么 3
1.3 Knative的優(yōu)勢 4
1.3.1 具有不可預(yù)測性、延遲不敏感性的工作負(fù)載 4
1.3.2 合并多個事件源 5
1.3.3 微服務(wù)拆分 6
1.4 計數(shù)器應(yīng)用 7
1.5 版本變更 12
1.6 Knative系統(tǒng)組件 13
1.6.1 服務(wù)模塊 13
1.6.2 事件模塊 14
1.6.3 服務(wù)模塊和事件模塊 15
1.7 Knative控制器 16
1.7.1 反饋控制 16
1.7.2 循環(huán)嵌套 19
1.8 準(zhǔn)備好開始了嗎 21
1.9 總結(jié) 22
第2章 Knative服務(wù)模塊 23
2.1 演練 24
2.1.1 首個部署 24
2.1.2 第二個部署 25
2.1.3 狀態(tài) 27
2.1.4 Active表示什么 28
2.1.5 修改鏡像 29
2.1.6 分流 30
2.2 服務(wù)模塊 32
2.2.1 控制器和協(xié)調(diào)器 33
2.2.2 網(wǎng)絡(luò)鉤子 34
2.2.3 網(wǎng)絡(luò)控制器 35
2.2.4 自動縮放器、激活器和隊(duì)列代理 36
2.3 總結(jié) 38
第3章 配置和修訂 40
3.1 記錄歷史發(fā)布記錄并對其進(jìn)行發(fā)布 41
3.2 部署版本的概念 42
3.2.1 藍(lán)/綠部署 43
3.2.2 金絲雀部署 45
3.2.3 漸進(jìn)式部署 46
3.2.4 回到未來 47
3.3 剖析配置 48
3.3.1 配置的狀態(tài) 52
3.3.2 通過kubectl describe查看配置 53
3.4 剖析修訂版本 55
3.4.1 修訂版本的基本概念 56
3.4.2 容器的基本概念 59
3.4.3 容器鏡像 60
3.4.4 容器啟動命令 64
3.4.5 直接設(shè)置環(huán)境變量 65
3.4.6 間接設(shè)置環(huán)境變量 67
3.4.7 通過文件來設(shè)置配置文件 72
3.4.8 健康檢查 75
3.4.9 設(shè)置資源限制 76
3.4.10 容器的并發(fā) 79
3.4.11 超時時間 80
3.5 總結(jié) 82
第4章 路由 84
4.1 使用kn操作路由 85
4.2 剖析路由 86
4.3 剖析流量目標(biāo) 89
4.3.1 配置名稱和版本名稱 89
4.3.2 最新版本 92
4.3.3 標(biāo)簽 93
4.4 總結(jié) 106
第5章 自動擴(kuò)/縮容 108
5.1 自動擴(kuò)/縮容問題 109
5.2 零實(shí)例下的自動擴(kuò)/縮容 111
5.3 少量實(shí)例狀態(tài)下的自動擴(kuò)/縮容 114
5.4 大量實(shí)例狀態(tài)下的自動擴(kuò)/縮容 116
5.5 自動擴(kuò)/縮容理論 116
5.5.1 控制回路 116
5.5.2 隊(duì)列 117
5.6 擴(kuò)/縮容算法 120
5.7 配置自動擴(kuò)/縮容 128
5.7.1 配置是如何設(shè)置的 128
5.7.2 設(shè)置擴(kuò)/縮容限制 130
5.7.3 設(shè)置擴(kuò)/縮容比率 132
5.7.4 設(shè)置目標(biāo)值 133
5.7.5 設(shè)置決定周期 134
5.7.6 設(shè)置窗口大小 134
5.7.7 設(shè)置恐慌閾值 135
5.7.8 設(shè)置目標(biāo)突發(fā)容量 135
5.7.9 其他自動縮放器 136
5.8 警告 136
5.9 總結(jié) 137
第6章 事件模塊 138
6.1 CloudEvents之路 139
6.2 剖析CloudEvents 142
6.2.1 必需屬性 144
6.2.2 可選屬性 145
6.2.3 擴(kuò)展屬性 146
6.3 事件格式和協(xié)議綁定那些事兒 148
6.3.1 結(jié)構(gòu)化內(nèi)容模式 148
6.3.2 二進(jìn)制內(nèi)容模式 149
6.3.3 批處理內(nèi)容模式 150
6.4 演練 150
6.5 事件模塊的基礎(chǔ)架構(gòu) 160
6.5.1 消息傳遞 160
6.5.2 事件 161
6.5.3 事件源 161
6.5.4 事件流 162
6.5.5 鴨子類型 162
6.6 總結(jié) 165
第7章 事件源和接收器 166
7.1 事件源 166
7.1.1 解析事件源 167
7.1.2 使用kn處理事件源 168
7.2 接收器 173
7.3 SinkBinding和ContainerSource 174
7.4 其他事件源 177
7.5 總結(jié) 178
第8章 過濾器和事件流 179
8.1 代理 180
8.2 過濾器 182
8.2.1 過濾自定義屬性 185
8.2.2 事件模塊提供的好東西 191
8.3 順序事件 191
8.4 剖析順序事件 197
8.4.1 步驟 197
8.4.2 回復(fù) 198
8.4.3 通道模板和通道 198
8.4.4 混合順序事件和過濾器 201
8.5 并行事件 201
8.6 處理失敗 210
8.6.1 重試和退避 212
8.6.2 死信消息 213
8.6.3 壞消息 214
8.7 總結(jié) 214
第9章 從概念到生產(chǎn) 215
9.1 將軟件變成可運(yùn)行的東西 216
9.1.1 使用摘要 216
9.1.2 使用云原生構(gòu)建包和pack工具 218
9.2 將軟件帶到它運(yùn)行的地方 224
9.3 了解軟件是如何運(yùn)行的 235
9.3.1 日志 236
9.3.2 指標(biāo) 238
9.3.3 追蹤 243
9.4 總結(jié) 246
附錄A 安裝kubectl和kn 247
附錄B 安裝Knative 249