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

改成数学式表示:
在这里插入图片描述


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值