CentOS 上 Kubernetes 资源调度策略全览
在 CentOS 环境中,Kubernetes 的调度由 kube-scheduler 完成,遵循“过滤 Filter → 打分 Score → 绑定 Bind”的两阶段机制。调度器依据 Pod 的资源请求、节点标签/污点、亲和/反亲和、拓扑分布、卷绑定等约束与策略,选择最合适节点;该机制与操作系统发行版无关,在 CentOS 上的行为与社区版一致。
一 原生调度策略分类与说明
- 节点选择类
- nodeSelector:按节点标签进行基础定向调度。
- nodeAffinity:更灵活的节点选择,支持硬/软规则(requiredDuringSchedulingIgnoredDuringExecution / preferredDuringSchedulingIgnoredDuringExecution)。
- 污点与容忍 Taints/Tolerations:通过节点污点(NoSchedule/PreferNoSchedule/NoExecute)与 Pod 容忍实现专用节点与维护隔离。
- Pod 间布局类
- podAffinity / podAntiAffinity:让相关或互斥的 Pod 共置/分散,支持硬/软规则,提升容错或降低通信时延。
- 拓扑分布约束 Topology Spread Constraints:跨 zone/rack/node 等拓扑域均匀打散,提升高可用与负载均衡。
- 资源与调度语义类
- 资源请求与限制 Requests/Limits:调度依据 requests;limits 用于运行时 cgroup 限制与 QoS 判定。
- QoS 等级:Guaranteed / Burstable / BestEffort,影响节点资源紧张时的驱逐顺序与保障级别。
- 优先级与抢占 Priority/Preemption:高优先级 Pod 在资源不足时可抢占低优先级 Pod。
- 多调度器 Multiple Schedulers:可为不同工作负载指定不同调度器(在 Pod 上通过 .spec.schedulerName 指定)。
二 调度器扩展与可配置策略
- 调度框架与插件
- 通过 KubeSchedulerConfiguration v1 配置调度器 Profiles 与 插件,可在扩展点(queueSort、preFilter、filter、preScore、score、reserve、permit、preBind、bind、postBind 等)启用/禁用/重排插件,实现调度行为定制。
- 常用插件:NodeResourcesFit(资源匹配与打分策略 LeastAllocated/MostAllocated/RequestedToCapacityRatio)、NodeAffinity、InterPodAffinity、PodTopologySpread、TaintToleration、VolumeBinding 等。
- 调度策略倾向
- Binpack:优先填满节点/高负载资源,提升资源利用率、减少碎片(适合批处理/离线)。
- Spread:优先打散,提升故障隔离与稳定性(适合在线服务/有状态分散)。
三 批量与拓扑感知及负载相关策略
- 批量作业调度
- Gang Scheduling:关联 Pod 组“全有或全无”同时调度,避免部分就绪导致整体阻塞(适合分布式训练/批处理)。
- Capacity Scheduling:为命名空间/用户组预留容量,资源紧张时允许受控共享,提高多租户利用率。
- 拓扑感知与性能优化
- 拓扑感知调度:在多个拓扑域上重试,满足作业对低时延/高吞吐的布局需求(如 GPU/NUMA 场景)。
- CPU 拓扑感知 / GPU 拓扑感知:减少跨 NUMA 访存与 GPU 切换开销,提升性能稳定性。
- 负载感知调度:参考节点历史与实时负载,优先调度到负载较低节点,缓解热点。
- CPU Burst:允许容器在空闲时积累 CPU 时间片,应对启动/突发流量,降低限流与延迟。
- 在离线混部与重调度
- 动态资源超卖 与 QoS 隔离(CPU、内存、L3 Cache/内存带宽)提升混部利用率同时保障高优任务。
- 重调度 Descheduler:当节点负载不均、节点标签/污点变化或资源碎片导致次优分布时,将 Pod 迁移至更优节点。
四 资源配额与服务质量
- ResourceQuota:在命名空间维度限制 requests/limits 的总量(如 CPU、内存、PVC 数量等),实现多租户/团队配额治理。
- LimitRange:为命名空间设置默认 requests/limits 与取值范围,约束容器/Pod 的资源规格基线。
- QoS 与驱逐:当节点内存压力升高时,kubelet 按 BestEffort → Burstable → Guaranteed 的顺序优先驱逐低优 Pod;合理设置 requests/limits 与 QoS 可显著降低 OOM/限流风险。
五 快速选型建议
- 需要专用节点(如 GPU)优先使用:污点/容忍 + nodeAffinity;多任务协同与低时延通信优先:podAffinity/反亲和 + Topology Spread。
- 追求高资源利用率与减少碎片:启用 Binpack;强调高可用与隔离:启用 Spread 与拓扑打散。
- 批量/分布式作业:采用 Gang Scheduling + Capacity Scheduling;存在热点或突发流量:启用 负载感知调度 + CPU Burst。
- 多租户与成本控制:结合 ResourceQuota/LimitRange 与(在托管集群上)弹性资源优先级调度实现成本与性能平衡。