文章转载自:https://www.kuboard.cn/learning/k8s-advanced/schedule/tuning.html

kube-scheduler 是 Kubernetes 中的默认调度器。负责为 Pod 在集群中选择合适的节点。

集群中能够满足某一个 Pod 的资源需求的节点,我们称其为 可选节点(feasible node)。调度器在执行调度时,执行的步骤如下:

1.找出该 Pod 的所有 可选节点

2.按照某种方式对每一个 可选节点 评分

3.选择评分最高的 可选节点

4.将最终选择结果通知 API Server,这个过程,我们称其为绑定(binding)

本文解释了在规模较大的 Kubernetes 集群中如何对 kube-scheduler 进行性能调优。

参与评分的节点的比例

在 Kubernetes v1.12 版本之前,kube-scheduler 检查集群中的所有节点是否对 Pod 可选,并对 可选节点 进行评分。在 Kubernetes v1.12 中,添加了一个新的特性,使得 kube-scheduler 在找到了一定数量的 可选节点 后,便停止继续寻找更多 可选节点。 这个特性可以显著提高 kube-scheduler 在大规模 Kubernetes 集群中的性能。通过 percentageOfNodesToScore 这个配置参数,我们可以控制 kube-scheduler 在找到多少 可用节点 之后变停止继续寻找。该参数的可选值为 1 - 100 之间的数字,大于 100 的将被认为是 100%,0 代表忽略该配置。

在 Kubernetes v1.14 中,如果不定义 percentageOfNodesToScore,kube-scheduler 将按照一个线性公式来确定该参数的取值。按照该公式:

  • 100节点集群,percentageOfNodesToScore 为 50%
  • 5000节点集群,percentageOfNodesToScore 为 10%
  • percentageOfNodesToScore 的最小值为 5%;(即,不论集群规模有多大,按照该公式,percentageOfNodesToScore 最终取值为 5%,除非集群管理员将该参数配置为小于 5% 的值)

下面的例子中,将 percentageOfNodesToScore 配置为 50%

apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
algorithmSource:
provider: DefaultProvider ... percentageOfNodesToScore: 50

例外:当集群中可选节点数量少于 50 时,调度器仍将继续检查剩余的节点。

如果要禁用该特性,可将 percentageOfNodesToScore 设定为 100。

调优 percentageOfNodesToScore

percentageOfNodesToScore 的取值在 1 到 100 之间,默认值基于集群节点的数量计算得出。并且,将至少要找出 50 个可选节点,否则仍会检查集群中所有节点是否对 Pod 可用。这就意味着,当集群的节点数不超过 1000 时,修改该参数并不会对实际结果产生多大的影响。Kubernetes 有意做了此设计,因为在小规模集群中,kube-scheduler 的性能差异不大。当集群节点数超过 1000 时,调整此参数将有可能显著提升 kube-scheduler 的性能。

关于 percentageOfNodesToScore,一个重要的考虑因素是,如果只检查了集群中一小部分节点对 Pod 是否可选,也就意味着更多的节点未能参与该 Pod 的评分。此时存在的可能性是,未参与评分的节点数量可能实际得分会比最终选中的节点得分更高,即,Pod 并没有找到集群中“最”适合其运行的节点。因此,percentageOfNodesToScore 不应该设置为一个过低的数值。通常,不要将其设置为低于 10 的数字。在如下情况都满足时,可以考虑更低的数字:

  • kube-scheduler 的吞吐量(每秒钟执行调度的次数)非常重要
  • 节点的评分是否为最高,没那么重要

当集群节点数量不超过 1000甚至更少时,不推荐修改该参数的默认取值,此时调整此参数对 kube-scheduler 性能的影响不大。

调度器遍历节点的方法

为了让集群中的每个节点都有公平的机会被 Pod 选中,调度器按照 round-robin(轮询)的方式遍历节点。您可以认为,节点被放在一个数组中,调度器从数组的第一个元素开始检查节点是否为 可选节点,直到其找到足够多数量(由percentageOfNodesToScore指定)的 可选节点。当调度器调度下一个 Pod 时,将继续从上一次停止的地方往后面便利节点的数组,到达数组的末尾时,又从数组的第一个元素继续遍历。

