温馨提示×

centos k8s资源调度策略有哪些

小樊
40
2025-12-13 20:16:15
栏目: 智能运维

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)、NodeAffinityInterPodAffinityPodTopologySpreadTaintTolerationVolumeBinding 等。
  • 调度策略倾向
    • 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 与(在托管集群上)弹性资源优先级调度实现成本与性能平衡。

0