K8S的Scheduler 原理
目录
1. 预选策略(xxx Predicates)
目的:筛选出符合要求的节点
1.1 NoDiskConflict
目的:判断备选pod中 gccPersistentDisk等和备选节点已有Pod是否冲突
1.2 PodFitsResources
目的:节点资源是否满足pod需求
1.3 PodSelectorMatches
目的:判断备选节点是否包含(Pod标签选择器的)指定标签
1.4 PodFitsHost
目的:判断Pod指定节点名(spec.nodeName)指定节点是否和备选节点一致
1.5 CheckNodeLaberPresence
目的:如果指定该策略,Scheduler将注册该策略。其用于判断策略列出的标签在备选节点中存在时,是否选择该节点。
流程如下:
- 读取备选节点标签列表
- 根据策略判断:
可理解为presence:true为白名单,presence:false为黑名单
1.6 CheckServiceAffinity
如果用户指定该策略,则会判断Pod的亲和度(详情见文集《k8s-进阶》中《pod的亲和度调度》一片)
1.7 PodFitsPorts
目的:判断端口是否被调用。
2. 优选策略(xxx Priority)
目的:计算每个候选节点的积分已得到最高者。(调度的最终判断)
2.1 LeastRequestedPriority
按资源消耗给节点打分(小的分高)
计分规则大致如下:
score=int(((nodeCpuCapacity-totalMilliCPU)\*10)/nodeCpuCapacity+((nodeMemoryCapacity-totalMemory)\*10)/NodeCpuMemory)/2)
参数说明:
- nodeCpuCapacity:节点CPU数。
- nodeMemoryCapacity:节点内存大小。
- totalMilliCPU:所有备选节点上运行的Pod和备选Pod的CPU占用量
- totalMemory:所以备选节点上运行的Pod和备选Pod的CPU占用量
改成数学式表示:
2.2 CalculateNodeLabelPriority
目的:如果用户指定该策略,Scheduler将注册该策略。其用于判断是否给该节点加分。
判断策略如下:
2.3 BalancedResource
目的:按各项资源使用率均衡度打分(均衡分高)
计算规则大致如下:
score=int(10-math.abs(totalMilliCPU/nodeCpuCapacity-totalMemory/nodeMemoryCapacity)\*10)
参数同2.1
改成数学式表示:
合集:
《kubernetes》
, 第一章 原理和对象
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~