如果节点在多个高可用区,调度器将遍历多个高可用区终端额节点,以确保不同的可用区都有合适的机会。例如,假设 6 个节点分布于两个可用区:

Zone 1:  Node 1, Node 2, Node 3, Node 4
Zone 2: Node 5, Node 6

调度器将按照下面的顺序评估节点是否为可选节点:

Node 1, Node 5, Node 2, Node 6, Node 3, Node 4

到达结尾 Node 4 后,又从 Node 1 继续遍历。

kube-scheduler 调度调优的更多相关文章

  1. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

  2. mapreduce的调度算法和job调优

    调度算法: mapreduce当有很多的作业在执行的时候,是按照什么顺序去执行的? 调度算法顺序需要关注: 1.提高作业的吞吐量. 2.要考虑优先级. 三种调度器:如果作业跑不完,并且机器资源利用率比 ...

  3. Golang 的 协程调度机制 与 GOMAXPROCS 性能调优

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  4. (转)SQL Server 性能调优(cpu)

    摘自:http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu ...

  5. MySQL 调优基础(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  6. Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  7. Nginx下载服务生产服务器调优

    一.内存调优 内核关于内存的选项都在/proc/sys/vm目录下.   1.pdflush,用于回写内存中的脏数据到硬盘.可以通过 /proc/sys/vm/vm.dirty_background_ ...

  8. 基于CDH 5.9.1 搭建 Hive on Spark 及相关配置和调优

    Hive默认使用的计算框架是MapReduce,在我们使用Hive的时候通过写SQL语句,Hive会自动将SQL语句转化成MapReduce作业去执行,但是MapReduce的执行速度远差与Spark ...

  9. Apache Spark Jobs 性能调优

    当你开始编写 Apache Spark 代码或者浏览公开的 API 的时候,你会遇到各种各样术语,比如transformation,action,RDD(resilient distributed d ...

随机推荐

  1. Grammarly for Chrome-语法、用词自动检查

    从语法和拼写到风格和语气,Grammarly帮助你消除写作错误,找到完美的词语来表达自己.当你在Gmail.Twitter.LinkedIn和几乎任何你发现自己在写作的地方写作时,你都会从Gramma ...

  2. Apache:dbutils 开源JDBC工具类库

    commons-dbutils jar:下载 package com.jdbc.tools; import org.apache.commons.dbutils.QueryRunner; import ...

  3. 2022 07 13 第一小组 田龙跃 Java再学习笔记

    1.类名命名规则: 只能由数字字母,下划线,美元符号组成(不能以数字开头,尽量不要用下划线开头) 2.注释(养成多写注释的好习惯) 单行注释 // ctrl+/ 多行注释 // ctrl+shirt+ ...

  4. 透过Redis源码探究Hash表的实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/667 本文使用的Redis 5.0源码 概述 我们在学习 Redis ...

  5. LabVIEW图形化的AI视觉开发平台(非NI Vision),大幅降低人工智能开发门槛

    前言 之前每次进行机器学习和模型训练的时候发现想要训练不同模型的时候需要使用不同的框架,有时候费了九牛二虎之力终于写下了几百行代码之后,才发现环境调试不通,运行效率也差强人意,于是自己写了一个基于La ...

  6. 用户认证(Authentication)进化之路:由Basic Auth到Oauth2再到jwt

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_98 用户认证是一个在web开发中亘古不变的话题,因为无论是什么系统,什么架构,什么平台,安全性是一个永远也绕不开的问题 在HTTP ...

  7. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  8. Win10文件、文件夹被占用解决方法

    有时删除文件/弹出移动硬盘的时候会出现文件或文件夹或磁盘被占用的情况,从而无法删除文件/文件夹或安全弹出移动硬盘.这时可以在资源管理器中搜索该文件.文件夹,来找到对应的程序. 使用了以下链接中的方法, ...

  9. One---python的六种数据类型及数据转换

    python的六种数据类型 python中数据类型分为不可变数据类型和可变数据类型 可变数据类型 可变数据类型包括:List(列表).Dictionary(字典).Set(集合) 不可变数据类型 不可 ...

  10. Spring源码 05 IOC 注解方式

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...