k8s之scheduler
一、概述
调度器是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的更多相关文章
- k8s集群---apiserver,controller-manager,scheduler部署
#证书自签名脚本 root@k8s-master: ~/k8s/k8s-cert :: $ cat k8s-cert.sh cat > ca-config.json <<EOF { ...
- k8s集群之master节点部署
apiserver的部署 api-server的部署脚本 [root@mast-1 k8s]# cat apiserver.sh #!/bin/bash MASTER_ADDRESS=$1 主节点IP ...
- ASP.NET Core on K8S深入学习(3)Deployment
上一篇<部署过程解析与安装Dashboard>中我们了解K8S的部署过程,这一篇我们来了解一下K8S为我们提供的几种应用运行方式:Deployment.DaemonSet与Job,它们是K ...
- K8S - 容器编排工具Kubernetes简介
1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...
- python安装二进制k8s 1.11.0 一个master、一个node 查看node节点是主机名---apiserver无法启动,后来改了脚本应该可以
一.脚本说明: 本实验中master.node.etcd都是单体. 安装顺序为:先安装test1节点主要组件,然后开始安装test2节点,最后回头把test1节点加入集群中,这样做目的是理解以后扩容都 ...
- K8s二进制部署单节点 master组件 node组件 ——头悬梁
K8s二进制部署单节点 master组件 node组件 --头悬梁 1.master组件部署 2.node 组件部署 k8s集群搭建: etcd集群 flannel网络插件 搭建maste ...
- k8s的部署
一.k8s的二进制部署 1.环境准备: IP 节点 172.16.10.1 k8s-master01 172.16.10.3 ...
- 二进制安装部署kubernetes集群---超详细教程
本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...
- Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署
一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...
随机推荐
- android:TextAppearance.Material.Widget.Button.Inverse问题
如果在刚够构建Android Studio项目的时候,运行发现,出现没找到资源的错误!找不到com.android.support/appcompat-v7/23.0.1/res/values-v23 ...
- docker 导入下载模板
<pre name="code" class="ruby">docker:/root# cat centos-6-x86.tar.gz | dock ...
- 配置自己风格的Clang-Format-Xcode
在项目根目录下,创建一个文件.clang-format,使用vim打开并修改. 具体的配置风格可以看这里:http://clang.llvm.org/docs/ClangFormatStyleOpti ...
- Ubuntu12.04下eclipse提示框黑色背景色的修改方法
eclipse提示框的背景颜色使用的是系统的提示框颜色配置,在windows下为黄色,但在Ubuntu12.04(gnome)下却是黑色,造成提示内容很难看清. 在eclipse中我们是无法修改这个颜 ...
- jquery Ztree v3.5 实例2 自定义显示在节点前的图片
显示效果如下: 代码如下: <html> <head><title></title></head> <script type=&quo ...
- asp.net中.ashx文件接参
如果是在解决方案中的Web项目中创建.ashx文件,没有文件头,不能直接读取到html页面传来的参数值. 用context.Request["参数名"]来获取参数值. 用conte ...
- ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]
在Linux中安裝EBS R12後, EBS關閉與啟動的程序為: 1. 關閉EBS - 先關閉Applications Server $ cd /d01/oracle/VIS/inst/apps/V ...
- 剑指offer第五题
输入一个链表,从尾到头打印链表每个节点的值. 但是 根据往常的经验 如果if里面有return了 就不要写else了 import java.util.ArrayList; import java ...
- ecshop二次开发之购物车常见问题
1.ecshop二次开发中保存注册用户购物车数据解决方法:ecshop购物车是数据库中cart表来支持的,在ecshop表中rec_id是编号,user_id是注册用户的id,session_id表示 ...
- python3.5之mysql扩展
最近在学习廖雪峰的python3的教程,这是官方http://www.liaoxuefeng.com/,建议大家想学习python的同学可以去看看,真的是在网上能找到的最好文本教程,没有之一 在廖老实 ...