zoukankan      html  css  js  c++  java
  • kubernetes之Scheduler原理分析

    scheduler在整个系统承担了承上启下的重要功能

    承上值负责接受Controller Manager创建新的pod,安排目标Node

    旗下指安置工作完成后,目标Node上的kubelet服务进程接管后续工作,负责pod生命周期下半生。

    kubernetes Scheduler作用是将待调度的pod,按照特定的调度算法和调度策略绑定到集群中合适的Node上,并将绑定信息写入etcd中。整个调度过程涉及三个对象。分别是待调度Pod列表,可用Node列表,以及调度算法和策略。简单地说,就是通过调度算法为待调度pod列表地每个pod从Node里欸报中选择一个最合适的Node

    默认调度流程

    (1)预选调度过程,即遍历所有目标node,筛选出符合要求的候选节点。内置了多种预选策略。

    (2)确定最优节点,在第一步的基础上,采用优选策略计算每个候选节点的积分,分高者胜出。

    Scheduler中可用的预选策略包含:NoDiskConflict,PodFitsResources,PodSelectorMatches,PodFitsHost,CheckNodeLabelPresence,CheckServiceAffinity和PodFitsPorts策略等。其默认的AlgorithmProvider加载的预选策略predicates包括:PodFitsPorts、PodFitsResources、NoDiskConflict、MatchNodeSelector和HostName每个节点只有通过前面提及的5个默认预选策略后,才能初步被选中,进入下一个流程。

    1)NoDiskConflict

    判断备选pod的GCEPersistentDisk或AWSElasticBlockStore和备选的节点中已存在的Pod是否存在冲突。

    读取备选pod的所有Volume信息

    如果Volume是GCEPersistenDisk,将Volume和备选节点上的所有pod每个Volume比较,相同的返回false,表明磁盘冲突。

    如果所有Volume均为发现冲突,返回true。

    2)FodFitsResources

    判断节点的资源是否满足备选pod的需求

    计算pod所有容器的需求资源中和,获取备选节点状态信息,包含资源信息。如果节点资源超过需求资源,返回true。否则返回false。

    3)PodSelectorMatches

    判断备选节点是否包含备选pod的标签选择器指定的标签

    如果pod没有指定spec.nodeSelector标签选择器,返回true

    否则,获取备选节点的标签西悉尼,如果包含pod的标签选择器,返回true,否则返回false

    4)PodFitsHost

    判断备选pod的spec.nodeName域所指定的节点名称和备选节点名称是否一致,如果一致true否则false

    5)CheckNodeLabelPresence

    6)CheckServiceAffinity

    7) PodFitsPorts

    判断备选pod所用端口是否在备选节点中被占用,如果被占用,返回false,否则true

    Scheduler优选策略包括LeastRequestedPriority、CalculateNodeLabelPriority和BalancedResourceAllocation等。

  • 相关阅读:
    阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署
    Spring系列-SpringBoot 学习路径
    想做公众号,总要写点什么--第008期博文
    我关注的那些公众号-第007期博文
    Ruby on Rails,一对多关联(One-to-Many)
    ruby新建web项目步骤,使用mysql数据库
    ruby select 方法,可用于先查询结果后,再次用条件限制
    cron和crontab命令详解 crontab 每分钟、每小时、每天、每周、每月、每年定时执行 crontab每5分钟执行一次
    nginx做rails项目web服务器缓存配置方法
    ruby----%使用法
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/11367793.html
Copyright © 2011-2022 走看看