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. FFLIB

    用于分布式程序的c++类库,封装了socket.rpc.lua.CQRS框架.算法等组件,适于SNS.WEBGAME.MMO后台程序, about C++,linux https://github.c ...

  2. “为了交项目干杯”对“那周余嘉熊掌将得队”、“男上加男,强人所男”的Beta产品测试报告

    "为了交项目干杯"对"那周余嘉熊掌将得队"."男上加男,强人所男"的Beta产品测试报告 格式描述 课程名称:软件工程1916|W(福州大学 ...

  3. IDEA创建Mybatis的配置文件---sqlMapConfig.xml

    Mybatis的配置文件不像Spring的配置文件,在Maven当中添加过依赖之后就可以在下面这个地方打开,需要自己去手动去编写配置文件,但是自己编写的话会记不住要引入的DTD,所以就需要自己创建一个 ...

  4. BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分

    code: #include <bits/stdc++.h> #define N 100060 #define M 1000000 #define lson x<<1 #def ...

  5. vue中computed和watch的区别,以及适用场景

    computed:通过属性计算而得来的属性 1.computed内部的函数在调用时不加(). 2.computed是依赖vm中data的属性变化而变化的,也就是说,当data中的属性发生改变的时候,当 ...

  6. 洛谷 P1144 最短路计数 题解

    P1144 最短路计数 题目描述 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 输入格式 第一行包含\(2\)个正 ...

  7. VS设置自动压缩CSS

  8. 「NOIP2016」换教室

    传送门 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $ 2n $ 节课程安排在 $ n $ 个时间段上.在第 $ i ...

  9. SpringCloud:搭建基于Gateway的微服务网关(二)

    0.代码 https://github.com/fengdaizang/OpenAPI 1.引入相关依赖 pom文件如下: <?xml version="1.0" encod ...

  10. java 备用待迁移

    Java基础 2018年如何快速学Java 泛型就这么简单 注解就这么简单 Druid数据库连接池就是这么简单 Object对象你真理解了吗? JDK10都发布了,nio你了解多少? COW奶牛!Co ...