Kubernetes —调度器配置

目录

配置文件

扩展点

调度插件

多配置文件

应用于多个扩展点的插件

调度程序配置迁移


你可以通过编写配置文件,并将其路径传给 kube-scheduler 的命令行参数,定制 kube-scheduler 的行为。

调度模板(Profile)允许你配置 kube-scheduler 中的不同调度阶段。每个阶段都暴露于某个扩展点中。插件通过实现一个或多个扩展点来提供调度行为。

你可以通过运行 kube-scheduler --config <filename> 来设置调度模板, 使用 KubeSchedulerConfiguration v1 结构体。

最简单的配置如下:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
clientConnection:kubeconfig: /etc/srv/kubernetes/kube-scheduler/kubeconfig

说明:

KubeSchedulerConfiguration v1beta2 在 v1.25 中已弃用,并将在 v1.28 中移除。 KubeSchedulerConfiguration v1beta3 在 v1.26 中已弃用,并将在 v1.29 中移除。

请将 KubeSchedulerConfiguration 迁移到 v1。

配置文件

通过调度配置文件,你可以配置 kube-scheduler 在不同阶段的调度行为。 每个阶段都在一个扩展点中公开。 调度插件通过实现一个或多个扩展点,来提供调度行为。

你可以配置同一 kube-scheduler 实例使用多个配置文件。

扩展点

调度行为发生在一系列阶段中,这些阶段是通过以下扩展点公开的:

  1. queueSort:这些插件对调度队列中的悬决的 Pod 排序。 一次只能启用一个队列排序插件。
  2. preFilter:这些插件用于在过滤之前预处理或检查 Pod 或集群的信息。 它们可以将 Pod 标记为不可调度。
  3. filter:这些插件相当于调度策略中的断言(Predicates),用于过滤不能运行 Pod 的节点。 过滤器的调用顺序是可配置的。 如果没有一个节点通过所有过滤器的筛选,Pod 将会被标记为不可调度。
  4. postFilter:当无法为 Pod 找到可用节点时,按照这些插件的配置顺序调用他们。 如果任何 postFilter 插件将 Pod 标记为可调度,则不会调用其余插件。
  5. preScore:这是一个信息扩展点,可用于预打分工作。
  6. score:这些插件给通过筛选阶段的节点打分。调度器会选择得分最高的节点。
  7. reserve:这是一个信息扩展点,当资源已经预留给 Pod 时,会通知插件。 这些插件还实现了 Unreserve 接口,在 Reserve 期间或之后出现故障时调用。
  8. permit:这些插件可以阻止或延迟 Pod 绑定。
  9. preBind:这些插件在 Pod 绑定节点之前执行。
  10. bind:这个插件将 Pod 与节点绑定。bind 插件是按顺序调用的,只要有一个插件完成了绑定,其余插件都会跳过。bind 插件至少需要一个。
  11. postBind:这是一个信息扩展点,在 Pod 绑定了节点之后调用。
  12. multiPoint:这是一个仅配置字段,允许同时为所有适用的扩展点启用或禁用插件。

对每个扩展点,你可以禁用默认插件或者是启用自己的插件,例如:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- plugins:score:disabled:- name: PodTopologySpreadenabled:- name: MyCustomPluginAweight: 2- name: MyCustomPluginBweight: 1

你可以在 disabled 数组中使用 * 禁用该扩展点的所有默认插件。 如果需要,这个字段也可以用来对插件重新顺序。

调度插件

