暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一文看懂 Kubernetes 调度器:从过滤到打分的全流程解析

160

Kubernetes Scheduler 使用一系列算法和策略来将 Pod 绑定到适当的 worker 节点。调度过程分为两大步骤:过滤和打分。

1. 过滤(Filtering)

调度器会筛选出符合条件的节点,这些节点称为候选节点。过滤步骤使用以下条件来排除不符合条件的节点:

  • 节点是否可达:节点必须是运行状态并且可接受新的 Pod。

  • 资源需求:节点必须有足够的 CPU、内存和其他资源来满足 Pod 的需求。

  • 污点和容忍:节点的污点(Taints)必须被 Pod 的容忍(Tolerations)所接受。

  • 节点亲和性/反亲和性:节点必须符合 Pod 定义的亲和性(Affinity)或反亲和性(Anti-Affinity)规则。

  • Pod 亲和性/反亲和性:节点上的其他 Pod 必须符合 Pod 定义的亲和性或反亲和性规则。

  • 其他自定义规则:用户定义的自定义调度规则也会在这个阶段被考虑。

2. 打分(Scoring)

调度器对通过过滤的节点进行打分,根据多个打分函数为每个节点赋予分数。得分最高的节点将被选为目标节点。以下是常用的打分策略:

  • 资源利用率:优先选择那些资源利用率适中的节点,而非最空闲或最繁忙的节点。

  • 节点亲和性:根据 Pod 的亲和性和反亲和性规则为节点打分。

  • 拓扑感知:考虑节点的地理位置、网络拓扑等因素,为节点打分。

  • Pod 间关系:考虑与其他 Pod 的位置关系,为节点打分。

具体算法示例

过滤阶段示例:

假设有 3 个节点:Node1、Node2 和 Node3。Pod 需要 2 个 CPU 和 4 GB 内存。

  • Node1:剩余 1 个 CPU 和 4 GB 内存,不满足资源需求。

  • Node2:剩余 4 个 CPU 和 8 GB 内存,满足资源需求。

  • Node3:剩余 2 个 CPU 和 3 GB 内存,不满足内存需求。

过滤结果:Node2 是唯一符合资源需求的节点。

打分阶段示例:

假设 Node2 和 Node3 都满足资源需求,调度器会对它们打分。

  • Node2:资源利用率中等(50%),分数 8。

  • Node3:资源利用率较高(75%),分数 5。

打分结果:Node2 得分最高,Pod 将被调度到 Node2。

调度算法

调度器使用多种算法和启发式方法来进行打分和过滤。常用算法包括:

  • Bin Packing:尽量将 Pod 填充到现有节点,优化资源利用率。

  • Least Request:选择当前负载最轻的节点。

  • Balanced Resource Allocation:选择资源分配最均衡的节点。

  • Spread Constraints:将 Pod 均匀分布在不同的节点或故障域中。

  • Affinity/Anti-affinity:根据亲和性和反亲和性规则打分。

调度器插件

Kubernetes 1.15 引入了调度器插件机制,允许用户自定义调度逻辑。用户可以编写插件来实现自定义的过滤和打分逻辑,并将其插入调度流程中。Kubernetes Scheduler 通过过滤和打分两个主要步骤,使用多种算法和策略来将 Pod 绑定到适当的 worker 节点。调度过程考虑了资源需求、节点和 Pod 亲和性、资源利用率等因素,以确保集群的高效和可靠运行。


文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论