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. Win10上的Docker应用:Docker-compose(容器编排)

    阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) 前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示 ...

  2. nginx访问url内容过滤

    当访问的url中含有/%df时返回404 location / { if ($request_uri ~* "/%df") { # return 200 "error&q ...

  3. 关于python Tk中实时的输出.

    源码如下: import time from Tkinter import * def run(): while True: txt.insert(END,'...') print '...' tim ...

  4. [Algorithm] 350. Intersection of Two Arrays II

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  5. (尚033)Vue_案例_slot(组件间的通信4:slot)

    1.组件间的通信4:slot(slot:插槽,就是一个占位) slot用于标签反复使用很多次 1.1理解 此方式用于父组件向子组件传递标签数据, 其他为数据通信 外面组件向里面组件传递标签进去,直接拿 ...

  6. ent facebook 开源的golang orm 框架

    ent 是facebook 开源的golang orm 框架,简单强大,具有提下特性 schema 即代码 方便的图遍历 静态类型以及显示api 多种存储引擎支持(当前是mysql,sqlite,以及 ...

  7. bzoj4066: 简单题 K-Dtree

    bzoj4066: 简单题 链接 bzoj 思路 强制在线.k-dtree. 卡常啊.空间开1e6就T了. 代码 #include <bits/stdc++.h> #define my_m ...

  8. 洛谷P4170 [CQOI2007]涂色题解

    废话: 这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的 现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊, 当时感觉自己好厉害贪心都能想出来 差点就 ...

  9. Fiborial 题解——2019.10.14

    一看到这个题 就感觉...cao,, 什么东西...??! 然后就开始暴力求Fn 然鹅我并不会写高精(我太菜了) 只能求到大概10左右 在吧Fn给质因数分解 求出其因子个数 妄图找到什么有关的规律 但 ...

  10. 修改git 的远程URL

    git remote set-url origin ssh://git@gitlab.tian-wang.com:8022/test/api-automation.git