Kubernetes--Scheduler原理

 Kubernetes Scheduler是负责Pod调度的进程(组件),随着Kubernetes功能的不断增强和完善,Pod调度也变得越来越复杂。Kubernetes Scheduler内部实现机制也不断优化,从最初的两阶段调度机制(Predicates&Priorities)发展到后来的升级版调度框架,以满足负责的调度场景。

一、Scheduler调度流程

    Kubernetes Scheduler在整个系统中承担了“承上启下”的重要功能,“承上”是指它负责接收Controller Manager创建新的Pod,为其安排一个目标Node;“启下”是指安置工作完成后,目标Node上的kubelet服务进程接管后续工作,负责Pod生命周期中的“下半生”。

    Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。在整个调度过程中涉及三个对象,分别是待调度Pod列表、可用Node列表以及调度算法和策略。就是通过调度算法和调度策略将待调度Pod列表中的每个Pod都从Node列表中选择一个最合适的Node。

    目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件,随后获取对应的Pod清单,下载Image镜像并启动容器。

Scheduler只与API Server交互,其输入和输出如下:

  • 输入:待调度的Pod和全部计算节点的信息
  • 输出:目标Pod要”安家“的最优节点(或者暂时不存在)。

   旧版本的Kubernetes Scheduler的调度总体包括两个阶段:过滤(Filtering)+打分(Scoring),随后就是绑定目标节点,完成调度。

  1. 过滤阶段,遍历所有目标Node,删选出符合要求的候选节点。在此阶段,Scheduler将所有不符合的Node过滤,只留下符合条件的候选节点。具体实现通过一系列的Filter对每个Node进行筛选,筛选完成后通常会有多个节点供调度,从而进入打分阶段;如果结果为空,则表示当前还没有符合条件的Node节点,Pod会维持在Pending状态。
  2. 打分阶段,在过滤阶段的基础上,采用优选策略(xxx Priorities)计算出每个候选节点的积分,积分最高者胜出,因为积分最高者表示最佳候选人。挑选最佳节点后,Scheduler会把目标Pod安置次节点上,调度完成。

在过滤阶段Predicates是一系列过滤器,每种过滤器都实现一种节点特征的监测。比如磁盘、主机、节点上的可用端口、节点标签、CPU和内存资源、服务亲和性。

在打分阶段Priorities则用来对满足条件的Node节点进行打分,常见的Priorities包含LeastRequestedPriority(选出资源消耗最小的节点)、BalanceResourceAllocation(选出资源使用率最均衡的节点)。将 Predicates和Priorities合并为Kubernetes Scheduling Policies。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值