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等。

kubernetes之Scheduler原理分析的更多相关文章

  1. Kubernetes Job Controller 原理和源码分析(一)

    概述什么是 JobJob 入门示例Job 的 specPod Template并发问题其他属性 概述 Job 是主要的 Kubernetes 原生 Workload 资源之一,是在 Kubernete ...

  2. Kubernetes Job Controller 原理和源码分析(二)

    概述程序入口Job controller 的创建Controller 对象NewController()podControlEventHandlerJob AddFunc DeleteFuncJob ...

  3. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...

  4. Kubernetes学习之原理

    Kubernetes基本概念 一.Label selector在kubernetes中的应用场景 1.kube-controller-manager的replicaSet通过定义的label 来筛选要 ...

  5. Eureka 系列(05)消息广播(上):消息广播原理分析

    Eureka 系列(05)消息广播(上):消息广播原理分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 首先回顾一下客户端服务发现的流程,在上一篇 Eureka 系列( ...

  6. SpringBoot原理分析与配置

    1.1 起步依赖原理分析 1.1.1 分析spring-boot-starter-parent 按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spri ...

  7. 030.Kubernetes核心组件-Scheduler

    一 Scheduler原理 1.1 原理解析 Kubernetes Scheduler是负责Pod调度的重要功能模块,Kubernetes Scheduler在整个系统中承担了"承上启下&q ...

  8. Kubernetes List-Watch 机制原理与实现 - chunked

    概述http chunkedwatch api 概述 Kubernetes 中主要通过 List-Watch 机制实现组件间的异步消息通信,List-Watch 机制的实现原理值得深入分析下 . 在 ...

  9. Kubernetes client-go 源码分析 - Reflector

    概述入口 - Reflector.Run()核心 - Reflector.ListAndWatch()Reflector.watchHandler()NewReflector()小结 概述 源码版本: ...

随机推荐

  1. MyBatis框架之入门(三)

    使用原始dao层进行开发 UserMapper层接口 public interface UserMapper { /** * 通过id查询用户 * @param id * @return */ Use ...

  2. What is the difference between Reactjs and Rxjs?--React is the V (View) in MVC (Model/View/Controller).

    This is really different, React is view library; and Rxjs is reactive programming library for javasc ...

  3. swift与oc的关系

    swift是对oc的扩展 Swift是没有消息机制的Objective-C https://www.oschina.net/translate/inside-swift: swift保持了oc的类结构 ...

  4. 学习:Windows数据类型

    WINDOWS API中出现的常见的数据类型有以下几种: 1.DWORD:DWORD用于表示无符号整型的数据类型,实际名为double word,32位 2.HANDLE:HANDLE为32位的数据类 ...

  5. dotnet core linux 接入支付宝H5支付,提示:System.PlatformNotSupportedException","Message":"'CspParameters' requires Windows Cryptographic API (CAPI), which is not available on this platform.

    用的官方提供的demo,实际上部署后却出现了上图的错误.和技术支持沟通无效后,走上了不归路. 在微软的github dotnet/core开源库提交了issue后,终于获得了解决.附上链接:https ...

  6. OpenCV 学习笔记(11)像素级别指针操作

    //优化两图的连接处,使得拼接自然 void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst) { int start = MIN(c ...

  7. [ARC064F] Rotated Palindromes

    题意 给定一个整数N,请你求出有多少字符集为1到K之间整数的字符串,使得该字符串可以由一个长度为N的回文串循环移位后得到.所谓循环移位,就是把字符串的某个前缀(可以为空)移到字符串末尾,如" ...

  8. nginx unit java 试用

    unit 当前已经支持java了,当时支持基于servlet 的开发模式,以下是一个简单的学习 基于官方的demo 环境准备 docker-compose文件   version: "3&q ...

  9. django的惰性查询

    django中的查询,在写好查询条件之后,在不调用变量的时候,sql是不会执行的,只有在调用变量的时候,才回去执行, 在一次查询之后,会把变量放进内存,下次再使用这个变量的时候就会使用内存汇总的值. ...

  10. 鸿蒙OS

    8月9日,华为消费者业务在其全球开发者大会上正式发布其全新的基于微内核的面向全场景的分布式操作系统——鸿蒙OS(HarmonyOS)! 鸿蒙的定义是基于微内核的全场景分布式操作系统.其中,微内核是技术 ...