【Kubernetes从入门到精通】第64篇:Scheduler深度解析——Pod调度算法的“高考阅卷“,预选打分一个不落
上一篇【第63篇】Informer机制——K8s高性能事件驱动的核心没有它控制器早累死了下一篇【第65篇】kubelet深度解析——节点上的全能管家摘要当你kubectl apply一个PodAPI Server把它存进etcd状态是Pending——因为还没决定放哪个Node。这时候Scheduler出场了。Scheduler的工作像高考阅卷先预选过滤掉不满足条件的Node就像先划分数线再优选给剩下的Node打分排名就像按总分排座次最后挑最高分的绑定。这套机制在K8s里叫Scheduling Framework由一串可插拔的扩展点组成。这篇文章讲透调度流程、预选和优选的核心策略以及怎么写自定义调度插件比如让GPU Pod只去有GPU的机器。第026篇我们聊过调度的婚介所比喻这篇是那个比喻的源码级展开。一、调度流程总览1.1 两阶段预选 优选【Scheduler 调度一个Pod的全流程】 Pod 创建 → 状态 Pending (没Node) │ ▼ ┌────────────────────────────────────────────┐ │ 阶段1: 预选 (Filter / Predicates) │ │ 哪些Node有资格? │ │ • 资源够吗?(CPU/内存) │ │ • 有污点不匹配吗? │ │ • 端口冲突吗? │ │ • 亲和性满足吗? │ │ → 过滤出合格Node列表 │ └────────────────────────────────────────────┘ │ 合格列表 ▼ ┌────────────────────────────────────────────┐ │ 阶段2: 优选 (Score / Priorities) │ │ 合格Node里谁最合适? │ │ • 哪个Node剩余资源多? │ │ • 哪个Node上同类Pod少?(打散) │ │ • 哪个Node离数据近? │ │ → 每个Node打0-100分加权求和 │ └────────────────────────────────────────────┘ │ 最高分Node ▼ ┌────────────────────────────────────────────┐ │ 阶段3: 绑定 (Bind) │ │ 写 Pod.spec.nodeName 选中的Node │ │ → 状态变 Boundkubelet接手起容器 │ └────────────────────────────────────────────┘要点预选是排除法先砍掉不合格优选是选拔法在合格里挑最好。如果预选后一个Node都不剩Pod就一直Pending——这时候就该看调度失败事件第069篇Event机制、第084篇排障会讲。这个先过滤再打分的思路和高考先过线再排名一模一样。二、Scheduling Framework2.1 扩展点一览K8s v1.19的调度器是插件化的由一串扩展点组成【Scheduling Framework 扩展点(调度流水线)】 QueueSort → 决定Pod出队顺序(谁先调度) │ ▼ PreFilter → 预选前的准备工作(预计算) │ ▼ Filter → ★预选(核心!) 返回true/false │ (插件: NodeUnschedulable/PodFitsResources/ │ NodeAffinity/TaintToleration/... ) ▼ PostFilter→ 预选全失败时的补救(如抢占Preemption) │ ▼ Score → ★优选(核心!) 给Node打0-100分 │ (插件: LeastAllocated/NodeAffinity/ │ InterPodAffinity/ImageLocality/... ) ▼ Reserve → 预留资源(防止并发调度抢同一Node) │ ▼ Permit → 允许/拒绝/等待(可延迟绑定) │ ▼ PreBind → 绑定前准备(如准备网络/卷) │ ▼ Bind → ★真正写 nodeName │ ▼ PostBind → 绑定后清理2.2 关键插件说明扩展点插件名作用FilterPodFitsResourcesPod资源请求 ≤ Node可分配量FilterNodeUnschedulableNode没被标记为不可调度FilterTaintTolerationPod能容忍Node的污点FilterNodeAffinity满足节点亲和性FilterInterPodAffinity满足Pod间亲和/反亲和ScoreLeastAllocinated剩余资源多的Node高分ScoreBalancedAllocation资源分配均衡的Node高分ScoreInterPodAffinity满足亲和打散的Node高分ScoreImageLocality已有镜像的Node高分(省拉取)三、预选策略详解3.1 常见的一票否决【预选 每个Filter都是一票否决】 Node A 资源够 没污点 端口不冲突 → 合格 ✅ Node B 资源不够 → 直接淘汰 ❌ (其他条件再好也没用) 核心预选条件 • PodFitsResources: requested CPU/Mem ≤ allocatable • PodFitsHost: Pod指定了nodeName/nodeSelector要匹配 • PodFitsHostPorts: Node上该hostPort没被占 • NoDiskConflict: 挂载的卷不冲突 • MatchNodeSelector: 匹配nodeSelector • CheckServiceAffinity: 满足Service的亲和 • PodToleratesNodeTaints: 容忍Node污点# 看调度失败原因(预选没过)kubectl describe pod my-pod# Events:# Warning FailedScheduling 0/3 nodes are available:# 1 node(s) had untolerated taint,# 2 node(s) didnt match PodFitsResources (insufficient cpu)# ↑ 直接告诉你哪个预选条件挂了四、优选策略详解4.1 打分求和【优选 多个Score插件加权求和】 对每个合格Node每个Score插件给0-100分 Node A: LeastAllocated80, Balanced60, ImageLocality40 Node B: LeastAllocated50, Balanced70, ImageLocality90 加权求和(有默认权重): Node A 80*w1 60*w2 40*w3 总分X Node B 50*w1 70*w2 90*w3 总分Y 选总分最高的 → 如果并列随机挑一个(防脑裂)4.2 两个最常用的优选【LeastAllocated vs BalancedAllocation】 LeastAllocated (剩余越多分越高): 目的: 把Pod分散到不同Node避免单Node过载 适合: 一般业务追求打散 BalancedAllocation (各资源比例均衡分越高): 目的: 避免CPU用光但内存闲着(或反过来) 适合: 混合负载追求资源利用率均衡 实际是两者配合先用LeastAllocated打散 再用BalancedAllocation避免资源倾斜五、自定义调度插件5.1 实战GPU Pod只去GPU节点// 自定义Score插件(伪代码): GPU Pod优先调度到有GPU的NodetypeGPUScorePluginstruct{}func(p*GPUScorePlugin)Score(ctx,cycleState,pod,node)(int64,*Status){nodeHasGPU:node.Labels[accelerator]nvidia-tesla-v100podNeedsGPU:pod.Spec.Resources.Limits[nvidia.com/gpu]0ifpodNeedsGPUnodeHasGPU{return100,nil// 完美匹配满分}ifpodNeedsGPU!nodeHasGPU{return0,nil// 需要GPU但没GPU0分(自然被淘汰)}return50,nil// 不需要GPU普通分}// 注册为Score插件 → 编译进自定义调度器或用调度器扩展# 或者用现成的: 直接给GPU Node打污点NodeAffinity# 更简单不用写代码(见第027/028篇)kubectl labelnodegpu-node-1acceleratornvidia-tesla-v100 kubectl taint nodes gpu-node-1gputrue:NoSchedule要点大部分自定义调度需求其实用NodeAffinityTaint/Toleration就能搞定见第027/028篇不用写插件。真正需要写调度插件的是打分逻辑特殊的场景比如考虑实时电价、考虑数据局部性。Scheduling Framework的插件化设计让扩展调度变得整洁——你只实现关心的扩展点其他用默认的。本篇小结Scheduler用预选优选两阶段给Pod选Node预选是Filter插件的一票否决资源够吗、污点容忍吗、端口冲突吗优选是Score插件加权打分剩余资源多、分配均衡、镜像就近的Node高分最后Bind写nodeName。这套流程封装在Scheduling Framework里由QueueSort→Filter→Score→Reserve→Permit→Bind等扩展点串成流水线。简单调度需求用AffinityTaint就够了复杂打分逻辑才需要写自定义插件。下篇讲kubelet——Node上真正起容器的全能管家。上一篇【第63篇】Informer机制——K8s高性能事件驱动的核心没有它控制器早累死了下一篇【第65篇】kubelet深度解析——节点上的全能管家