下面默认启用的插件实现了一个或多个扩展点:

  • ImageLocality:选择已经存在 Pod 运行所需容器镜像的节点。
  • 实现的扩展点:score。
  • TaintToleration:实现了污点和容忍。
  • 实现的扩展点:filter、preScore、score。
  • NodeName:检查 Pod 指定的节点名称与当前节点是否匹配。
  • 实现的扩展点:filter。
  • NodePorts:检查 Pod 请求的端口在节点上是否可用。
  • 实现的扩展点:preFilter、filter。
  • NodeAffinity:实现了节点选择器 和节点亲和性。
  • 实现的扩展点:filter、score。
  • PodTopologySpread:实现了 Pod 拓扑分布。
  • 实现的扩展点:preFilter、filter、preScore、score。
  • NodeUnschedulable:过滤 .spec.unschedulable 值为 true 的节点。
  • 实现的扩展点:filter。
  • NodeResourcesFit:检查节点是否拥有 Pod 请求的所有资源。 得分可以使用以下三种策略之一:LeastAllocated(默认)、MostAllocated 和 RequestedToCapacityRatio。
  • 实现的扩展点:preFilter、filter、score。
  • NodeResourcesBalancedAllocation:调度 Pod 时,选择资源使用更为均衡的节点。
  • 实现的扩展点:score。
  • VolumeBinding:检查节点是否有请求的卷,或是否可以绑定请求的卷。 实现的扩展点:preFilter、filter、reserve、preBind 和 score。
  • 说明:
  • 当 VolumeCapacityPriority 特性被启用时,score 扩展点也被启用。 它优先考虑可以满足所需卷大小的最小 PV。
  • VolumeRestrictions:检查挂载到节点上的卷是否满足卷提供程序的限制。
  • 实现的扩展点:filter。
  • VolumeZone:检查请求的卷是否在任何区域都满足。
  • 实现的扩展点:filter。
  • NodeVolumeLimits:检查该节点是否满足 CSI 卷限制。
  • 实现的扩展点:filter。
  • EBSLimits:检查节点是否满足 AWS EBS 卷限制。
  • 实现的扩展点:filter。
  • GCEPDLimits:检查该节点是否满足 GCP-PD 卷限制。
  • 实现的扩展点:filter。
  • AzureDiskLimits:检查该节点是否满足 Azure 卷限制。
  • 实现的扩展点:filter。
  • InterPodAffinity:实现 Pod 间亲和性与反亲和性。
  • 实现的扩展点:preFilter、filter、preScore、score。
  • PrioritySort:提供默认的基于优先级的排序。
  • 实现的扩展点:queueSort。
  • DefaultBinder:提供默认的绑定机制。
  • 实现的扩展点:bind。
  • DefaultPreemption:提供默认的抢占机制。
  • 实现的扩展点:postFilter。

你也可以通过组件配置 API 启用以下插件(默认不启用):

  • CinderLimits:检查是否可以满足节点的 OpenStack Cinder 卷限制。 实现的扩展点:filter。

多配置文件

你可以配置 kube-scheduler 运行多个配置文件。 每个配置文件都有一个关联的调度器名称,并且可以在其扩展点中配置一组不同的插件。

使用下面的配置样例,调度器将运行两个配置文件:一个使用默认插件,另一个禁用所有打分插件。

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: default-scheduler- schedulerName: no-scoring-schedulerplugins:preScore:disabled:- name: '*'score:disabled:- name: '*'

对于那些希望根据特定配置文件来进行调度的 Pod,可以在 .spec.schedulerName 字段指定相应的调度器名称。

默认情况下,将创建一个调度器名为 default-scheduler 的配置文件。 这个配置文件包括上面描述的所有默认插件。 声明多个配置文件时,每个配置文件中调度器名称必须唯一。

如果 Pod 未指定调度器名称,kube-apiserver 将会把调度器名设置为 default-scheduler。 因此,应该存在一个调度器名为 default-scheduler 的配置文件来调度这些 Pod。

说明:

Pod 的调度事件把 .spec.schedulerName 字段值作为 ReportingController。 领导者选举事件使用列表中第一个配置文件的调度器名称。

说明:

所有配置文件必须在 queueSort 扩展点使用相同的插件,并具有相同的配置参数(如果适用)。 这是因为调度器只有一个保存 pending 状态 Pod 的队列。

应用于多个扩展点的插件

从 kubescheduler.config.k8s.io/v1beta3 开始,配置文件配置中有一个附加字段 multiPoint,它允许跨多个扩展点轻松启用或禁用插件。 multiPoint 配置的目的是简化用户和管理员在使用自定义配置文件时所需的配置。

考虑一个插件,MyPlugin,它实现了 preScore、score、preFilter 和 filter 扩展点。 要为其所有可用的扩展点启用 MyPlugin,配置文件配置如下所示:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: multipoint-schedulerplugins:multiPoint:enabled:- name: MyPlugin

