0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Kube-scheduler调度器内部流转过程

阿铭linux 来源:阿铭linux 2023-05-06 09:14 次阅读

K8S调度器Kube-schduler的主要作用是将新创建的Pod调度到集群中的合适节点上运行。kube-scheduler的调度算法非常灵活,可以根据不同的需求进行自定义配置,比如资源限制、亲和性和反亲和性等。 kube-scheduler的工作原理

监听API Server:kube-scheduler会监听API Server上的Pod对象,以获取需要被调度的Pod信息。它会通过API Server提供的REST API接口获取Pod的信息,例如Pod的标签、资源需求等信息。

筛选可用节点:kube-scheduler会根据Pod的资源需求和约束条件(例如Pod需要的特定节点标签)筛选出可用的Node节点。它会从所有注册到集群中的Node节点中选择符合条件的节点。

计算分值:kube-scheduler会为每个可用的节点计算一个分值,以决定哪个节点是最合适的。分值的计算方式可以通过调度算法来指定,例如默认的算法是将节点资源利用率和距离Pod的网络延迟等因素纳入考虑。

选择节点:kube-scheduler会选择分值最高的节点作为最终的调度目标,并将Pod绑定到该节点上。如果有多个节点得分相等,kube-scheduler会随机选择一个节点。

更新API Server:kube-scheduler会更新API Server上的Pod对象,将选定的Node节点信息写入Pod对象的spec字段中,然后通知Kubelet将Pod绑定到该节点上并启动容器。

Kube-scheduler调度器内部流转过程

b72cd95c-eb92-11ed-90ce-dac502259ad0.png

Scheduler 通过注册 client-go 的 informer 的 handler 方法监听 api-server 的 pod 和 node 变更事件,从而实现将 pod 的信息更新 scheduler 的 activeQ,podbackoffQ,unschedulableQ 三个队列中。

带调度的 pod 会进入到 activeQ 的调度队列中,activeQ 是一个维护着 pod 优先级的堆结构,调度器在调度循环中每次从堆中取出优先级最高的 pod 进行调度。

取出的待调度 pod 会经过调度器的一系列调度算法找到合适的 node 节点进行绑定。如果调度算法判定没有适合的节点,会将 pod 更新为不可调度状态,并扔进 unschedulable 的队列中。

调度器在执行绑定操作的时候是一个异步过程,调度器会先在缓存中创建一个和原来 pod 一样的 assume pod 对象用模拟完成节点的绑定,如将 assume pod 的 nodename 设置成绑定节点名称,同时通过异步执行绑定指令操作。

在 pod 和 node 绑定前,scheduler需要确保 volume 已经完成绑定操作,确认完所有绑定前准备工作,scheduler 会向 api-server 发送一个 bind 对象,对应节点的 kubelet 将待绑定的pod在节点运行起来。

为节点计算分值 节点分值计算是通过调度器算法实现的,而不是固定的。默认情况下,kube-scheduler采用的是DefaultPreemption算法,其计算分值的方式包括以下几个方面:

节点的资源利用率 kube-scheduler会考虑每个节点的CPU和内存资源利用率,将其纳入节点分值的计算中。资源利用率越低的节点得分越高。

节点上的Pod数目 kube-scheduler会考虑每个节点上已经存在的Pod数目,将其纳入节点分值的计算中。如果节点上已经有大量的Pod,新的Pod可能会导致资源竞争和拥堵,因此节点得分会相应降低。

Pod与节点的亲和性和互斥性 kube-scheduler会考虑Pod与节点的亲和性和互斥性,将其纳入节点分值的计算中。如果Pod与节点存在亲和性,例如Pod需要特定的节点标签或节点与Pod在同一区域,节点得分会相应提高。如果Pod与节点存在互斥性,例如Pod不能与其他特定的Pod共存于同一节点,节点得分会相应降低。

节点之间的网络延迟 kube-scheduler会考虑节点之间的网络延迟,将其纳入节点分值的计算中。如果节点之间的网络延迟较低,节点得分会相应提高。

Pod的优先级 kube-scheduler会考虑Pod的优先级,将其纳入节点分值的计算中。如果Pod具有高优先级,例如是关键业务的部分,节点得分会相应提高。

这些因素的相对权重可以通过kube-scheduler的命令行参数或者调度器配置文件进行调整。需要注意的是,kube-scheduler的算法是可扩展的,可以根据需要编写自定义的调度算法来计算节点分值。 调度策略

默认调度策略(DefaultPreemption):默认调度策略是kube-scheduler的默认策略,其基本原则是为Pod选择一个未满足需求的最小代价节点。如果无法找到这样的节点,就会考虑使用预选,即将一些已经调度的Pod驱逐出去来为新的Pod腾出空间。

带优先级的调度策略(Priority):带优先级的调度策略基于Pod的优先级对节点进行排序,优先选择优先级高的Pod。该策略可以通过设置Pod的PriorityClass来实现。

节点亲和性调度策略(NodeAffinity):节点亲和性调度策略基于节点标签或其他条件,选择与Pod需要的条件相匹配的节点。这可以通过在Pod定义中使用NodeAffinity配置实现。