相关新闻

【Kubernetes从入门到精通】第63篇:Informer机制——K8s高性能事件驱动的核心,没有它控制器早累死了

【Kubernetes从入门到精通】第63篇:Informer机制——K8s高性能事件驱动的核心,没有它控制器早累死了

上一篇【第62篇】Controller Manager——K8s的"自动驾驶仪" 下一篇【第64篇】Scheduler深度解析——Pod调度算法的"高考阅卷" 摘要 上篇我们讲了控制器的"协调循环",提到它靠Informer第一时间知道资源变了。但Informer到底怎么做到的…

2026/8/22 9:07:03 阅读更多 →
项目经理的职业跃迁:从“将才”到“帅才”的破局之路

项目经理的职业跃迁:从“将才”到“帅才”的破局之路

摘要: 本文系统阐述了项目经理向项目总监、项目群经理、PMO负责人等中层管理岗位跃迁所需的系统性能力升级,涵盖理论视野、业务深度、人际关系与情商、心智模型四大维度。文章指出,这一跃迁是从“将才”到“帅才”的身份质变,并提…

2026/8/22 9:03:07 阅读更多 →
14.6万条假参考文献:AI正在污染学术知识基础设施

14.6万条假参考文献:AI正在污染学术知识基础设施

如果论文里引用的文献根本不存在,那这篇论文还能算"学术成果"吗? 一、一个令人不安的数字 2026年7月,康奈尔大学的一个研究团队发表了一项分析——他们研究了大约250万篇论文、1.11亿条参考文献后,得出了一个令人不安…