这相当于为所有扩展点手动启用 MyPlugin,如下所示:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: non-multipoint-schedulerplugins:preScore:enabled:- name: MyPluginscore:enabled:- name: MyPluginpreFilter:enabled:- name: MyPluginfilter:enabled:- name: MyPlugin

在这里使用 multiPoint 的一个好处是,如果 MyPlugin 将来实现另一个扩展点,multiPoint 配置将自动为新扩展启用它。

可以使用该扩展点的 disabled 字段将特定扩展点从 MultiPoint 扩展中排除。 这适用于禁用默认插件、非默认插件或使用通配符 ('*') 来禁用所有插件。 禁用 Score 和 PreScore 的一个例子是:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: non-multipoint-schedulerplugins:multiPoint:enabled:- name: 'MyPlugin'preScore:disabled:- name: '*'score:disabled:- name: '*'

从 kubescheduler.config.k8s.io/v1beta3 开始,所有默认插件都通过 MultiPoint 在内部启用。 但是,仍然可以使用单独的扩展点来灵活地重新配置默认值(例如排序和分数权重)。 例如,考虑两个 Score 插件 DefaultScore1 和 DefaultScore2,每个插件的权重为 1。 它们可以用不同的权重重新排序,如下所示:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: multipoint-schedulerplugins:score:enabled:- name: 'DefaultScore2'weight: 5

在这个例子中,没有必要在 MultiPoint 中明确指定插件,因为它们是默认插件。 Score 中指定的唯一插件是 DefaultScore2。 这是因为通过特定扩展点设置的插件将始终优先于 MultiPoint 插件。 因此,此代码段实质上重新排序了这两个插件,而无需同时指定它们。

配置 MultiPoint 插件时优先级的一般层次结构如下:

  1. 特定的扩展点首先运行,它们的设置会覆盖其他地方的设置
  2. 通过 MultiPoint 手动配置的插件及其设置
  3. 默认插件及其默认设置

为了演示上述层次结构,以下示例基于这些插件:

插件

扩展点

DefaultQueueSort

QueueSort

CustomQueueSort

QueueSort

DefaultPlugin1

Score, Filter

DefaultPlugin2

Score

CustomPlugin1

Score, Filter

CustomPlugin2

Score, Filter

这些插件的一个有效示例配置是:

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:- schedulerName: multipoint-schedulerplugins:multiPoint:enabled:- name: 'CustomQueueSort'- name: 'CustomPlugin1'weight: 3- name: 'CustomPlugin2'disabled:- name: 'DefaultQueueSort'filter:disabled:- name: 'DefaultPlugin1'score:enabled:- name: 'DefaultPlugin2'

请注意,在特定扩展点中重新声明 MultiPoint 插件不会出错。 重新声明被忽略(并记录),因为特定的扩展点优先。

除了将大部分配置保存在一个位置之外,此示例还做了一些事情:

  • 启用自定义 queueSort 插件并禁用默认插件
  • 启用 CustomPlugin1 和 CustomPlugin2,这将首先为它们的所有扩展点运行
  • 禁用 DefaultPlugin1,但仅适用于 filter
  • 重新排序 DefaultPlugin2 以在 score 中首先运行(甚至在自定义插件之前)

在 v1beta3 之前的配置版本中,没有 multiPoint,上面的代码片段等同于:

apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
profiles:- schedulerName: multipoint-schedulerplugins:# 禁用默认的 QueueSort 插件queueSort:enabled:- name: 'CustomQueueSort'disabled:- name: 'DefaultQueueSort'# 启用自定义的 Filter 插件filter:enabled:- name: 'CustomPlugin1'- name: 'CustomPlugin2'- name: 'DefaultPlugin2'disabled:- name: 'DefaultPlugin1'# 启用并重新排序自定义的打分插件score:enabled:- name: 'DefaultPlugin2'weight: 1- name: 'DefaultPlugin1'weight: 3

虽然这是一个复杂的例子,但它展示了 MultiPoint 配置的灵活性以及它与配置扩展点的现有方法的无缝集成。

