Scheduler是k8s集群的调度器,主要的任务是把定义好的pod分配到集群节点上

有以下特征:

1  公平   保证每一个节点都能被合理分配资源或者能被分配资源

2  资源高效利用   集群所有资源最大化被利用

3  效率  调度的性能好,能够对大批量pod进行调度

4  灵活  允许用户根据自己的需求控制调取的逻辑

工作原理:

Scheduler是单独运行的程序,启动之后会一直连接API Server,获取值:PodSpec.NodeName为空的pod,也就是对没有标记namespace的pod都会创建一个binding,表明该pod放到哪个节点上。

首先过滤掉不满足条件的节点,这个过程称为:predicate

再通过节点按照优先级排序,这个称为:priority

最后选择优先级最好的节点

若这个期间有一步出错,直接返回错误。若在predicate过程中没有合适的节点,pod会一直处于pending状态,不断重试调度,直到有节点满足为止。如果有多个节点满足条件,就继续priority过程,选择最优node节点

调度过程中,会有一些因素影响调度

1.资源限制

2.节点选择器标签

给node添加标签

[root@k8s-master gisserver]# kubectl label node k8s-node1 node1=iserver
node/k8s-node1 labeled
[root@k8s-master gisserver]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1 Ready <none> 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node1=iserver
k8s-node2 Ready <none> 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

查看一个指定node标签

[root@k8s-master gisserver]# kubectl get node -l "node1=iserver"
NAME STATUS ROLES AGE VERSION
k8s-node1 Ready <none> 22d v1.17.3

删除一个node的标签

[root@k8s-master gisserver]# kubectl label node k8s-node1 node1-
node/k8s-node1 labeled
[root@k8s-master gisserver]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master Ready master 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1 Ready <none> 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2 Ready <none> 22d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

3. 节点的亲和性

4.污点和污点容忍

查看污点

[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints: <none>
[root@k8s-master gisserver]# kubectl describe node k8s-node2 |grep Taints
Taints: <none>
[root@k8s-master gisserver]# kubectl describe node k8s-master |grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule

添加节点污点:

[root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule
node/k8s-node1 tainted
[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints: node1=yes:NoSchedule

删除污点:

[root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule-
node/k8s-node1 untainted
[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints: <none>

污点容忍与软亲和性类似

k8s集群调度方案的更多相关文章

  1. 高可用的K8S集群部署方案

    涉及到的内容 LVS HAProxy Harbor etcd Kubernetes (Master Worker) 整体拓补图 以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少) ...

  2. 十五,K8S集群调度原理及调度策略

    目录 k8s调度器Scheduler Scheduler工作原理 请求及Scheduler调度步骤: k8s的调用工作方式 常用预选策略 常用优先函数 节点亲和性调度 节点硬亲和性 节点软亲和性 Po ...

  3. 详解k8s原生的集群监控方案(Heapster+InfluxDB+Grafana) - kubernetes

    1.浅析监控方案 heapster是一个监控计算.存储.网络等集群资源的工具,以k8s内置的cAdvisor作为数据源收集集群信息,并汇总出有价值的性能数据(Metrics):cpu.内存.netwo ...

  4. k8s学习-集群调度

    4.7.集群调度 4.7.1.说明 简介 Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上.听起来非常简单,但有很多要考虑的问题: 公平:如何保 ...

  5. k8s集群StatefulSets的Pod调度查询丢失问题?

    k8s集群StatefulSets的Pod调度查询丢失问题? 考点之简单介绍下StatefulSets 和 Deployment 之间有什么本质区别?特定场景该如何做出选择呢? 考点之你能辩证的说说看 ...

  6. k8s重要概念及部署k8s集群(一)--技术流ken

    重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...

  7. 备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?

    作者 | 蚂蚁金服技术专家 沧漠 关注『阿里巴巴云原生』公众号,回复关键词"1024",可获取本文 PPT. 前言 Kubernetes 以其超前的设计理念和优秀的技术架构,在容器 ...

  8. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 张振(守辰) ...

  9. [转帖]当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?

    改天学习一下. https://www.cnblogs.com/alisystemsoftware/p/11570806.html   当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题 ...

随机推荐

  1. 解锁用户scott并授权

    请输入用户名: system 输入口令: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Producti ...

  2. kali linux 开启ssh服务

    kali linux 一般默认不开启ssh服务,可使用命令查看ssh服务是否开启 命令:service ssh status 如果显示ssh服务没有开启需要修改ssh配置文件将ssh服务开启,kali ...

  3. Linux远程ssh执行命令expect使用及几种方法

    expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...

  4. Bootstrap4总结

    一. bootstrap简介 Bootstrap,来自 Twitter(全国最大的微博),是目前最受欢迎的前端框架. bootstrap下载及演示 http://v3.bootcss.com 什么是b ...

  5. python基础:日志模块logging,nnlog

    python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中.也可以两个操作都执行 1.控制台输入 import logging#导入模块 lo ...

  6. numpy函数笔记(持续更新)

    numpy函数笔记 np.isin用法 np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组.(注意:这里的a ...

  7. 初识ABP vNext(9):ABP模块化开发-文件管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 创建模块 模块开发 应用服务 运行模块 单元测试 模块使用 最后 前言 在之前的章节中介绍过ABP扩展实体,当时在用户 ...

  8. 深入理解xLua热更新原理

    热更新简介 热更新是指在不需要重新编译打包游戏的情况下,在线更新游戏中的一些非核心代码和资源,比如活动运营和打补丁.热更新分为资源热更新和代码热更新两种,代码热更新实际上也是把代码当成资源的一种热更新 ...

  9. Java面试必问之-JUC

    JUC:java.util.concurrent (Java并发编程工具类) 代码:D:\JAVA\Java_Learning\Elipse_Project\workspace200301EE\JUC ...

  10. phpStudy8.1.0.1配置子域名多网站

    版本 这里phpStudy版本为8.1.0.1: 步骤 假设域名为:domain.com:公网IP地址为:42.33.33.33 首先云解析中配置,添加子域名A记录直接指向你的公网IP: ep.dom ...