一、概述

  调度器是kubernetes中独特而又重要的一个模块,独特是因为scheduler是唯一一个以plugin形式存在的组件,重要是因为kubernetes中最重要的基础单元pod的部署是通过scheduler完成的。
  正常情况下,scheduler为pod通过算法筛选合适的node,然后绑定pod与node关系,而相应的node上的kubelet在完成绑定之后才会启动pod,此过程中,scheduler的功能很明确,就是筛选出合适的node,如果找到了就绑定node信息,如果没有找到,pod则会一直处于pending状态,一旦一个合适的Node接入到kubernetes cluster,调度器会将pod调度到该Node上。

  我们知道在k8s中有个非常主要的对象叫做Replication Controller,简称RC.在部署pod时候,通常是通过RC指定pod类型以及副本数量来实现,而并非是部署单pod。为什么需要借助RC来部署呢?首先就是快速方便,只需指定副本数量即可,RC可以部署指定数量的副本pod,另外就是一旦某个pod fail掉,RC可以通过调度器再次拉起与失败个数相同的副本以确保running的副本个数与指定的个数一致。

  这里我们可能有个疑问,既然调度器的目的是为pod筛选合适的node,那么在pod中能否指定node呢? 答案是可以的,如果在pod中指定node,则不会经过调度器,node上的kubelet会拉起pod。这时候问题又来了,没有经过调度器的算法筛选,这个由用户指定的node如果不满足Pod的要求,比如资源要求,那又会出现什么样的情况呢? 答案其实很简单,这个pod会被kubelet设置成fail状态,那么这么说来,kubelet会像scheduler一样对node做一些判断,以确保pod适合当前的node。下面我们会分析这个判断的过程。

二、scheduler模块分析

  调度的过程分两步,首先是做筛选(predict),其次是排序(priorities)。筛选的过程是决定是否,排序的过程是区分优劣。算法是调度的依据,这个算法其中的一部分-GeneralPredicates也会被kubelet用到,这个在第二节中提到过。算法加载的过程比较巧妙,是通过包的引用来作为算法加载的入口的:

  

k8s之scheduler的更多相关文章

  1. k8s集群---apiserver,controller-manager,scheduler部署

    #证书自签名脚本 root@k8s-master: ~/k8s/k8s-cert :: $ cat k8s-cert.sh cat > ca-config.json <<EOF { ...

  2. k8s集群之master节点部署

    apiserver的部署 api-server的部署脚本 [root@mast-1 k8s]# cat apiserver.sh #!/bin/bash MASTER_ADDRESS=$1 主节点IP ...

  3. ASP.NET Core on K8S深入学习(3)Deployment

    上一篇<部署过程解析与安装Dashboard>中我们了解K8S的部署过程,这一篇我们来了解一下K8S为我们提供的几种应用运行方式:Deployment.DaemonSet与Job,它们是K ...

  4. K8S - 容器编排工具Kubernetes简介

    1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...

  5. python安装二进制k8s 1.11.0 一个master、一个node 查看node节点是主机名---apiserver无法启动,后来改了脚本应该可以

    一.脚本说明: 本实验中master.node.etcd都是单体. 安装顺序为:先安装test1节点主要组件,然后开始安装test2节点,最后回头把test1节点加入集群中,这样做目的是理解以后扩容都 ...

  6. K8s二进制部署单节点 master组件 node组件 ——头悬梁

    K8s二进制部署单节点   master组件 node组件   --头悬梁 1.master组件部署 2.node   组件部署 k8s集群搭建: etcd集群 flannel网络插件 搭建maste ...

  7. k8s的部署

    一.k8s的二进制部署 1.环境准备: IP                               节点 172.16.10.1         k8s-master01 172.16.10.3 ...

  8. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

  9. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

随机推荐

  1. 宣布正式发布 Windows Azure 移动服务、网站及持续的服务创新

    我们努力创新,向开发人员提供多样化平台以构建最好的云应用程序并在第一时间提供给世界各地的客户.许多新应用程序都属于"现代化应用程序",即始终基于 Web,且可以通过各种移动设备进行 ...

  2. nova availability zone

    find a bug: at first there is only one zone. create aggregate host1 in zone1 create aggregate host1 ...

  3. Python字符串与数字拼接

    Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,而是直接报错.要解决这个方法只有提前把int转成string,然后再拼接字符串即可. 如代码: 1 2 3 4 5 # co ...

  4. KVC在定义Model类中的妙用

    @我们应用程序使用MVC架构的话,对于处理数据类,我们会单独的定义Model类,在里面为要展示的属性进行初始化赋值,一般採用的方法是通过定义相应的属性,挨个赋值.如今我要介绍的就是通过KVC,key- ...

  5. ResultSet与Result

    微软的.NET平台上面的数据访问有一个特点,就是数据查询的结果,可以放在内存中,以XML格式进行描述,不需要一直与数据库保持在线连接,用DataSet + Data Adapter来实现! 而在JDB ...

  6. 在 PL/SQL Developer 中执行SQL文件的方法

    打开 command Window SQL> @'D:\My Documents\Downloads\bde_chk_cbo.sql'; 整个路径及文件两边要有单引号哦!

  7. MySql5.6Window超详细安装教程(msi 格式的安装)

    转自:红黑联盟  http://www.2cto.com/database/201506/409821.html 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ ...

  8. Git 系列(五):三个 Git 图形化工具

    在本文里,我们来了解几个能帮你在日常工作中舒服地用上 Git 的工具. 我是在这许多漂亮界面出来之前学习的 Git,而且我的日常工作经常是基于字符界面的,所以 Git 本身自带的大部分功能已经足够我用 ...

  9. java InputStream使用

    InputStream读取流有三个方法,分别为read(),read(byte[] b),read(byte[] b, int off, int len).其中read()方法是一次读取一个字节,效率 ...

  10. 如何正确理解正则表达式中的分隔符 \b

    前言:好久不见,博客园. 最近在学习研究regex,其中有个特迷惑自己的知识点是分隔符 ( word boundary) [\b] (注:为了方便,后文都以[]来包含字符,并不是reg规则里面的[] ...