關(guān)于我們
書單推薦
新書推薦
|
深入理解Kubernetes源碼 讀者對象:本書適合對容器技術(shù)和云計算感興趣的開發(fā)者、運維工程師及架構(gòu)師參考和閱讀
在過去幾年中,容器技術(shù)的廣泛應用推動了容器編排技術(shù)的迅猛發(fā)展,尤其是Kubernetes的興起。作為當前非常受歡迎的容器編排系統(tǒng),Kubernetes能夠有效應對生產(chǎn)環(huán)境中復雜的編排需求,幫助企業(yè)實現(xiàn)大規(guī)模多容器集群的高效管理。本書將Kubernetes1.25.0版本源碼作為剖析對象,深入探討其核心組件和實現(xiàn)原理。通過學習Kubernetes源碼,讀者不僅能掌握容器編排技術(shù)的精髓,還能提升自身在云計算領域的競爭力。
第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設計 7 第2章 Kubernetes構(gòu)建過程 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)建過程 14 2.4 容器環(huán)境構(gòu)建 16 2.4.1 容器環(huán)境構(gòu)建命令 16 2.4.2 容器環(huán)境構(gòu)建過程 16 第3章 Kubernetes核心數(shù)據(jù)結(jié)構(gòu) 19 3.1 初識數(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ù)語 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 將資源注冊到Scheme中 36 3.5.1 資源類型注冊入口 37 3.5.2 Scheme的數(shù)據(jù)結(jié)構(gòu) 38 3.5.3 Scheme的初始化 40 3.5.4 SchemeBuilder資源注冊 41 3.5.5 資源外部版本注冊 43 3.5.6 資源內(nèi)部版本注冊 44 3.5.7 所有資源的注冊入口 45 3.5.8 資源注冊表的查詢方法 47 3.5.9 資源對象的創(chuàng)建 48 3.5.10 資源對象的轉(zhuǎn)換 48 3.5.11 資源對象默認值的設置 49 3.5.12 資源字段的轉(zhuǎn)換 49 3.6 對象體系設計 49 3.6.1 資源對象的基本信息 49 3.6.2 對象體系類圖 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實例化 57 3.7.3 codec編/解碼實現(xiàn)類 60 3.7.4 json.Serializer編/解碼 64 3.7.5 protobuf.Serializer編/解碼 65 3.7.6 UnstructuredJSONScheme實現(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ù)的注冊 77 3.8.3 Converter的初始化 77 3.8.4 Converter資源版本轉(zhuǎn)換的實現(xiàn) 78 3.9 使用RESTMapper管理GVR和GVK映射 79 3.9.1 RESTMapper的數(shù)據(jù)結(jié)構(gòu) 80 3.9.2 RESTMapper實現(xiàn)類 81 3.9.3 DefaultRESTMapper默認實現(xiàn)類 82 3.9.4 PriorityRESTMapper優(yōu)先級映射 83 3.9.5 DeferredDiscoveryRESTMapper實現(xiàn)類 84 3.9.6 RESTMapper的使用 85 3.9.7 RESTMapping的數(shù)據(jù)結(jié)構(gòu)及典型用法 85 第4章 Kubernetes核心資源對象 87 4.1 初識Kubernetes資源對象 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資源對象 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 原地升級 144 4.4 工作負載資源 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)和負載均衡資源 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 配置和存儲資源 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 初識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機制 214 5.3.1 Informer使用示例 214 5.3.2 Informer架構(gòu) 216 5.3.3 Reflector數(shù)據(jù)同步 217 5.3.4 DeltaFIFO操作隊列 223 5.3.5 Indexer資源緩存 226 5.3.6 processor資源處理 230 5.3.7 workqueue工作隊列 233 5.4 常用工具類 240 5.4.1 事件管理機制 240 5.4.2 Leader選舉機制 247 第6章 kubectl命令式交互 256 6.1 初識kubectl 256 6.2 kubectl執(zhí)行流程 256 6.2.1 初始化命令對象 257 6.2.2 補全命令參數(shù) 257 6.2.3 校驗命令參數(shù) 258 6.2.4 執(zhí)行命令輸出結(jié)果 258 6.3 kubectl緩存機制 263 6.3.1 緩存數(shù)據(jù)結(jié)構(gòu) 264 6.3.2 緩存機制詳解 265 6.3.3 緩存使用場景 269 6.4 kubectl變更比對策略 272 6.4.1 變更比對策略介紹 272 6.4.2 服務端應用和客戶端應用 272 6.4.3 策略比對器和JSON比對器 274 6.4.4 雙路合并和三路合并 275 6.5 kubectl擴展命令 277 6.5.1 擴展命令介紹 277 6.5.2 擴展命令實現(xiàn)原理 277 6.5.3 擴展命令管理器Krew 278 第7章 etcd存儲核心實現(xiàn) 280 7.1 初識etcd存儲 280 7.2 etcd存儲架構(gòu)設計 280 7.3 RESTStorage資源存儲接口 282 7.4 genericregistry.Store通用操作封裝 283 7.4.1 標準存儲實現(xiàn) 283 7.4.2 版本沖突檢測 284 7.4.3 通用鉤子函數(shù) 284 7.4.4 DryRun實現(xiàn)原理 287 7.5 storage.Interface通用存儲接口 288 7.6 Cacher Storage緩存層 290 7.6.1 Cacher Storage緩存架構(gòu) 291 7.6.2 ResourceVersion資源版本號 295 7.6.3 watchCache緩存滑動窗口 297 7.7 Underlying Storage底層存儲對象 300 7.8 Codec數(shù)據(jù)編/解碼 301 7.9 Strategy預處理 304 7.9.1 Create Strategy預處理 304 7.9.2 Update Strategy預處理 307 7.9.3 Delete Strategy預處理 308 第8章 kube-apiserver核心實現(xiàn) 310 8.1 初識kube-apiserver 310 8.2 網(wǎng)絡通信框架 311 8.2.1 go-restful框架 311 8.2.2 Protobuf序列化 314 8.3 kube-apiserver架構(gòu)設計 319 8.4 kube-apiserver啟動流程 321 8.4.1 Scheme資源注冊 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 準備和啟動HTTPS服務 362 8.5 請求處理流程 367 8.6 權(quán)限控制體系 368 8.7 認證 369 8.7.1 RequestHeader認證 370 8.7.2 ClientCA認證 372 8.7.3 TokenAuth認證 373 8.7.4 ServiceAccountAuth認證 374 8.7.5 BootstrapToken認證 377 8.7.6 OIDC認證 379 8.7.7 WebhookTokenAuth認證 381 8.7.8 Anonymous認證 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 準入控制器 397 8.9.1 內(nèi)置插件介紹 398 8.9.2 內(nèi)部實現(xiàn)原理 401 8.9.3 MutatingAdmissionWebhook準入控制器 404 8.9.4 ValidatingAdmissionWebhook準入控制器 411 8.10 信號處理機制 416 8.10.1 常駐進程實現(xiàn) 416 8.10.2 進程的優(yōu)雅關(guān)閉 417 8.10.3 向systemd報告進程狀態(tài) 419 8.11 List-Watch的實現(xiàn)原理 420 8.11.1 長連接通信協(xié)議 420 8.11.2 List-Watch的核心原理 425 第9章 kube-scheduler核心實現(xiàn) 430 9.1 初識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ū)動 434 9.2 kube-scheduler啟動流程 437 9.2.1 Cobra命令行參數(shù)解析 438 9.2.2 實例化Scheduler對象 439 9.2.3 運行EventBroadcaster事件管理器 442 9.2.4 運行HTTPS Server 442 9.2.5 運行Informer同步資源 443 9.2.6 執(zhí)行Leader選舉 444 9.2.7 運行調(diào)度器 445 9.3 Scheduling Framework 445 9.3.1 誕生背景 445 9.3.2 核心架構(gòu) 446 9.4 調(diào)度器運行流程 452 9.4.1 整體運行流程 452 9.4.2 Scheduling Cycle 454 9.4.3 Binding Cycle 462 9.5 優(yōu)先級與搶占機制 464 9.5.1 Pod優(yōu)先級 465 9.5.2 Pod驅(qū)逐搶占機制 466 9.6 內(nèi)置調(diào)度插件介紹 473 第10章 kube-controller-manager核心實現(xiàn) 475 10.1 初識kube-controller-manager 475 10.2 架構(gòu)設計詳解 477 10.2.1 控制器狀態(tài)模型 477 10.2.2 控制器執(zhí)行原理 478 10.3 啟動流程 479 10.3.1 Cobra命令行參數(shù)解析 480 10.3.2 運行EventBroadcaster事件處理器 481 10.3.3 運行HTTPS服務 481 10.3.4 執(zhí)行Leader選舉 482 10.3.5 啟動控制器主循環(huán) 482 10.4 ReplicaSet控制器 484 10.4.1 控制器初始化 485 10.4.2 主要執(zhí)行邏輯 485 10.4.3 慢啟動創(chuàng)建Pod 487 10.4.4 排序并刪除多余的Pod 487 10.4.5 Expectation機制 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 計算Job的啟動時間 515 10.9.4 Job并行策略 518 10.10 Endpoint控制器 519 10.10.1 控制器初始化 519 10.10.2 主要執(zhí)行邏輯 520 10.10.3 Subsets屬性的計算 523 10.11 EndpointSlice控制器 524 10.11.1 控制器初始化 524 10.11.2 主要執(zhí)行邏輯 525 10.11.3 EndpointSlice控制器的計算與填充 527 10.12 GarbageCollector控制器 531 10.12.1 控制器初始化 532 10.12.2 主要執(zhí)行邏輯 533 10.12.3 更新資源對象依賴關(guān)系圖 534 10.12.4 孤兒刪除 537 10.12.5 級聯(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)檢測 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核心實現(xiàn) 553 11.1 初識kube-proxy 553 11.2 Service資源 553 11.3 架構(gòu)設計詳解 554 11.4 kube-proxy初始化過程 555 11.4.1 生成iptables、ipvs、Kernel、IP Set接口 556 11.4.2 判斷是否支持ipvs代理模式 558 11.4.3 獲取宿主節(jié)點的Hostname 559 11.4.4 生成KubeClient和EventClient 559 11.4.5 獲取宿主節(jié)點的IP地址 560 11.4.6 確定代理模式 560 11.4.7 確定本地數(shù)據(jù)包判定方法 560 11.4.8 確定IP協(xié)議棧 561 11.4.9 生成Proxier結(jié)構(gòu)體 562 11.5 iptables代理模式的執(zhí)行過程 562 11.5.1 統(tǒng)計Stale Service和Stale Endpoints 563 11.5.2 創(chuàng)建基礎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)計宿主節(jié)點IP地址 568 11.5.7 為每個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)容刷新到宿主機 577 11.5.11 清理殘留的UDP Conntrack記錄 577 11.6 ipvs代理模式的執(zhí)行過程 578 11.6.1 統(tǒng)計Stale Service和Stale Endpoints 579 11.6.2 初始化iptables內(nèi)容緩沖區(qū) 580 11.6.3 創(chuàng)建基礎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)計宿主節(jié)點的IP地址 585 11.6.7 為每個Service Port配置規(guī)則 585 11.6.8 更新各個IP Set的內(nèi)容 590 11.6.9 創(chuàng)建匹配IP Set的iptables規(guī)則 591 11.6.10 將iptables緩沖區(qū)內(nèi)容刷新到宿主機 593 11.6.11 清理冗余的Service地址 594 11.6.12 清理殘留的UDP Conntrack記錄 595 第12章 kubelet核心實現(xiàn) 596 12.1 初識kubelet 596 12.2 kubelet架構(gòu)設計 596 12.3 kubelet啟動流程 601 12.3.1 Cobra命令行參數(shù)解析 601 12.3.2 運行環(huán)境檢測與設置 603 12.3.3 Kubelet對象實例化 605 12.3.4 啟動kubelet主服務 606 12.3.5 啟動HTTP Server服務和gRPC Server服務 611 12.4 Pod生命周期管理 612 12.4.1 CRI 613 12.4.2 Pod啟動流程 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)設計 652 12.7.3 PLEG原理剖析 653 12.8 HTTP服務接口 657 12.8.1 日志查詢接口 659 12.8.2 命令執(zhí)行接口 666 12.8.3 端口轉(zhuǎn)發(fā)接口 673 第13章 代碼生成器【通過讀者服務二維碼獲取】 679 附錄A Kubernetes組件配置參數(shù)介紹【通過讀者服務二維碼獲取】 680
你還可能感興趣
我要評論
|