调度与弹性
调度决定 Pod 运行在哪里,资源管理决定它能用多少,弹性机制决定在负载变化时如何自动增减——三者共同构成 Kubernetes 高效利用算力的核心。本章先从 kube-scheduler 的工作原理与调度约束讲起,再覆盖优先级与抢占、QoS、ResourceQuota 与 LimitRange、kubelet 在节点侧的预留与驱逐,最后把工作负载层的 HPA、VPA、KEDA 与节点层的 Cluster Autoscaler、Karpenter 以及面向批处理与 AI 的 Volcano 串成完整的弹性链路。
章节目录
本章概览:梳理 Kubernetes 调度器工作原理、资源 requests/limits、调度约束、优先级抢占、节点压力驱逐、PDB、HPA/VPA 与节点弹性、装箱策略与多调度器,并给出各主题的深入阅读导引。
深入探讨 Kubernetes 中的资源调度机制,包括 kube-scheduler 组件的工作原理、调度策略、高级调度功能以及相关的扩展工具。
系统介绍 Kubernetes 中控制 Pod 落点的四类调度约束:nodeSelector、节点亲和性、Pod 亲和/反亲和、拓扑分布约束,解释硬/软约束语义、拓扑键、matchLabelKeys、minDomains、nodeAffinityPolicy 等字段,并给出跨可用区高可用部署的推荐组合。
介绍 PriorityClass 与 Pod 抢占机制:优先级如何影响调度队列顺序、资源不足时调度器如何选择牺牲者、preemptionPolicy: Never 的非抢占优先级、与 PDB 和优雅终止的交互、内建系统优先级类、异步抢占(v1.33 Beta)以及在批处理与多租户场景中的配额治理。
详细介绍 Kubernetes 中 Pod 的服务质量等级(QoS)机制,包括 Guaranteed、Burstable 和 BestEffort 三种等级的配置方法和使用场景。
介绍 Kubernetes 命名空间级资源治理的两大机制:ResourceQuota 限制命名空间内计算资源、存储、对象数量与扩展资源的总量,支持按 QoS、优先级类、跨命名空间 Pod 亲和等作用域;LimitRange 为单个 Pod/容器/PVC 设置默认值、最小/最大值与比例约束。涵盖配额与 LimitRange 的协作、对 GPU 等扩展资源的配额、常见错误与多租户实践。
深入 kubelet 在节点侧的资源管理职责:Node Allocatable 与 kube-reserved/system-reserved/eviction 预留模型、节点压力驱逐的信号/阈值/Pod 选择顺序、镜像与容器垃圾回收、节点优雅关机,以及面向延迟敏感与 AI 负载的 CPU 管理器、内存管理器、拓扑管理器与 NUMA 对齐。
深入了解 Kubernetes HPA(Horizontal Pod Autoscaling)的工作原理、配置方法和自定义指标支持,包括基于 CPU、内存和自定义指标的自动扩缩容实现。
自定义 Pod 自动扩缩容器让你基于业务指标灵活定义扩缩容策略,突破标准 HPA 的局限,实现更智能的资源管理。
介绍 HPA 之外的两类工作负载自动扩缩:Vertical Pod Autoscaler 的推荐器/更新器/准入控制器架构、Off/Initial/Recreate/InPlaceOrRecreate/InPlace 更新模式及与原地资源调整的结合;KEDA 的 ScaledObject/ScaledJob 模型、70+ 事件源 Scaler、缩容到零与 HPA 的协作;以及三者的组合策略与冲突规避。
讲解节点层的自动扩缩:扩容(为 Pending Pod 供应节点)与整合(回收低利用率节点)两个方向的原理,Cluster Autoscaler 的节点组模型与扩展器策略,Karpenter 的 NodePool/NodeClass 模型、整合策略与中断预算,两者的选型对比,与 HPA/VPA/KEDA 的配合,以及 GPU 节点、Spot 实例与 PDB 等生产注意事项。
Volcano 是一个专为高性能计算(HPC)和大规模批处理任务设计的 Kubernetes 调度器扩展,提供先进的调度策略和资源管理功能。