Kubernetes 调度器

在 Kubernetes 中,调度指的是确保 Pod节点 匹配,以便 Kubelet 可以运行它们。

调度概述

调度程序会监视新创建的、尚未分配节点的 Pod。对于调度程序发现的每个 Pod,调度程序将负责找到最适合该 Pod 运行的节点。调度程序在做出此分配决策时,会考虑下面描述的调度原则。

如果您想了解为什么 Pod 被放置到特定节点,或者您打算自己实现自定义调度程序,本页将帮助您了解调度。

kube-scheduler

kube-scheduler 是 Kubernetes 的默认调度程序,作为 控制平面 的一部分运行。kube-scheduler 的设计是为了在您需要时,您可以编写自己的调度组件并使用它。

Kube-scheduler 选择最佳节点来运行新创建的或尚未调度(未调度)的 Pod。由于 Pod 中的容器以及 Pod 本身可能具有不同的要求,因此调度程序会过滤掉任何不满足 Pod 特定调度需求的节点。或者,API 允许您在创建 Pod 时为其指定一个节点,但这并不常见,只在特殊情况下才会这样做。

在集群中,满足 Pod 调度要求的节点被称为可行节点。如果没有任何节点适合,则 Pod 将保持未调度状态,直到调度程序能够将其放置。

调度程序会为 Pod 找到可行的节点,然后运行一组函数来对可行的节点进行评分,并从可行的节点中选择得分最高的节点来运行 Pod。然后,调度程序在称为绑定的过程中向 API 服务器通知此决策。

需要考虑的调度决策因素包括:单个和集合的资源要求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载间干扰等等。

kube-scheduler 中的节点选择

kube-scheduler 通过两步操作为 Pod 选择一个节点

  1. 过滤
  2. 评分

过滤步骤会找到可以调度 Pod 的节点集。例如,PodFitsResources 过滤器会检查候选节点是否具有足够的可用资源来满足 Pod 的特定资源请求。在此步骤之后,节点列表将包含任何合适的节点;通常会有多个节点。如果列表为空,则该 Pod 无法(暂时)调度。

评分步骤中,调度程序对剩余的节点进行排名以选择最合适的 Pod 放置位置。调度程序会根据活动评分规则,对每个通过过滤的节点分配一个分数。

最后,kube-scheduler 将 Pod 分配给排名最高的节点。如果有多个节点的分数相同,kube-scheduler 会随机选择其中一个。

有两种支持的方法来配置调度程序的过滤和评分行为

  1. 调度策略 允许您配置用于过滤的谓词和用于评分的优先级
  2. 调度配置文件 允许您配置实现不同调度阶段的插件,包括:QueueSortFilterScoreBindReservePermit 等。您还可以配置 kube-scheduler 来运行不同的配置文件。

下一步

上次修改于 2024 年 2 月 16 日下午 5:27 PST:修复 kube 调度程序中的拼写错误 (33dcba8aa6)