调度程序配置迁移

  • v1beta1 → v1beta2
  • v1beta2 → v1beta3
  • v1beta3 → v1
  • 在 v1beta2 配置版本中,你可以为 NodeResourcesFit 插件使用新的 score 扩展。 新的扩展结合了 NodeResourcesLeastAllocated、NodeResourcesMostAllocated 和 RequestedToCapacityRatio 插件的功能。 例如,如果你之前使用了 NodeResourcesMostAllocated 插件, 则可以改用 NodeResourcesFit(默认启用)并添加一个 pluginConfig 和 scoreStrategy,类似于:
  • apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: cpu weight: 1 type: MostAllocated name: NodeResourcesFit
  • 调度器插件 NodeLabel 已弃用; 相反,要使用 NodeAffinity 插件(默认启用)来实现类似的行为。
  • 调度程序插件 ServiceAffinity 已弃用; 相反,使用 InterPodAffinity 插件(默认启用)来实现类似的行为。
  • 调度器插件 NodePreferAvoidPods 已弃用; 相反,使用 节点污点 来实现类似的行为。
  • 在 v1beta2 配置文件中启用的插件优先于该插件的默认配置。
  • 调度器的健康检查和审计的绑定地址,所配置的 host 或 port 无效将导致验证失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】基于Tcp的echo和Sock封装

文章目录 前言基于Tcp的echo成员变量成员函数 封装SOCK类成员变量成员函数 结语 前言 上一篇文章我们用Udp简单实现了一个网络聊天室&#xff0c;今天我们一起来学习使用TCP套接字。 基于Tcp的echo 成员变量 //端口号 uint16_t _port; //要执行的回调 func_t _func; //list…

python3学习--使用pandas 数据透视表分析数据--入门示例

什么是透视表&#xff1f; 透视表是一种可以对数据动态排布并且分类汇总的表格格式&#xff0c;可以以多种方式和视角查看数据特征 Pandas库提供了一个名为pivot_table的函数&#xff0c;它将一个特性的值汇总在一个整洁的二维表中。 使用示例 pivot_table函数说明 pandas.…

The label parameter should be set so this animate*AsState can be better

The label parameter should be set so this animate*AsState can be better inspected in the Animation Preview. Compose提示&#xff1a; The label parameter should be set so this animate*AsState can be better inspected in the Animation Preview. 需要添加label标…

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

从安装 Seata 开始的分布式事务之旅 springboot集成seata

从安装 Seata 开始的分布式事务之旅 介绍什么是 Seata&#xff1f; 安装 Seata Server下载 Seata Server 发行版配置Seata解压文件配置Seata的yml文件把配置文件config.txt加载到nacos上修改config.txt文件加载到nacos上 启动Seata服务正常启动查看启动日志打开控制台页面 启动…

深入探究不同类型代理及其在网络安全与爬虫中的应用

1. 代理技术概述 代理技术是一种通过中间服务器来转发网络请求和响应的方法。通过使用代理服务器&#xff0c;用户可以隐藏真实的网络身份、加强网络连接安全&#xff0c;以及实现更高效的数据传输。不同类型的代理服务器在实现方式和用途上存在差异&#xff0c;下面我们将重点…

pytest常用执行参数详解

1. 查看pytest所有可用参数 我们可以通过pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;下面是归纳一些常用的参数&#xff1a; -s&#xff1a;输出调试信息&#xff0c;包括print打印的信息。 -v&#xff1a;显示更详细的信息。 …

中电金信:ChatGPT一夜爆火,知识图谱何以应战?

随着ChatGPT的爆火出圈 人工智能再次迎来发展小高潮 那么作为此前搜索领域的主流技术 知识图谱前路又将如何呢&#xff1f; 事实上&#xff0c;ChatGPT也并非“万能”&#xff0c;作为黑箱模型&#xff0c;ChatGPT很难验证生成的知识是否准确。并且ChatGPT是通过概率模型执行推…

Python web实战之Django 的 RESTful API 设计详解

