關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
深入理解Kubernetes源碼 讀者對(duì)象:本書(shū)適合對(duì)容器技術(shù)和云計(jì)算感興趣的開(kāi)發(fā)者、運(yùn)維工程師及架構(gòu)師參考和閱讀
在過(guò)去幾年中,容器技術(shù)的廣泛應(yīng)用推動(dòng)了容器編排技術(shù)的迅猛發(fā)展,尤其是Kubernetes的興起。作為當(dāng)前非常受歡迎的容器編排系統(tǒng),Kubernetes能夠有效應(yīng)對(duì)生產(chǎn)環(huán)境中復(fù)雜的編排需求,幫助企業(yè)實(shí)現(xiàn)大規(guī)模多容器集群的高效管理。本書(shū)將Kubernetes1.25.0版本源碼作為剖析對(duì)象,深入探討其核心組件和實(shí)現(xiàn)原理。通過(guò)學(xué)習(xí)Kubernetes源碼,讀者不僅能掌握容器編排技術(shù)的精髓,還能提升自身在云計(jì)算領(lǐng)域的競(jìng)爭(zhēng)力。
第1章 Kubernetes基本架構(gòu) 1
1.1 Kubernetes發(fā)展歷史 1 1.2 Kubernetes架構(gòu) 2 1.3 Kubernetes各組件功能 3 1.3.1 kubectl 4 1.3.2 client-go 4 1.3.3 kube-apiserver 4 1.3.4 kube-controller-manager 4 1.3.5 kube-scheduler 5 1.3.6 kubelet 5 1.3.7 kube-proxy 6 1.3.8 Container Runtime 6 1.4 Kubernetes Project Layout設(shè)計(jì) 7 第2章 Kubernetes構(gòu)建過(guò)程 10 2.1 構(gòu)建方式 10 2.2 一切都始于Makefile 12 2.3 本地環(huán)境構(gòu)建 13 2.3.1 本地環(huán)境構(gòu)建命令 13 2.3.2 本地環(huán)境構(gòu)建過(guò)程 14 2.4 容器環(huán)境構(gòu)建 16 2.4.1 容器環(huán)境構(gòu)建命令 16 2.4.2 容器環(huán)境構(gòu)建過(guò)程 16 第3章 Kubernetes核心數(shù)據(jù)結(jié)構(gòu) 19 3.1 初識(shí)數(shù)據(jù)結(jié)構(gòu) 19 3.2 基本概念 19 3.2.1 API的層次結(jié)構(gòu) 19 3.2.2 版本控制 20 3.2.3 組 21 3.2.4 API術(shù)語(yǔ) 22 3.2.5 API資源組成 25 3.2.6 版本化資源與未版本化資源 26 3.2.7 內(nèi)部版本與外部版本 27 3.3 Kubernetes API的數(shù)據(jù)結(jié)構(gòu) 28 3.3.1 APIGroup、APIVersions 28 3.3.2 APIResource 30 3.3.3 GVK和GVR 32 3.3.4 內(nèi)置資源全景圖 33 3.4 Kubernetes資源定義 35 3.4.1 內(nèi)部版本定義 35 3.4.2 外部版本定義 36 3.5 將資源注冊(cè)到Scheme中 36 3.5.1 資源類型注冊(cè)入口 37 3.5.2 Scheme的數(shù)據(jù)結(jié)構(gòu) 38 3.5.3 Scheme的初始化 40 3.5.4 SchemeBuilder資源注冊(cè) 41 3.5.5 資源外部版本注冊(cè) 43 3.5.6 資源內(nèi)部版本注冊(cè) 44 3.5.7 所有資源的注冊(cè)入口 45 3.5.8 資源注冊(cè)表的查詢方法 47 3.5.9 資源對(duì)象的創(chuàng)建 48 3.5.10 資源對(duì)象的轉(zhuǎn)換 48 3.5.11 資源對(duì)象默認(rèn)值的設(shè)置 49 3.5.12 資源字段的轉(zhuǎn)換 49 3.6 對(duì)象體系設(shè)計(jì) 49 3.6.1 資源對(duì)象的基本信息 49 3.6.2 對(duì)象體系類圖 50 3.6.3 runtime.Object 51 3.6.4 metav1.TypeMeta 52 3.6.5 metav1.ObjectMeta 52 3.6.6 Unstructured 53 3.7 runtime.Codec資源編/解碼 55 3.7.1 編/解碼數(shù)據(jù)結(jié)構(gòu) 56 3.7.2 CodecFactory實(shí)例化 57 3.7.3 codec編/解碼實(shí)現(xiàn)類 60 3.7.4 json.Serializer編/解碼 64 3.7.5 protobuf.Serializer編/解碼 65 3.7.6 UnstructuredJSONScheme實(shí)現(xiàn)類 67 3.7.7 NegotiatedSerializer 67 3.7.8 ParameterCodec 69 3.7.9 runtime包下的Codec相關(guān)函數(shù) 71 3.7.10 Codec核心調(diào)用鏈路 72 3.7.11 Codec的使用方式 74 3.8 Converter資源版本轉(zhuǎn)換器 75 3.8.1 Converter的數(shù)據(jù)結(jié)構(gòu) 76 3.8.2 Converter轉(zhuǎn)換函數(shù)的注冊(cè) 77 3.8.3 Converter的初始化 77 3.8.4 Converter資源版本轉(zhuǎn)換的實(shí)現(xiàn) 78 3.9 使用RESTMapper管理GVR和GVK映射 79 3.9.1 RESTMapper的數(shù)據(jù)結(jié)構(gòu) 80 3.9.2 RESTMapper實(shí)現(xiàn)類 81 3.9.3 DefaultRESTMapper默認(rèn)實(shí)現(xiàn)類 82 3.9.4 PriorityRESTMapper優(yōu)先級(jí)映射 83 3.9.5 DeferredDiscoveryRESTMapper實(shí)現(xiàn)類 84 3.9.6 RESTMapper的使用 85 3.9.7 RESTMapping的數(shù)據(jù)結(jié)構(gòu)及典型用法 85 第4章 Kubernetes核心資源對(duì)象 87 4.1 初識(shí)Kubernetes資源對(duì)象 87 4.2 metav1.ObjectMeta屬性元數(shù)據(jù) 88 4.2.1 Name 88 4.2.2 GenerateName 89 4.2.3 Annotation 89 4.2.4 Generation 89 4.2.5 ResourceVersion 90 4.2.6 OwnerReference 91 4.2.7 Finalizers 92 4.2.8 ManagedFields 94 4.3 Pod資源對(duì)象 99 4.3.1 PodSpec字段詳解 100 4.3.2 Container字段詳解 110 4.3.3 Pod創(chuàng)建流程 114 4.3.4 Pause容器及創(chuàng)建流程 115 4.3.5 PodSpec生成容器參數(shù) 122 4.3.6 容器的通用創(chuàng)建流程 124 4.3.7 資源配額與cgroup 126 4.3.8 QoS與驅(qū)逐順序 131 4.3.9 靜態(tài)Pod 135 4.3.10 健康檢查 137 4.3.11 Pod的狀態(tài) 140 4.3.12 原地升級(jí) 144 4.4 工作負(fù)載資源 146 4.4.1 Deployment 146 4.4.2 ReplicaSet 153 4.4.3 StatefulSet 156 4.4.4 DaemonSet 160 4.4.5 Job 163 4.4.6 CronJob 166 4.5 發(fā)現(xiàn)和負(fù)載均衡資源 169 4.5.1 Service 169 4.5.2 Ingress 175 4.5.3 Endpoints 177 4.5.4 EndpointSlice 178 4.5.5 NetworkPolicy 182 4.6 配置和存儲(chǔ)資源 185 4.6.1 卷 185 4.6.2 PV與PVC 186 4.6.3 StorageClass 191 4.7 自定義資源 194 4.7.1 概述 194 4.7.2 Operator 196 4.7.3 controller-runtime 197 4.7.4 Kubebuilder 198 第5章 client-go編程式交互 200 5.1 初識(shí)client-go 200 5.2 客戶端 200 5.2.1 kubeconfig配置管理 201 5.2.2 RESTClient客戶端 204 5.2.3 ClientSet客戶端 207 5.2.4 DynamicClient客戶端 210 5.2.5 DiscoveryClient發(fā)現(xiàn)客戶端 212 5.3 Informer機(jī)制 214 5.3.1 Informer使用示例 214 5.3.2 Informer架構(gòu) 216 5.3.3 Reflector數(shù)據(jù)同步 217 5.3.4 DeltaFIFO操作隊(duì)列 223 5.3.5 Indexer資源緩存 226 5.3.6 processor資源處理 230 5.3.7 workqueue工作隊(duì)列 233 5.4 常用工具類 240 5.4.1 事件管理機(jī)制 240 5.4.2 Leader選舉機(jī)制 247 第6章 kubectl命令式交互 256 6.1 初識(shí)kubectl 256 6.2 kubectl執(zhí)行流程 256 6.2.1 初始化命令對(duì)象 257 6.2.2 補(bǔ)全命令參數(shù) 257 6.2.3 校驗(yàn)命令參數(shù) 258 6.2.4 執(zhí)行命令輸出結(jié)果 258 6.3 kubectl緩存機(jī)制 263 6.3.1 緩存數(shù)據(jù)結(jié)構(gòu) 264 6.3.2 緩存機(jī)制詳解 265 6.3.3 緩存使用場(chǎng)景 269 6.4 kubectl變更比對(duì)策略 272 6.4.1 變更比對(duì)策略介紹 272 6.4.2 服務(wù)端應(yīng)用和客戶端應(yīng)用 272 6.4.3 策略比對(duì)器和JSON比對(duì)器 274 6.4.4 雙路合并和三路合并 275 6.5 kubectl擴(kuò)展命令 277 6.5.1 擴(kuò)展命令介紹 277 6.5.2 擴(kuò)展命令實(shí)現(xiàn)原理 277 6.5.3 擴(kuò)展命令管理器Krew 278 第7章 etcd存儲(chǔ)核心實(shí)現(xiàn) 280 7.1 初識(shí)etcd存儲(chǔ) 280 7.2 etcd存儲(chǔ)架構(gòu)設(shè)計(jì) 280 7.3 RESTStorage資源存儲(chǔ)接口 282 7.4 genericregistry.Store通用操作封裝 283 7.4.1 標(biāo)準(zhǔn)存儲(chǔ)實(shí)現(xiàn) 283 7.4.2 版本沖突檢測(cè) 284 7.4.3 通用鉤子函數(shù) 284 7.4.4 DryRun實(shí)現(xiàn)原理 287 7.5 storage.Interface通用存儲(chǔ)接口 288 7.6 Cacher Storage緩存層 290 7.6.1 Cacher Storage緩存架構(gòu) 291 7.6.2 ResourceVersion資源版本號(hào) 295 7.6.3 watchCache緩存滑動(dòng)窗口 297 7.7 Underlying Storage底層存儲(chǔ)對(duì)象 300 7.8 Codec數(shù)據(jù)編/解碼 301 7.9 Strategy預(yù)處理 304 7.9.1 Create Strategy預(yù)處理 304 7.9.2 Update Strategy預(yù)處理 307 7.9.3 Delete Strategy預(yù)處理 308 第8章 kube-apiserver核心實(shí)現(xiàn) 310 8.1 初識(shí)kube-apiserver 310 8.2 網(wǎng)絡(luò)通信框架 311 8.2.1 go-restful框架 311 8.2.2 Protobuf序列化 314 8.3 kube-apiserver架構(gòu)設(shè)計(jì) 319 8.4 kube-apiserver啟動(dòng)流程 321 8.4.1 Scheme資源注冊(cè) 322 8.4.2 Cobra命令行參數(shù)解析 324 8.4.3 創(chuàng)建API Server通用配置 325 8.4.4 創(chuàng)建APIExtensionsServer 336 8.4.5 創(chuàng)建KubeAPIServer 345 8.4.6 創(chuàng)建AggregatorServer 353 8.4.7 GenericAPIServer初始化 360 8.4.8 準(zhǔn)備和啟動(dòng)HTTPS服務(wù) 362 8.5 請(qǐng)求處理流程 367 8.6 權(quán)限控制體系 368 8.7 認(rèn)證 369 8.7.1 RequestHeader認(rèn)證 370 8.7.2 ClientCA認(rèn)證 372 8.7.3 TokenAuth認(rèn)證 373 8.7.4 ServiceAccountAuth認(rèn)證 374 8.7.5 BootstrapToken認(rèn)證 377 8.7.6 OIDC認(rèn)證 379 8.7.7 WebhookTokenAuth認(rèn)證 381 8.7.8 Anonymous認(rèn)證 383 8.8 授權(quán) 383 8.8.1 AlwaysAllow授權(quán) 386 8.8.2 AlwaysDeny授權(quán) 387 8.8.3 ABAC授權(quán) 388 8.8.4 Webhook授權(quán) 389 8.8.5 RBAC授權(quán) 391 8.8.6 Node授權(quán) 396 8.9 準(zhǔn)入控制器 397 8.9.1 內(nèi)置插件介紹 398 8.9.2 內(nèi)部實(shí)現(xiàn)原理 401 8.9.3 MutatingAdmissionWebhook準(zhǔn)入控制器 404 8.9.4 ValidatingAdmissionWebhook準(zhǔn)入控制器 411 8.10 信號(hào)處理機(jī)制 416 8.10.1 常駐進(jìn)程實(shí)現(xiàn) 416 8.10.2 進(jìn)程的優(yōu)雅關(guān)閉 417 8.10.3 向systemd報(bào)告進(jìn)程狀態(tài) 419 8.11 List-Watch的實(shí)現(xiàn)原理 420 8.11.1 長(zhǎng)連接通信協(xié)議 420 8.11.2 List-Watch的核心原理 425 第9章 kube-scheduler核心實(shí)現(xiàn) 430 9.1 初識(shí)kube-scheduler 430 9.1.1 kube-scheduler調(diào)度模型 430 9.1.2 kube-scheduler內(nèi)部架構(gòu) 431 9.1.3 kube-scheduler事件驅(qū)動(dòng) 434 9.2 kube-scheduler啟動(dòng)流程 437 9.2.1 Cobra命令行參數(shù)解析 438 9.2.2 實(shí)例化Scheduler對(duì)象 439 9.2.3 運(yùn)行EventBroadcaster事件管理器 442 9.2.4 運(yùn)行HTTPS Server 442 9.2.5 運(yùn)行Informer同步資源 443 9.2.6 執(zhí)行Leader選舉 444 9.2.7 運(yùn)行調(diào)度器 445 9.3 Scheduling Framework 445 9.3.1 誕生背景 445 9.3.2 核心架構(gòu) 446 9.4 調(diào)度器運(yùn)行流程 452 9.4.1 整體運(yùn)行流程 452 9.4.2 Scheduling Cycle 454 9.4.3 Binding Cycle 462 9.5 優(yōu)先級(jí)與搶占機(jī)制 464 9.5.1 Pod優(yōu)先級(jí) 465 9.5.2 Pod驅(qū)逐搶占機(jī)制 466 9.6 內(nèi)置調(diào)度插件介紹 473 第10章 kube-controller-manager核心實(shí)現(xiàn) 475 10.1 初識(shí)kube-controller-manager 475 10.2 架構(gòu)設(shè)計(jì)詳解 477 10.2.1 控制器狀態(tài)模型 477 10.2.2 控制器執(zhí)行原理 478 10.3 啟動(dòng)流程 479 10.3.1 Cobra命令行參數(shù)解析 480 10.3.2 運(yùn)行EventBroadcaster事件處理器 481 10.3.3 運(yùn)行HTTPS服務(wù) 481 10.3.4 執(zhí)行Leader選舉 482 10.3.5 啟動(dòng)控制器主循環(huán) 482 10.4 ReplicaSet控制器 484 10.4.1 控制器初始化 485 10.4.2 主要執(zhí)行邏輯 485 10.4.3 慢啟動(dòng)創(chuàng)建Pod 487 10.4.4 排序并刪除多余的Pod 487 10.4.5 Expectation機(jī)制 488 10.5 Deployment控制器 492 10.5.1 控制器初始化 492 10.5.2 主要執(zhí)行邏輯 492 10.5.3 調(diào)諧Pod的數(shù)量 495 10.5.4 更新策略 495 10.5.5 版本回滾 496 10.6 DaemonSet控制器 497 10.6.1 控制器初始化 498 10.6.2 主要執(zhí)行邏輯 498 10.6.3 調(diào)諧Pod的數(shù)量 500 10.6.4 更新策略 501 10.7 StatefulSet控制器 503 10.7.1 控制器初始化 503 10.7.2 主要執(zhí)行邏輯 503 10.7.3 調(diào)諧Pod的數(shù)量 504 10.7.4 更新策略 507 10.8 Job控制器 508 10.8.1 控制器初始化 508 10.8.2 主要執(zhí)行邏輯 508 10.8.3 調(diào)諧Pod的數(shù)量 511 10.9 CronJob控制器 512 10.9.1 控制器初始化 513 10.9.2 主要執(zhí)行邏輯 513 10.9.3 計(jì)算Job的啟動(dòng)時(shí)間 515 10.9.4 Job并行策略 518 10.10 Endpoint控制器 519 10.10.1 控制器初始化 519 10.10.2 主要執(zhí)行邏輯 520 10.10.3 Subsets屬性的計(jì)算 523 10.11 EndpointSlice控制器 524 10.11.1 控制器初始化 524 10.11.2 主要執(zhí)行邏輯 525 10.11.3 EndpointSlice控制器的計(jì)算與填充 527 10.12 GarbageCollector控制器 531 10.12.1 控制器初始化 532 10.12.2 主要執(zhí)行邏輯 533 10.12.3 更新資源對(duì)象依賴關(guān)系圖 534 10.12.4 孤兒刪除 537 10.12.5 級(jí)聯(lián)刪除 537 10.13 NodeLifecycle控制器 539 10.13.1 控制器初始化 539 10.13.2 主要執(zhí)行邏輯 541 10.13.3 添加NoSchedule效果的Taint 543 10.13.4 Node健康狀態(tài)檢測(cè) 544 10.13.5 使用NoExecute Taint驅(qū)逐Node上的Pod 546 10.13.6 直接驅(qū)逐Node上的Pod 547 10.14 其他控制器 548 10.14.1 Namespace控制器 548 10.14.2 ServiceAccount控制器 550 10.14.3 PodGC控制器 550 10.14.4 SA Token控制器 551 10.14.5 ResourceQuota控制器 552 第11章 kube-proxy核心實(shí)現(xiàn) 553 11.1 初識(shí)kube-proxy 553 11.2 Service資源 553 11.3 架構(gòu)設(shè)計(jì)詳解 554 11.4 kube-proxy初始化過(guò)程 555 11.4.1 生成iptables、ipvs、Kernel、IP Set接口 556 11.4.2 判斷是否支持ipvs代理模式 558 11.4.3 獲取宿主節(jié)點(diǎn)的Hostname 559 11.4.4 生成KubeClient和EventClient 559 11.4.5 獲取宿主節(jié)點(diǎn)的IP地址 560 11.4.6 確定代理模式 560 11.4.7 確定本地?cái)?shù)據(jù)包判定方法 560 11.4.8 確定IP協(xié)議棧 561 11.4.9 生成Proxier結(jié)構(gòu)體 562 11.5 iptables代理模式的執(zhí)行過(guò)程 562 11.5.1 統(tǒng)計(jì)Stale Service和Stale Endpoints 563 11.5.2 創(chuàng)建基礎(chǔ)iptables鏈和規(guī)則 564 11.5.3 初始化iptables內(nèi)容緩沖區(qū) 566 11.5.4 配置KUBE-POSTROUTING鏈跳轉(zhuǎn)規(guī)則 567 11.5.5 配置KUBE-MARK-MASQ鏈跳轉(zhuǎn)規(guī)則 567 11.5.6 統(tǒng)計(jì)宿主節(jié)點(diǎn)IP地址 568 11.5.7 為每個(gè)Service Port配置iptables鏈和規(guī)則 568 11.5.8 配置KUBE-NODEPORTS鏈跳轉(zhuǎn)規(guī)則 576 11.5.9 配置KUBE-FORWARD鏈跳轉(zhuǎn)規(guī)則 577 11.5.10 將iptables緩沖區(qū)內(nèi)容刷新到宿主機(jī) 577 11.5.11 清理殘留的UDP Conntrack記錄 577 11.6 ipvs代理模式的執(zhí)行過(guò)程 578 11.6.1 統(tǒng)計(jì)Stale Service和Stale Endpoints 579 11.6.2 初始化iptables內(nèi)容緩沖區(qū) 580 11.6.3 創(chuàng)建基礎(chǔ)iptables鏈和規(guī)則 580 11.6.4 創(chuàng)建Dummy網(wǎng)卡 583 11.6.5 創(chuàng)建IP Set 583 11.6.6 統(tǒng)計(jì)宿主節(jié)點(diǎn)的IP地址 585 11.6.7 為每個(gè)Service Port配置規(guī)則 585 11.6.8 更新各個(gè)IP Set的內(nèi)容 590 11.6.9 創(chuàng)建匹配IP Set的iptables規(guī)則 591 11.6.10 將iptables緩沖區(qū)內(nèi)容刷新到宿主機(jī) 593 11.6.11 清理冗余的Service地址 594 11.6.12 清理殘留的UDP Conntrack記錄 595 第12章 kubelet核心實(shí)現(xiàn) 596 12.1 初識(shí)kubelet 596 12.2 kubelet架構(gòu)設(shè)計(jì) 596 12.3 kubelet啟動(dòng)流程 601 12.3.1 Cobra命令行參數(shù)解析 601 12.3.2 運(yùn)行環(huán)境檢測(cè)與設(shè)置 603 12.3.3 Kubelet對(duì)象實(shí)例化 605 12.3.4 啟動(dòng)kubelet主服務(wù) 606 12.3.5 啟動(dòng)HTTP Server服務(wù)和gRPC Server服務(wù) 611 12.4 Pod生命周期管理 612 12.4.1 CRI 613 12.4.2 Pod啟動(dòng)流程 616 12.4.3 Pod驅(qū)逐流程 629 12.5 cgroup資源隔離 637 12.6 垃圾回收原理 639 12.6.1 鏡像垃圾回收 639 12.6.2 容器垃圾回收 645 12.7 PLEG核心原理 652 12.7.1 PLEG產(chǎn)生原因 652 12.7.2 PLEG架構(gòu)設(shè)計(jì) 652 12.7.3 PLEG原理剖析 653 12.8 HTTP服務(wù)接口 657 12.8.1 日志查詢接口 659 12.8.2 命令執(zhí)行接口 666 12.8.3 端口轉(zhuǎn)發(fā)接口 673 第13章 代碼生成器【通過(guò)讀者服務(wù)二維碼獲取】 679 附錄A Kubernetes組件配置參數(shù)介紹【通過(guò)讀者服務(wù)二維碼獲取】 680
你還可能感興趣
我要評(píng)論
|