文章转载自: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. 感知器网络(MP模型)和自适应线性元件

  2. java通过注解顺序通过映射导出excel

    import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...

  3. Docker 安全及日志管理

    Docker 安全及日志管理 容器的安全性问题的根源在于容器和宿主机共享内核. 容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃. 虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机 ...

  4. NAT模式 LVS负载均衡群集部署

    NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...

  5. Note -「数论 定理及结论整合」

    数学素养 low,表达可能存在不严谨,见谅.我准备慢慢补上证明? Theorems. 裴蜀定理:关于 \(x, y\) 的线性方程 \(ax + by = c\) 有解,当且仅当 \(\gcd (a, ...

  6. OptaPlanner 发展方向与问题

    ​ 最近一段时间,因为忙于[易排(EasyPlan)规划平台]的设计与开发工作,平台的一些功能设计,需要对OptaPlanner的各种特性作更深入的研究与应用.慢慢发现,OptaPlanner进入8. ...

  7. jdbc 05: 查询结果集

    jdbc连接mysql,查询结果集 package com.examples.jdbc.o5_结果集查询; import java.sql.*; import java.util.ResourceBu ...

  8. 基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现

    摘要:本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理. 本文分享自华为云社区<[CA ...

  9. python 链表、堆、栈

    简介 很多开发在开发中并没有过多的关注数据结构,当然我也是,因此,我写这篇文章就是想要带大家了解一下这些分别是什么东西. 链表 概念:数据随机存储,并且通过指针表示数据之间的逻辑关系的存储结构. 链表 ...

  10. 使用.NET简单实现一个Redis的高性能克隆版(七-完结)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...