Serverless是一種云原生開(kāi)發(fā)模型,它使得開(kāi)發(fā)人員可以專注于構(gòu)建和運(yùn)行應(yīng)用,而無(wú)須管理服務(wù)器。Knative是繼云原生之后,云時(shí)代下一個(gè)十年技術(shù)的Serverless架構(gòu),開(kāi)發(fā)者應(yīng)如何擁抱這一全新的技術(shù)架構(gòu)?本書(shū)將給讀者帶來(lái)答案。Knative是Google發(fā)起的,基于Kubernetes構(gòu)建的Serverless開(kāi)源項(xiàng)目,Google內(nèi)部的 CloudRun就是基于Knative構(gòu)建的Serverless平臺(tái)。本書(shū)主要通過(guò)一個(gè)計(jì)數(shù)器示例在Knative中的實(shí)踐展開(kāi)描述,詳細(xì)講解了Knative 的服務(wù)與事件驅(qū)動(dòng),以及在企業(yè)應(yīng)用中如何利用Knative實(shí)現(xiàn)自動(dòng)擴(kuò)/縮容、事件驅(qū)動(dòng)、灰度發(fā)布等。本書(shū)內(nèi)容翔實(shí)、講解深入淺出、語(yǔ)言詼諧幽默,對(duì)于想了解、學(xué)習(xí)與研究Knative或者Serverless 的讀者來(lái)說(shuō),是一本大有裨益的參考書(shū)。本書(shū)適合的讀者有云原生從業(yè)者、Serverless架構(gòu)師及開(kāi)發(fā)人員,以及想深入了解Serverless的互聯(lián)網(wǎng)從業(yè)人員。
Jacques Chester是VMware子公司Pivotal的高級(jí)軟件工程師。自2015年以來(lái),他一直從事關(guān)鍵研發(fā)工作,為包括Knative在內(nèi)的多個(gè)項(xiàng)目做出了貢獻(xiàn)。
趙吉壯,字節(jié)跳動(dòng)邊緣計(jì)算云原生技術(shù)專家,先后就職于 華為 CloudBU 容器團(tuán)隊(duì)、字節(jié)跳動(dòng)邊緣云原生團(tuán)隊(duì),專注于 k8s、Serverless、容器/安全容器技術(shù)。 Kubernetes、Knative 社區(qū)成員,Knative 子項(xiàng)目維護(hù)者。楊云鋒,字節(jié)跳動(dòng)邊緣計(jì)算云原生技術(shù)專家,就職于字節(jié)跳動(dòng)邊緣云原生團(tuán)隊(duì),專注于 k8s、Serverless、容器/安全容器技術(shù), Knative 社區(qū)成員。
第1章 介紹 1
1.1 Knative是什么 2
1.1.1 部署、升級(jí)和流量路由 3
1.1.2 自動(dòng)擴(kuò)/縮容 3
1.1.3 事件模塊 3
1.2 Knative能干什么 3
1.3 Knative的優(yōu)勢(shì) 4
1.3.1 具有不可預(yù)測(cè)性、延遲不敏感性的工作負(fù)載 4
1.3.2 合并多個(gè)事件源 5
1.3.3 微服務(wù)拆分 6
1.4 計(jì)數(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)備好開(kāi)始了嗎 21
1.9 總結(jié) 22
第2章 Knative服務(wù)模塊 23
2.1 演練 24
2.1.1 首個(gè)部署 24
2.1.2 第二個(gè)部署 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 自動(dòng)縮放器、激活器和隊(duì)列代理 36
2.3 總結(jié) 38
第3章 配置和修訂 40
3.1 記錄歷史發(fā)布記錄并對(duì)其進(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 回到未來(lái) 47
3.3 剖析配置 48
3.3.1 配置的狀態(tài) 52
3.3.2 通過(guò)kubectl describe查看配置 53
3.4 剖析修訂版本 55
3.4.1 修訂版本的基本概念 56
3.4.2 容器的基本概念 59
3.4.3 容器鏡像 60
3.4.4 容器啟動(dòng)命令 64
3.4.5 直接設(shè)置環(huán)境變量 65
3.4.6 間接設(shè)置環(huán)境變量 67
3.4.7 通過(guò)文件來(lái)設(shè)置配置文件 72
3.4.8 健康檢查 75
3.4.9 設(shè)置資源限制 76
3.4.10 容器的并發(fā) 79
3.4.11 超時(shí)時(shí)間 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章 自動(dòng)擴(kuò)/縮容 108
5.1 自動(dòng)擴(kuò)/縮容問(wèn)題 109
5.2 零實(shí)例下的自動(dòng)擴(kuò)/縮容 111
5.3 少量實(shí)例狀態(tài)下的自動(dòng)擴(kuò)/縮容 114
5.4 大量實(shí)例狀態(tài)下的自動(dòng)擴(kuò)/縮容 116
5.5 自動(dòng)擴(kuò)/縮容理論 116
5.5.1 控制回路 116
5.5.2 隊(duì)列 117
5.6 擴(kuò)/縮容算法 120
5.7 配置自動(dòng)擴(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 其他自動(dòng)縮放器 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章 過(guò)濾器和事件流 179
8.1 代理 180
8.2 過(guò)濾器 182
8.2.1 過(guò)濾自定義屬性 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 混合順序事件和過(guò)濾器 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