关键词: Python, Web 开发, Django, RESTful API 1 API的一些事儿 1.1 什么是API&#xff1f; API是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写。它是一种定义了不同软件组件之间交互方式的规范。API允许不同的应用程序之间进行通信和…

Kafka3.0.0版本——Broker(上下线)示例

目录 一、Broker&#xff08;上下线&#xff09;示例1.1、三台服务器信息1.2、先启动zookeeper集群&#xff0c;再启动kafka集群1.3、zookeeper客户端工具prettyZoo查看brokers中ids1.4、停止某一台kafka服务&#xff0c;再次查看brokers中ids1.5、重新启动停止的kafka服务&…

【剑指Offer 30】包含min函数的栈,Java解密。

LeetCode 剑指Offer 75道练习题 文章目录 剑指Offer:包含min函数的栈示例:限制:解题思路:剑指Offer:包含min函数的栈 【题目描述】 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示…

Python爬虫在电商数据挖掘中的应用

作为一名长期扎根在爬虫行业的专业的技术员&#xff0c;我今天要和大家分享一些有关Python爬虫在电商数据挖掘中的应用与案例分析。在如今数字化的时代&#xff0c;电商数据蕴含着丰富的信息&#xff0c;通过使用爬虫技术&#xff0c;我们可以轻松获取电商网站上的产品信息、用…

vue实现pdf预览功能

背景&#xff1a;材料上传之后点击预览实现在浏览器上预览的效果 效果如下&#xff1a; 实现代码如下&#xff1a; //预览和下载操作 <el-table-column fixed"right" label"操作" width"210"><template #default"scope">…

Hbase-热点问题(数据存储倾斜问题)

1. 危害 某一台regionserver消耗过多&#xff0c;承受过多的并发量&#xff0c;时间长机器性能下降&#xff0c;甚至宕机 2. 解决 可以通过设计rowkey预分区的方法解决 比如可以预分区120个&#xff0c;1月的数据存到1-10分区&#xff0c;每个月的数据存到10个分区&#xff…

初识React: 基础(概念 特点 高效原因 虚拟DOM JSX语法 组件)

1.什么是React? React是一个由Facebook开源的JavaScript库&#xff0c;它主要用于构建用户界面。React的特点是使用组件化的思想来构建界面&#xff0c;使得代码的可复用性和可维护性大大提高。React还引入了虚拟DOM的概念&#xff0c;减少了对真实DOM的直接操作&#xff0c;…

GaussDB数据库SQL系列-表连接(JOIN)

目录 一、前言 二、GaussDB JOIN 1、LEFT JOIN 2、LEFT JOIN EXCLUDING INNER JOIN 3、RIGHT JOIN 4、LEFT JOIN EXCLUDING INNER JOIN 5、INNER JOIN 6、FULL OUTER JOIN 7、FULL OUTER JOIN EXCLUDING INNER JOIN 三、GaussDB 实验示例 1、初始化实验表 2、LEFT …

无涯教程-Perl - getc函数

描述 此函数从FILEHANDLE中读取下一个字符(如果未指定,则从STDIN中读取),并返回值。 语法 以下是此函数的简单语法- getc FILEHANDLEgetc返回值 此函数返回错误或文件结尾的undef以及从FILEHANDLE读取的字符值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$k…

【git】Git 回退到指定版本:

文章目录 方法一: 使用 git reset 命令方法二&#xff1a;使用 git revert 命令方法三&#xff1a;使用 git checkout 命令常见的错误及其解决办法如下&#xff1a; 方法一: 使用 git reset 命令 命令可以将当前分支的 HEAD 指针指向指定的提交&#xff0c;从而回退代码到指定版…

PS透明屏,在科技展示中,有哪些优点展示?

PS透明屏是一种新型的显示技术&#xff0c;它将传统的显示屏幕与透明材料相结合&#xff0c;使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性&#xff0c;通…

SDXL-Stable Diffusion改进版

文章目录 1. 摘要2. 算法&#xff1a;2.1 结构&#xff1a;2.2 微小的条件机制2.3 多宽高比训练2.4 改进自编码器2.5 所有组合放到一起2.6 主流方案比较 3. 未来工作4. 限制 论文&#xff1a; 《SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis…