DatenLord | Rust 实现K8S调度扩展

发布时间:2022-11-27 13:00

背景介绍

K8S调度器(kube-scheduler)是K8S调度pod的控制器,它作为K8S核心组件运行。调度器基于一定的调度策略为pod找到合适的运行节点。

调度流程

K8S调度器调度一个pod时候主要分为三个阶段

  1. 过滤阶段:调用一系列predicate函数或者叫filter函数过滤掉不合适的节点,比如说某些节点上不满足pod声明的运行所需要的资源,如CPU,内存等资源,那么这些节点会在这个阶段被过滤掉。
  2. 打分阶段:调用一系列priority函数或者叫score函数给通过第一步过滤的节点打分排序。比如有三个节点通过了过滤阶段,当三个节点通过资源均衡函数的打分,那么最终剩余CPU,内存等资源更多的节点会获得更高的优先级评分。
  3. 调度阶段:把pod调度到选择优先级最高的节点上

调度过程如下图所示:

DatenLord | Rust 实现K8S调度扩展_第1张图片

调度算法

前文提到,K8S调度器会调用一系列filter函数和priority函数,这些函数是K8S内置的调度算法, K8S会根据默认的调度算法将pod调度到最合适的节点上。filter函数的目的是过滤掉不符合pod要求的节点,通常会有多个节点通过filter阶段,prioriry函数的目的就是在剩下的节点中选出最合适的节点。

我们来介绍一下K8S默认的调度策略有哪些。

filter策略: 

  • PodFitsResources: 这条策略是过滤掉所剩资源不满足pod要求的节点
  • MatchNodeSelector: 这条策略是过滤掉不匹配pod nodeSelector要求的节点
  • PodFitsHostPorts: 这条策略是过滤掉pod声明的HostPort已经被占用的节点
  • 等等

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号