当前位置: 首页 > news >正文

Kubernetes调度器

1 .概念

Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 Pod 分配到集群的节点上。

2.调度过程

调度分为几个部分:首先是过滤掉不满足条件的节点,这个过程称为 预选 ;然后对通过的节点按照优先级排序,这个过程是 优选 ;最后从中选择优先级最高的节点。如果中间任何一步骤有错误,就直接返回错误。

  • 预选

  • 优选

如果在 预选 过程中没有合适的节点,pod 会一直在 pending 状态,并不断重试调度,直到有节点满足条件。经过这个步骤,如果有多个节点满足条件,就继续 优选 过程:按照优先级大小对节点排序。

优先级由一系列键值对组成,键是该优先级项的名称,值是它的权重(该项的重要性)。

3.亲和性与反亲和性

亲和性功能由两种类型的亲和性组成:

  • 节点亲和性功能类似于 nodeSelector 字段,但它的表达能力更强,并且允许你指定软规则。

  • Pod 间亲和性/反亲和性允许你根据其他 Pod 的标签来约束 Pod。

对于调度器来说,它要经历两个过程:一个是预选,另一个是优选。预选是将一些满足最低要求的节点筛选出来,不满足的节点就会淘汰掉。如果预选完后有超过一个节点的出现,就会进入优选阶段,因此就需要在多个节点中选择最优的节点去进行绑定关系。优选的这种绑定关系分为节点亲和性和 Pod 亲和性两种。

3.1节点亲和性

节点亲和性是通过 pod.spec.nodeAffinity 选项来指定,它具有以下两种策略:

  • preferredDuringSchedulingIgnoredDuringExecution:软策略。调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。

  • requiredDuringSchedulingIgnoredDuringExecution:硬策略。调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector , 但其语法表达能力更强。

3.1.1软性策略

如果满足条件由 Pod 会调度到这个满足条件的节点,如果条件不能满足,Pod也会成功调度,使用的则是默认的调度规则

3.1.2硬性策略

如果满足条件由 Pod 会调度,否则 Pod 会调度失败。

3.2Pod亲和性
3.2.1软策略

如果满足条件由 Pod 会调度到这个满足条件的节点,如果条件不能满足,Pod也会成功调度,使用的则是默认的调度规则

3.2.2硬策略

如果满足条件由 Pod 会调度,否则 Pod 会调度失败。

3.3反亲和性

亲和性是要在一起,而反亲和性是不要在一起。

3.3.1软策略

如果满足条件由 Pod 会调度到这个满足条件的节点,如果条件不能满足,Pod也会成功调度,使用的则是默认的调度规则

3.3.2硬策略

如果满足条件由 Pod 会调度,否则 Pod 会调度失败。

4.容忍与污点

概念:Taint(污点) 和 Toleration(容忍度) 相互配合,可以用来避免 Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 Taint(污点),这表示对于那些不能容忍这些 Taint(污点)的 Pod,是不会被该节点接受的。如果将 Toleration(容忍度)应用于 Pod 上,则表示这些 Pod 可以(但不要求)被调度到具有匹配 Taint(污点)的节点上。

4.1污点

节点亲和性是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点(这可能出于一种偏好,也可能是硬性要求)。

污点(Taint) 则相反——它使节点能够排斥一类特定的 Pod。

4.1.1组成

对于污点来说,它有一个自己的组成格式:

key=value:effect

每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。

effect 字段的允许值包括:

NoExecute :驱离

这会影响已在节点上运行的 Pod,具体影响如下:如果 Pod 不能容忍这类污点,会马上被驱逐。如果 Pod 能够容忍这类污点,但是在容忍度定义中没有指定 tolerationSeconds , 则 Pod 还会一直在这个节点上运行。如果 Pod 能够容忍这类污点,而且指定了 tolerationSeconds , 则 Pod还能在这个节点上继续运行这个指定的时间长度。 这段时间过去后,节点生命周期控制器从节点驱除这些 Pod。

NoSchedule :不调度

除非具有匹配的容忍度规约,否则新的 Pod 不会被调度到带有污点的节点上。 当前正在节点上运行的 Pod 不会被驱逐。

PreferNoSchedule :尽可能不调度

PreferNoSchedule 是“偏好”或“软性”的 NoSchedule 。 控制平面将尝试避免将不能容忍污点的Pod 调度到的节点上,但不能保证完全避免。

4.1.2污点设置和移除
4.1.2.1污点设置

如果要对某个节点设置污点,可通过如下的命令语法来实现:

kubectl taint nodes node1 key1=value1:NoSchedule
4.1.2.2移除污点

移除(去除)污点的命令语法如下:

kubectl taint nodes node1 key1=value1:NoSchedule-
4.2容忍

容忍度(Toleration) 是应用于 Pod 上的。容忍度允许调度器调度带有对应污点的 Pod。 容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。

设置了污点的 Node 将根据 taint 的 effect(影响):NoSchedule、PreferNoSchedule、NoExecute

和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。但我们可以在 Pod 上设置容

忍(Toleration),意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node

上。

4.2.1容忍设置方式

第一种方式:

tolerations:
- key: "key1"operator: "Equal"value: "value1"effect: "NoSchedule"

第二种方式:

tolerations:
- key: "key1"operator: "Equal"value: "value1"effect: "NoExecute"tolerationSeconds: 3600
4.2.1容忍特殊类型

1、当不指定 value 时,表示容忍所有的污点 value。

- key: "key2"operator: "Exists"effect: "NoSchedule"

2、当不指定 key 值时,表示容忍所有的污点 key。

tolerations:
- operator: "Exists"

3、当不指定 effect 值时,表示容忍所有的污tolerations:

tolerations:
- key: "key"operator: "Exists"

4、有多个 Master 存在时,防止资源浪费,可以如下设置。

kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule
http://www.dtcms.com/a/292866.html

相关文章:

  • 数据结构 堆(2)---堆的实现
  • 第三章 Freertos物联网实战esp8266模块
  • MySQL 学习一 存储结构和log
  • JDBC编程
  • 刀客doc:Netflix与YouTube开始在广告战场正面交锋
  • 数组——初识数据结构
  • 算法第26天|贪心算法:用最少数量的箭引爆气球、无重叠区间、划分字母区间
  • 35.安卓逆向2-frida hook技术-过root检测
  • 元宇宙游戏与VR的关联性及发展分析(截至2025年7月)
  • 【Spring拦截器实战】路径拦截与访问控制系统设计
  • MybatisPlus入门指南
  • SonarQube 代码分析工具
  • docker 中安装 ONLYOFFICE 服务
  • C++基础学习——文件操作详解
  • netframe4.5 的mvc 框架 layui 组件的引用
  • 模运算常见定律
  • .net 警告【代码 CS1998】此异步方法缺少 “await“ 运算符,将以同步方式运行。
  • Linux命令集锦-个人整理(偏向进程和端口的查询)
  • CS231n-2017 Lecture5卷积神经网络笔记
  • 如何把jar包打成docker镜像(SpringBoot项目打包成Docker )部署到Linux
  • CMOS知识点 离子注入工艺
  • OpenCV Mat UMat GpuMat Matx HostMem InputArray等设计哲学
  • Arduino学习笔记【快速入门】
  • 蓝牙通信架构(Bluetooth/BLE)
  • Windows系统暂停更新工具
  • 每日面试题12:JVM垃圾回收机制
  • 分布式数据库中间件ShardingSphere
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(1)
  • Java学习-----Bean
  • Datawhale AI 夏令营-心理健康Agent开发学习-Task1