2026/8/22 9:14:59 阅读更多 →

最新新闻

Python异常值处理实战:从IQR、Z-Score到高维检测算法

Python异常值处理实战:从IQR、Z-Score到高维检测算法

1. 从美赛C题到日常分析:为什么异常值处理是数据工作的“必修课”去年带队参加美赛,C题的数据集一打开,我就知道这又是一场硬仗。题目是关于某个复杂系统的评估,数据量不小,但更棘手的是,那些散落在各处的异…

2026/8/22 19:23:43 阅读更多 →
基于Python+Hadoop的大学生消费行为大数据分析系统的设计与实现毕业设计项目源码

基于Python+Hadoop的大学生消费行为大数据分析系统的设计与实现毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/22 19:23:43 阅读更多 →
OpenSpeedy:免费游戏变速工具的完整上手指南

OpenSpeedy:免费游戏变速工具的完整上手指南

OpenSpeedy:免费游戏变速工具的完整上手指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 把过场动画压到一半长度、把跑图时间砍掉大半,OpenSpeedy…

2026/8/22 19:23:43 阅读更多 →
基于YOLO+AI辅助舌苔疾病诊断系统的设计与实现毕业设计项目源码

基于YOLO+AI辅助舌苔疾病诊断系统的设计与实现毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/22 19:23:43 阅读更多 →
设计模式在生产环境中的实际运用的安全检查

设计模式在生产环境中的实际运用的安全检查

设计模式在生产环境中的实际运用的安全检查 设计模式能让安全检查的职责更清楚,但不能天然构成安全边界。真正的防护还取决于身份认证、最小权限、密钥管理和审计是否到位。 无论是防范 SQL 注入、OWASP Top 10 的越权攻击(BOLA/BFLA)&#x…

2026/8/22 19:23:43 阅读更多 →
大模型量化实战:从13GB到4GB,手把手压缩LLaMA医学模型

大模型量化实战:从13GB到4GB,手把手压缩LLaMA医学模型

1. 项目概述:为什么我们要对LLaMA模型“瘦身”?最近在折腾大语言模型本地部署的朋友,估计对“open_llama_7b_v2_med_instruct”这个名字不陌生。这是一个基于Meta LLaMA架构、拥有70亿参数、经过医学领域指令微调的模型。它的能力在特定垂直领…

2026/8/22 19:22:43 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →