第1章 Kubernetes架構 1
1.1 Kubernetes的發展曆史 1
1.2 Kubernetes架構圖 2
1.3 Kubernetes各組件的功能 4
1.3.1 kubectl 5
1.3.2 client-go 5
1.3.3 kube-apiserver 5
1.3.4 kube-controller-manager 6
1.3.5 kube-scheduler 7
1.3.6 kubelet 7
1.3.7 kube-proxy 8
1.4 Kubernetes Project Layout設計 9
第2章 Kubernetes構建過程 13
2.1 構建方式 13
2.2 本地環境構建 15
2.2.1 一切都始於Makefile 16
2.2.2 本地構建過程 17
2.3 容器環境構建 18
2.4 Bazel環境構建 22
2.4.1 使用Bazel構建和測試Kubernetes源碼 23
2.4.2 Bazel的工作原理 25
2.5 代碼生成器 26
2.5.1 Tags 27
2.5.2 deepcopy-gen代碼生成器 29
2.5.3 defaulter-gen代碼生成器 30
2.5.4 conversion-gen代碼生成器 32
2.5.5 openapi-gen代碼生成器 34
2.5.6 go-bindata代碼生成器 36
2.6 代碼生成過程 37
2.7 gengo代碼生成核心實現 40
2.7.1 代碼生成邏輯與編譯器原理 41
2.7.2 收集Go包信息 42
2.7.3 代碼解析 45
2.7.4 類型係統 48
2.7.5 代碼生成 51
第3章 Kubernetes核心數據結構 57
3.1 Group、Version、Resource核心數據結構 57
3.2 ResourceList 59
3.3 Group 62
3.4 Version 63
3.5 Resource 65
3.5.1 資源外部版本與內部版本 66
3.5.2 資源代碼定義 68
3.5.3 將資源注冊到資源注冊錶中 71
3.5.4 資源首選版本 71
3.5.5 資源操作方法 72
3.5.6 資源與命名空間 75
3.5.7 自定義資源 77
3.5.8 資源對象描述文件定義 78
3.6 Kubernetes內置資源全圖 79
3.7 runtime.Object類型基石 83
3.8 Unstructured數據 85
3.9 Scheme資源注冊錶 87
3.9.1 Scheme資源注冊錶數據結構 87
3.9.2 資源注冊錶注冊方法 91
3.9.3 資源注冊錶查詢方法 92
3.10 Codec編解碼器 92
3.10.1 Codec編解碼實例化 94
3.10.2 jsonSerializer與yamlSerializer序列化器 95
3.10.3 protobufSerializer序列化器 98
3.11 Converter資源版本轉換器 100
3.11.1 Converter轉換器數據結構 101
3.11.2 Converter注冊轉換函數 102
3.11.3 Converter資源版本轉換原理 104
第4章 kubectl命令行交互 111
4.1 kubectl命令行參數詳解 111
4.2 Cobra命令行參數解析 114
4.3 創建資源對象的過程 119
4.3.1 編寫資源對象描述文件 120
4.3.2 實例化Factory接口 120
4.3.3 Builder構建資源對象 121
4.3.4 Visitor多層匿名函數嵌套 122
第5章 client-go編程式交互 128
5.1 client-go源碼結構 128
5.2 Client客戶端對象 129
5.2.1 kubeconfig配置管理 130
5.2.2 RESTClient客戶端 134
5.2.3 ClientSet客戶端 137
5.2.4 DynamicClient客戶端 139
5.2.5 DiscoveryClient客戶端 141
5.3 Informer機製 144
5.3.1 Informer機製架構設計 145
5.3.2 Reflector 149
5.3.3 DeltaFIFO 154
5.3.4 Indexer 158
5.4 WorkQueue 162
5.4.1 FIFO隊列 163
5.4.2 延遲隊列 165
5.4.3 限速隊列 166
5.5 EventBroadcaster事件管理器 170
5.6 代碼生成器 176
5.6.1 client-gen代碼生成器 176
5.6.2 lister-gen代碼生成器 180
5.6.3 informer-gen代碼生成器 182
5.7 其他客戶端 185
第6章 Etcd存儲核心實現 187
6.1 Etcd存儲架構設計 187
6.2 RESTStorage存儲服務通用接口 189
6.3 RegistryStore存儲服務通用操作 190
6.4 Storage.Interface通用存儲接口 192
6.5 CacherStorage緩存層 194
6.5.1 CacherStorage緩存層設計 195
6.5.2 ResourceVersion資源版本號 199
6.5.3 watchCache緩存滑動窗口 201
6.6 UnderlyingStorage底層存儲對象 204
6.7 Codec編解碼數據 206
6.8 Strategy預處理 209
6.8.1 創建資源對象時的預處理操作 209
6.8.2 更新資源對象時的預處理操作 211
6.8.3 刪除資源對象時的預處理操作 212
6.8.4 導齣資源對象時的預處理操作 213
第7章 kube-apiserver核心實現 214
7.1 熱身概念 215
7.1.1 go-restful核心原理 215
7.1.2 一次HTTP請求的完整生命周期 218
7.1.3 OpenAPI/Swagger核心原理 219
7.1.4 HTTPS核心原理 222
7.1.5 gRPC核心原理 224
7.1.6 go-to-protobuf代碼生成器 225
7.2 kube-apiserver命令行參數詳解 231
7.3 kube-apiserver架構設計詳解 243
7.4 kube-apiserver啓動流程 244
7.4.1 資源注冊 245
7.4.2 Cobra命令行參數解析 248
7.4.3 創建APIServer通用配置 249
7.4.4 創建APIExtensionsServer 257
7.4.5 創建KubeAPIServer 261
7.4.6 創建AggregatorServer 266
7.4.7 創建GenericAPIServer 269
7.4.8 啓動HTTP服務 270
7.4.9 啓動HTTPS服務 272
7.5 權限控製 272
7.6 認證 273
7.6.1 BasicAuth認證 276
7.6.2 ClientCA認證 277
7.6.3 TokenAuth認證 278
7.6.4 BootstrapToken認證 279
7.6.5 RequestHeader認證 281
7.6.6 WebhookTokenAuth認證 282
7.6.7 Anonymous認證 284
7.6.8 OIDC認證 285
7.6.9 ServiceAccountAuth認證 288
7.7 授權 291
7.7.1 AlwaysAllow授權 295
7.7.2 AlwaysDeny授權 296
7.7.3 ABAC授權 297
7.7.4 Webhook授權 298
7.7.5 RBAC授權 300
7.7.6 Node授權 309
7.8 準入控製器 310
7.8.1 AlwaysPullImages準入控製器 315
7.8.2 PodNodeSelector準入控製器 316
7.9 進程信號處理機製 318
7.9.1 常駐進程實現 318
7.9.2 進程的優雅關閉 319
7.9.3 嚮systemd報告進程狀態 320
第8章 kube-scheduler核心實現 321
8.1 kube-scheduler命令行參數詳解 321
8.2 kube-scheduler架構設計詳解 324
8.3 kube-scheduler組件的啓動流程 326
8.3.1 內置調度算法的注冊 327
8.3.2 Cobra命令行參數解析 328
8.3.3 實例化Scheduler對象 329
8.3.4 運行EventBroadcaster事件管理器 331
8.3.5 運行HTTP或HTTPS服務 331
8.3.6 運行Informer同步資源 332
8.3.7 領導者選舉實例化 332
8.3.8 運行sched.Run調度器 333
8.4 優先級與搶占機製 333
8.5 親和性調度 335
8.5.1 NodeAffinity 336
8.5.2 PodAffinity 337
8.5.3 PodAntiAffinity 338
8.6 內置調度算法 339
8.6.1 預選調度算法 339
8.6.2 優選調度
· · · · · · (
收起)