k8s中的默认调度器

默认调度器中的调度算法分为预选和优选

预选策略
1.基础的检查项(GeneralPredicates)
PodFitsResources node剩余可分配资源(Allocatable-sum(request))是否足够pod调度
PodFitsHost node的名称是否跟pod的spec.nodeName字段一致
PodFitsHostPorts pod指定的spec.nodePort端口在待考察node上是否已被占用
PodMatchNodeSelector pod的nodeSelector或者nodeAffinity指定的节点是否与待考察节点匹配

2.Volume相关:
NoDiskConflict 待调度pod声明使用的Volume是否与待考察node上的已有pod声明挂载的Volume有冲突(AWS EBS类型的Volume,是不允许被两个Pod同时使用的)
MaxPDVolumeCountPredicate node上某种类型的持久化Volume是不是已经超过了一定数目
VolumeZonePredicate pod声明使用的Volume的Zone(高可用域)标签是否与待考察节点的Zone标签相匹配
VolumeBindingPredicate Pod对应的pvc所绑定的pv的nodeAffinity字段,是否跟某个节点的标签相匹配(LPV的延迟绑定机制)

3.Node相关:
PodToleratesNodeTaints pod是否能够容忍待考察节点的污点
NodeMemoryPressurePredicate 待考察节点的内存是不是已经不够充足

4. Pod相关:
PodAffinityPredicate 检查待调度Pod与Node上的已有Pod之间的亲密(affinity)和反亲密(anti-affinity)关系(pod中配置的spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution属性)

说明
1.当开始调度一个Pod时,Kubernetes调度器会同时启动16个Goroutine,来并发地为集群里的所有Node计算Predicates,最后返回可以运行这个Pod的宿主机列表
2.为每个Node执行Predicates时,调度器会按照固定的顺序来进行检查。这个顺序,是按照Predicates本身的含义来确定的。比如,宿主机相关的Predicates会被放在相对靠前的位置进行检查。要不然的话,在一台资源已经严重不足的宿主机上,上来就开始计算PodAffinityPredicate,是没有实际意义的。

优选策略
LeastRequestedPriority 选择cpu剩余量和memory剩余量的和最多的宿主机
score = (cpu((capacity-sum(requested))10/capacity) + memory((capacity-sum(requested))10/capacity))/2

BalancedResourceAllocation 各种资源分配最均衡的那个节点(避免一个节点上CPU被大量分配、而 Memory 大量剩余)
选择资源Fraction差距最小的节点
Fraction = Pod请求的资源 / 节点上的可用资源
variance = 每两种资源 Fraction 之间的距离
score = 10 - variance(cpuFraction,memoryFraction,volumeFraction)*10

原文地址:https://www.cnblogs.com/orchidzjl/p/12146108.html

时间: 2024-11-01 00:35:39

k8s中的默认调度器的相关文章

[UE4]Child Widget中的事件调度器

在Child Widget中新建事件调度器,就会自动在使用该Child Widget的父级界面的事件列表中自动自动出现.功能十分强大. 原文地址:https://www.cnblogs.com/timy/p/9147633.html

k8s的调度器架构和策略

调度器功能 默认调度器的主要职责,就是为一个新创建出来的Pod寻找一个最合适的节点(Node) 调度器对一个 Pod 调度成功,实际上就是将它的 spec.nodeName 字段填上调度结果的节点名字 预选节点 从集群所有的节点中,根据调度算法挑选出所有可以运行该 Pod 的节点默认调度器会首先调用一组叫作 Predicate 的调度算法,来检查每个Node 优选节点 从预选的结果中,再根据调度算法挑选一个最符合条件的节点作为最终结果.再调用一组叫作 Priority 的调度算法,来给上一步得到

事件调度器及C++中的使用

转自:http://blog.ch-wind.com/ue4-event-dispatcher-and-delegate/ 事件调度器非常的适合在各个蓝图之间实现通信功能. 当前UE4版本4.8.3. 在蓝图中,事件调度器的作用就像是事件的派发器.通过将事件预先的绑定在事件调度器上,可以让系统可以在需要时将事件派发给所有已经绑定的事件. 事件调度器的使用 一个比较常见的使用事件调度器的地方,就是关卡蓝图. 关卡蓝图中的很多物体的Actor及其逻辑,如果要脱离关卡蓝图的话会比较难于使用.因此,可以

Kubernetes 第十七章 调度器

来自: https://www.jianshu.com/p/acb34a1d1b6e Kubenernetes 调度器介绍 Kubernetes 调度器介绍 kube-scheduler是 kubernetes 系统的核心组件之一,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将 Pod 调度到最优的工作节点上面去,从而更加合理.更加充分的利用集群的资源,这也是我们选择使用 kubernetes 一个非常重要的理由.如果一门新的技术不能帮助企业节约成本.提供效率,我相信是很难推进的.

Yarn 调度器Scheduler详解

理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资源的就是Scheduler.其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景.为此,Yarn提供了多种调度器和可配置的策略供我们选择. 一.调度器的选择 在Yarn中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,FairS ched

YARN的capacity调度器主要配置分析

yarn中一个基本的调度单元是队列. yarn的内置调度器: 1.FIFO先进先出,一个的简单调度器,适合低负载集群.2.Capacity调度器,给不同队列(即用户或用户组)分配一个预期最小容量,在每个队列内部用层次化的FIFO来调度多个应用程序.3.Fair公平调度器,针对不同的应用(也可以为用户或用户组),每个应用属于一个队列,主旨是让每个应用分配的资源大体相当.(当然可以设置权重),若是只有一个应用,那集群所有资源都是他的. 适用情况:共享大集群.队列之间有较大差别. capacity调度

MySQL创建事件调度器

MySQL中的事件调度器,可以用来执行定时任务. 一.开启 事件调度默认是关闭的,开启可执行. 查看事件调度器是否开启:     SHOW VARIABLES LIKE 'event_scheduler';   SELECT @@event_scheduler; 开启事件调度器 SET GLOBAL event_scheduler=1; SET GLOBAL event_scheduler=ON; 或者在my.ini文件中加上event_scheduler=1 或者在启动命令后加上"-event

(5)调度器(scheduler)

继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Cocos2d-x暂停时,调度器也会停止.当Cocos2d-x重新开始时,调度器也会自动继续启动. Cocos2d-x封装了一个供各种不同平台使用的调度器,使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止,以及崩溃的风险. 基础用法 游戏中我们经常会随时间的变化而做一些逻辑判断,如碰撞

cocos2d调度器(定时执行某函数)

调度器(scheduler) 继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Cocos2d-x暂停时,调度器也会停止.当Cocos2d-x重新开始时,调度器也会自动继续启动. Cocos2d-x封装了一个供各种不同平台使用的调度器,使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止,以及崩溃的风险. 基础用法 游戏中我们经常会随时间