随笔 - 365  文章 - 0  评论 - 5  阅读 - 5669

Scheduler的两阶段调度算法

Kubernetes Scheduler的两阶段调度算法

1. 预选阶段(Predicates):硬性条件过滤

目标:从集群所有节点中筛选出符合Pod基本运行条件的候选节点。
关键策略

  • 资源匹配:检查节点的CPU、内存、存储等资源是否满足Pod的requests定义。
  • 污点与容忍(Taints and Tolerations):若节点存在污点(如NoSchedule),Pod需声明对应的容忍(Toleration)才能被调度。
  • 节点亲和性(Node Affinity):通过requiredDuringSchedulingIgnoredDuringExecution强制Pod部署到特定标签的节点。
  • 卷拓扑限制:例如,云盘类型的存储卷需匹配节点所在的可用区。

生产注意点

  • 预选失败常见于资源超售场景,需合理设置Pod的requests/limits
  • 使用kubectl describe pod <pod-name>可查看因Insufficient cpu/memory导致的调度失败事件。

2. 优选阶段(Priorities):评分与优化决策

目标:对预选通过的节点打分,选择综合最优节点。
核心评分规则

  • 资源均衡(Balanced Resource Allocation):优先选择CPU/内存利用率更均衡的节点,避免热点。
  • 最小请求优先(Least Requested):倾向资源空闲率高的节点,公式:(NodeFree - PodRequest) / NodeCapacity
  • Pod亲和性(Inter-Pod Affinity/Anti-Affinity):优化服务拓扑,例如将同一服务的Pod分散到不同可用区(Topology Spread Constraints)。
  • 节点权重(Node Prefer Avoid Pods):通过注解手动干预调度优先级。

生产最佳实践

  • 对延迟敏感的服务(如AI推理)启用Node Resources Least Allocatable策略,优先分配低延迟节点。
  • 结合PriorityClass实现抢占式调度,确保高优先级业务优先调度。

调度流程的底层机制

  1. 异步绑定:调度线程(Scheduling Thread)串行选择节点后,由独立线程异步执行Bind操作(如更新Pod的nodeName字段)。
  2. 调度周期(Scheduling Cycle):包含预选、优选、绑定三个阶段,若绑定失败(如节点资源突变),Pod重新进入调度队列。
  3. 扩展性:通过Scheduler Framework插件机制,可自定义FilterScore等扩展点(如实现GPU资源调度策略)。

生产案例:调度策略配置

# 示例:强制Pod分散在不同可用区
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                app: nginx
            topologyKey: topology.kubernetes.io/zone

总结

Kubernetes调度器通过预选+优选的机制,在保障稳定性的同时实现资源最优分配。生产环境中需结合业务特性调整策略,例如:

  • 有状态服务:使用StatefulSet并配置volumeClaimTemplates确保存储拓扑。
  • 批量计算:利用Batch类资源(如Job)配合低优先级调度。
  • 混合云场景:通过NodeSelector限制调度到特定厂商节点。

参考资料:
预选与优选核心逻辑
Kubernetes官方调度机制
高级调度策略与扩展性

posted on   Leo-Yide  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示