Pod 亲和性调度策略(PodAffinity):Pod 亲和性调度策略根据Pod的标签和其他条件,选择与Pod相似的其他Pod所在的节点。这可以通过在Pod定义中使用PodAffinity配置实现。

Pod 互斥性调度策略(PodAntiAffinity):Pod 互斥性调度策略选择与Pod不相似的其他Pod所在的节点,以避免同一节点上运行相似的Pod。这可以通过在Pod定义中使用PodAntiAffinity配置实现。

资源限制调度策略(ResourceLimits):资源限制调度策略选择可用资源最多的节点,以满足Pod的资源需求。这可以通过在Pod定义中使用ResourceLimits配置实现。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9358
  • API接口
    +关注

    关注

    1

    文章

    79

    浏览量

    10315
  • 调度器
    +关注

    关注

    0

    文章

    95

    浏览量

    5161

原文标题:这些Kubernetes调度知识点你知道吗

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    leader选举在kubernetes controller中是如何实现的

    在 Kubernetes 的 kube-controller-manager , kube-scheduler, 以及使用 Operator 的底层实现 controller-rumtime 都支持高可用系统中的 leader 选举。
    的头像 发表于 07-21 10:03 1345次阅读

    存储协议栈的Error流转过程分析

    的是如何使用NvM存储服务,以及使用过程中出现Error后如何快速定位和分析问题。NvM服务的使用可以参考 >一文,本文就来自低向上的分析AUTOSAR架构下存储协议栈的Error处理机制,希望能帮助
    的头像 发表于 09-04 09:53 879次阅读
    存储协议栈的Error<b class='flag-5'>流转过程</b>分析

    用于vGPU的GPU调度程序

    / libnvidia-vgpu进程)?十多年来,有更复杂的调度程序。如果你查看网络硬件,你可以看到更多高级调度程序(https://en.wikipedia.org/wiki/Network_scheduler
    发表于 09-11 16:37

    调度运行的过程是怎样的? 它的应用有哪些?

    调度是由哪几部分组成的?调度运行的过程是怎样的?调度
    发表于 04-27 07:12

    电机实际的运转过程是怎样的?

    什么是步进电机?具有哪些优缺点?步进电机的工作原理是什么?有哪些种类?电机实际的运转过程是怎样的?
    发表于 10-19 09:08

    介绍一下RT-Thread实时操作系统调度的相关接口

    调度初始化在系统启动时需要执行调度的初始化,以初始化系统调度器用到的一些全局变量。调度
    发表于 08-24 16:18

    关于RTT中scheduler线程调度的学习

    RTT中的scheduler并不是以一个类的形式存在,更类似传统的过程编程。个人认为这一点在编程风格上和其他的组件是不够统一的。 下面引用一段RTT官网上,关于RTT线程调度的介绍。 RTT中提
    发表于 04-27 14:19

    英创信息技术Linux系统调度简介

    系统资源的使用,提高系统使用效率。 Linux内核中实现了Scheduler Classes,来实现多个调度类(Scheduler class)的协同工作,每个不同的调度类对应不同的类
    的头像 发表于 02-05 10:31 1026次阅读
    英创信息技术Linux系统<b class='flag-5'>调度</b>简介

    从零开始入门 K8s | 调度器的调度流程和算法介绍

    等,并介绍了两种方式用于实现自定义调度能力。 调度流程 调度流程概览 Kubernetes 作为当下最主流的容器自动化运维平台,作为 K8s 的容器编排的核心组件 kube-scheduler
    发表于 03-09 17:04 965次阅读

    基于Web的Kubernetes scheduler模拟器

    ./oschina_soft/kube-scheduler-simulator.zip
    发表于 05-13 09:54 1次下载
    基于Web的Kubernetes <b class='flag-5'>scheduler</b>模拟器

    Kube-capacity CLI的安装与用法

    使用 Kube-capacity CLI 查看 Kubernetes 资源请求、限制和利用率
    的头像 发表于 07-03 15:30 790次阅读

    Kube Multisensor NodeMCU模块板

    电子发烧友网站提供《Kube Multisensor NodeMCU模块板.zip》资料免费下载
    发表于 07-18 16:37 0次下载
    <b class='flag-5'>Kube</b> Multisensor NodeMCU模块板

    容器进程调度时是该优先考虑CPU资源还是内存资源

    当然实际中 k8s 的调度策略不是这么简单的,系统默认的 kube-scheduler 调度器外还有直接指定Node主机名、节点亲和性、Pod亲和性、nodeSelector 等等调度
    的头像 发表于 08-16 18:20 1062次阅读

    kube-scheduler v1.21 的调度流程分析

    Scheduler 在整个系统中承担了“承上启下”的重要功能。“承上”是指它负责接受 Controller Manager 创建的新 Pod,为其安排 Node;“启下”是指安置工作完成后,目标
    的头像 发表于 08-22 09:15 847次阅读

    NVIDIA Triton 系列文章(11):模型类别与调度器-1

    在 Triton 推理服务器的使用中,模型(model)类别与调度器(scheduler)、批量处理器(batcher)类型的搭配,是整个管理机制中最重要的环节,三者之间根据实际计算资源与使用场
    的头像 发表于 01-11 06:35 526次阅读