关于我们
书单推荐
新书推荐
|
深入理解Kubernetes源码 读者对象:本书适合对容器技术和云计算感兴趣的开发者、运维工程师及架构师参考和阅读
在过去几年中,容器技术的广泛应用推动了容器编排技术的迅猛发展,尤其是Kubernetes的兴起。作为当前非常受欢迎的容器编排系统,Kubernetes能够有效应对生产环境中复杂的编排需求,帮助企业实现大规模多容器集群的高效管理。本书将Kubernetes1.25.0版本源码作为剖析对象,深入探讨其核心组件和实现原理。通过学习Kubernetes源码,读者不仅能掌握容器编排技术的精髓,还能提升自身在云计算领域的竞争力。
第1章 Kubernetes基本架构 1
1.1 Kubernetes发展历史 1 1.2 Kubernetes架构 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构建过程 10 2.1 构建方式 10 2.2 一切都始于Makefile 12 2.3 本地环境构建 13 2.3.1 本地环境构建命令 13 2.3.2 本地环境构建过程 14 2.4 容器环境构建 16 2.4.1 容器环境构建命令 16 2.4.2 容器环境构建过程 16 第3章 Kubernetes核心数据结构 19 3.1 初识数据结构 19 3.2 基本概念 19 3.2.1 API的层次结构 19 3.2.2 版本控制 20 3.2.3 组 21 3.2.4 API术语 22 3.2.5 API资源组成 25 3.2.6 版本化资源与未版本化资源 26 3.2.7 内部版本与外部版本 27 3.3 Kubernetes API的数据结构 28 3.3.1 APIGroup、APIVersions 28 3.3.2 APIResource 30 3.3.3 GVK和GVR 32 3.3.4 内置资源全景图 33 3.4 Kubernetes资源定义 35 3.4.1 内部版本定义 35 3.4.2 外部版本定义 36 3.5 将资源注册到Scheme中 36 3.5.1 资源类型注册入口 37 3.5.2 Scheme的数据结构 38 3.5.3 Scheme的初始化 40 3.5.4 SchemeBuilder资源注册 41 3.5.5 资源外部版本注册 43 3.5.6 资源内部版本注册 44 3.5.7 所有资源的注册入口 45 3.5.8 资源注册表的查询方法 47 3.5.9 资源对象的创建 48 3.5.10 资源对象的转换 48 3.5.11 资源对象默认值的设置 49 3.5.12 资源字段的转换 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 编/解码数据结构 56 3.7.2 CodecFactory实例化 57 3.7.3 codec编/解码实现类 60 3.7.4 json.Serializer编/解码 64 3.7.5 protobuf.Serializer编/解码 65 3.7.6 UnstructuredJSONScheme实现类 67 3.7.7 NegotiatedSerializer 67 3.7.8 ParameterCodec 69 3.7.9 runtime包下的Codec相关函数 71 3.7.10 Codec核心调用链路 72 3.7.11 Codec的使用方式 74 3.8 Converter资源版本转换器 75 3.8.1 Converter的数据结构 76 3.8.2 Converter转换函数的注册 77 3.8.3 Converter的初始化 77 3.8.4 Converter资源版本转换的实现 78 3.9 使用RESTMapper管理GVR和GVK映射 79 3.9.1 RESTMapper的数据结构 80 3.9.2 RESTMapper实现类 81 3.9.3 DefaultRESTMapper默认实现类 82 3.9.4 PriorityRESTMapper优先级映射 83 3.9.5 DeferredDiscoveryRESTMapper实现类 84 3.9.6 RESTMapper的使用 85 3.9.7 RESTMapping的数据结构及典型用法 85 第4章 Kubernetes核心资源对象 87 4.1 初识Kubernetes资源对象 87 4.2 metav1.ObjectMeta属性元数据 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创建流程 114 4.3.4 Pause容器及创建流程 115 4.3.5 PodSpec生成容器参数 122 4.3.6 容器的通用创建流程 124 4.3.7 资源配额与cgroup 126 4.3.8 QoS与驱逐顺序 131 4.3.9 静态Pod 135 4.3.10 健康检查 137 4.3.11 Pod的状态 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 发现和负载均衡资源 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发现客户端 212 5.3 Informer机制 214 5.3.1 Informer使用示例 214 5.3.2 Informer架构 216 5.3.3 Reflector数据同步 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执行流程 256 6.2.1 初始化命令对象 257 6.2.2 补全命令参数 257 6.2.3 校验命令参数 258 6.2.4 执行命令输出结果 258 6.3 kubectl缓存机制 263 6.3.1 缓存数据结构 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 扩展命令实现原理 277 6.5.3 扩展命令管理器Krew 278 第7章 etcd存储核心实现 280 7.1 初识etcd存储 280 7.2 etcd存储架构设计 280 7.3 RESTStorage资源存储接口 282 7.4 genericregistry.Store通用操作封装 283 7.4.1 标准存储实现 283 7.4.2 版本冲突检测 284 7.4.3 通用钩子函数 284 7.4.4 DryRun实现原理 287 7.5 storage.Interface通用存储接口 288 7.6 Cacher Storage缓存层 290 7.6.1 Cacher Storage缓存架构 291 7.6.2 ResourceVersion资源版本号 295 7.6.3 watchCache缓存滑动窗口 297 7.7 Underlying Storage底层存储对象 300 7.8 Codec数据编/解码 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核心实现 310 8.1 初识kube-apiserver 310 8.2 网络通信框架 311 8.2.1 go-restful框架 311 8.2.2 Protobuf序列化 314 8.3 kube-apiserver架构设计 319 8.4 kube-apiserver启动流程 321 8.4.1 Scheme资源注册 322 8.4.2 Cobra命令行参数解析 324 8.4.3 创建API Server通用配置 325 8.4.4 创建APIExtensionsServer 336 8.4.5 创建KubeAPIServer 345 8.4.6 创建AggregatorServer 353 8.4.7 GenericAPIServer初始化 360 8.4.8 准备和启动HTTPS服务 362 8.5 请求处理流程 367 8.6 权限控制体系 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 授权 383 8.8.1 AlwaysAllow授权 386 8.8.2 AlwaysDeny授权 387 8.8.3 ABAC授权 388 8.8.4 Webhook授权 389 8.8.5 RBAC授权 391 8.8.6 Node授权 396 8.9 准入控制器 397 8.9.1 内置插件介绍 398 8.9.2 内部实现原理 401 8.9.3 MutatingAdmissionWebhook准入控制器 404 8.9.4 ValidatingAdmissionWebhook准入控制器 411 8.10 信号处理机制 416 8.10.1 常驻进程实现 416 8.10.2 进程的优雅关闭 417 8.10.3 向systemd报告进程状态 419 8.11 List-Watch的实现原理 420 8.11.1 长连接通信协议 420 8.11.2 List-Watch的核心原理 425 第9章 kube-scheduler核心实现 430 9.1 初识kube-scheduler 430 9.1.1 kube-scheduler调度模型 430 9.1.2 kube-scheduler内部架构 431 9.1.3 kube-scheduler事件驱动 434 9.2 kube-scheduler启动流程 437 9.2.1 Cobra命令行参数解析 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 执行Leader选举 444 9.2.7 运行调度器 445 9.3 Scheduling Framework 445 9.3.1 诞生背景 445 9.3.2 核心架构 446 9.4 调度器运行流程 452 9.4.1 整体运行流程 452 9.4.2 Scheduling Cycle 454 9.4.3 Binding Cycle 462 9.5 优先级与抢占机制 464 9.5.1 Pod优先级 465 9.5.2 Pod驱逐抢占机制 466 9.6 内置调度插件介绍 473 第10章 kube-controller-manager核心实现 475 10.1 初识kube-controller-manager 475 10.2 架构设计详解 477 10.2.1 控制器状态模型 477 10.2.2 控制器执行原理 478 10.3 启动流程 479 10.3.1 Cobra命令行参数解析 480 10.3.2 运行EventBroadcaster事件处理器 481 10.3.3 运行HTTPS服务 481 10.3.4 执行Leader选举 482 10.3.5 启动控制器主循环 482 10.4 ReplicaSet控制器 484 10.4.1 控制器初始化 485 10.4.2 主要执行逻辑 485 10.4.3 慢启动创建Pod 487 10.4.4 排序并删除多余的Pod 487 10.4.5 Expectation机制 488 10.5 Deployment控制器 492 10.5.1 控制器初始化 492 10.5.2 主要执行逻辑 492 10.5.3 调谐Pod的数量 495 10.5.4 更新策略 495 10.5.5 版本回滚 496 10.6 DaemonSet控制器 497 10.6.1 控制器初始化 498 10.6.2 主要执行逻辑 498 10.6.3 调谐Pod的数量 500 10.6.4 更新策略 501 10.7 StatefulSet控制器 503 10.7.1 控制器初始化 503 10.7.2 主要执行逻辑 503 10.7.3 调谐Pod的数量 504 10.7.4 更新策略 507 10.8 Job控制器 508 10.8.1 控制器初始化 508 10.8.2 主要执行逻辑 508 10.8.3 调谐Pod的数量 511 10.9 CronJob控制器 512 10.9.1 控制器初始化 513 10.9.2 主要执行逻辑 513 10.9.3 计算Job的启动时间 515 10.9.4 Job并行策略 518 10.10 Endpoint控制器 519 10.10.1 控制器初始化 519 10.10.2 主要执行逻辑 520 10.10.3 Subsets属性的计算 523 10.11 EndpointSlice控制器 524 10.11.1 控制器初始化 524 10.11.2 主要执行逻辑 525 10.11.3 EndpointSlice控制器的计算与填充 527 10.12 GarbageCollector控制器 531 10.12.1 控制器初始化 532 10.12.2 主要执行逻辑 533 10.12.3 更新资源对象依赖关系图 534 10.12.4 孤儿删除 537 10.12.5 级联删除 537 10.13 NodeLifecycle控制器 539 10.13.1 控制器初始化 539 10.13.2 主要执行逻辑 541 10.13.3 添加NoSchedule效果的Taint 543 10.13.4 Node健康状态检测 544 10.13.5 使用NoExecute Taint驱逐Node上的Pod 546 10.13.6 直接驱逐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核心实现 553 11.1 初识kube-proxy 553 11.2 Service资源 553 11.3 架构设计详解 554 11.4 kube-proxy初始化过程 555 11.4.1 生成iptables、ipvs、Kernel、IP Set接口 556 11.4.2 判断是否支持ipvs代理模式 558 11.4.3 获取宿主节点的Hostname 559 11.4.4 生成KubeClient和EventClient 559 11.4.5 获取宿主节点的IP地址 560 11.4.6 确定代理模式 560 11.4.7 确定本地数据包判定方法 560 11.4.8 确定IP协议栈 561 11.4.9 生成Proxier结构体 562 11.5 iptables代理模式的执行过程 562 11.5.1 统计Stale Service和Stale Endpoints 563 11.5.2 创建基础iptables链和规则 564 11.5.3 初始化iptables内容缓冲区 566 11.5.4 配置KUBE-POSTROUTING链跳转规则 567 11.5.5 配置KUBE-MARK-MASQ链跳转规则 567 11.5.6 统计宿主节点IP地址 568 11.5.7 为每个Service Port配置iptables链和规则 568 11.5.8 配置KUBE-NODEPORTS链跳转规则 576 11.5.9 配置KUBE-FORWARD链跳转规则 577 11.5.10 将iptables缓冲区内容刷新到宿主机 577 11.5.11 清理残留的UDP Conntrack记录 577 11.6 ipvs代理模式的执行过程 578 11.6.1 统计Stale Service和Stale Endpoints 579 11.6.2 初始化iptables内容缓冲区 580 11.6.3 创建基础iptables链和规则 580 11.6.4 创建Dummy网卡 583 11.6.5 创建IP Set 583 11.6.6 统计宿主节点的IP地址 585 11.6.7 为每个Service Port配置规则 585 11.6.8 更新各个IP Set的内容 590 11.6.9 创建匹配IP Set的iptables规则 591 11.6.10 将iptables缓冲区内容刷新到宿主机 593 11.6.11 清理冗余的Service地址 594 11.6.12 清理残留的UDP Conntrack记录 595 第12章 kubelet核心实现 596 12.1 初识kubelet 596 12.2 kubelet架构设计 596 12.3 kubelet启动流程 601 12.3.1 Cobra命令行参数解析 601 12.3.2 运行环境检测与设置 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驱逐流程 629 12.5 cgroup资源隔离 637 12.6 垃圾回收原理 639 12.6.1 镜像垃圾回收 639 12.6.2 容器垃圾回收 645 12.7 PLEG核心原理 652 12.7.1 PLEG产生原因 652 12.7.2 PLEG架构设计 652 12.7.3 PLEG原理剖析 653 12.8 HTTP服务接口 657 12.8.1 日志查询接口 659 12.8.2 命令执行接口 666 12.8.3 端口转发接口 673 第13章 代码生成器【通过读者服务二维码获取】 679 附录A Kubernetes组件配置参数介绍【通过读者服务二维码获取】 680
你还可能感兴趣
我要评论
|