×

Pod 调度是一个内部流程,用于确定将新的 Pod 部署到集群中的节点。

调度程序代码具有清晰的分离,它监视新创建的 Pod 并识别最合适的节点来托管它们。然后,它使用主 API 为 Pod 创建绑定(Pod 到节点的绑定)。

默认 Pod 调度

OpenShift Container Platform 带有一个默认调度程序,可以满足大多数用户的需求。默认调度程序使用固有工具和自定义工具来确定 Pod 的最佳匹配。

高级 Pod 调度

如果您希望更好地控制新 Pod 的部署位置,OpenShift Container Platform 高级调度功能允许您配置 Pod,以便 Pod 需要或更倾向于在特定节点上运行或与特定 Pod 一起运行。

您可以使用以下调度功能控制 Pod 部署

关于默认调度程序

默认的 OpenShift Container Platform Pod 调度程序负责确定将新的 Pod 部署到集群中的节点。它读取 Pod 的数据,并根据配置的配置文件查找合适的节点。它是完全独立的,并作为一个独立的解决方案存在。它不会修改 Pod;它会为 Pod 创建一个绑定,将 Pod 绑定到特定节点。

了解默认调度

现有的通用调度程序是平台提供的默认调度程序 *引擎*,它通过三个步骤操作选择一个节点来托管 Pod

过滤节点

根据指定的约束或要求过滤可用节点。这是通过运行每个节点通过称为 *谓词* 或 *过滤器* 的过滤器函数列表来完成的。

对过滤后的节点列表进行优先级排序

这是通过将每个节点传递给一系列 *优先级* 或 *评分* 函数来实现的,这些函数为其分配 0-10 之间的分数,其中 0 表示不匹配,10 表示非常匹配以托管 Pod。调度程序配置还可以为每个评分函数采用简单的 *权重*(正数值)。每个评分函数提供的节点分数乘以权重(大多数分数的默认权重为 1),然后通过添加所有分数为每个节点提供的分数来组合。管理员可以使用此权重属性来赋予某些分数更高的重要性。

选择最佳匹配节点

根据节点分数对节点进行排序,并选择分数最高的节点来托管 Pod。如果多个节点具有相同的高分,则随机选择其中一个。

调度程序用例

OpenShift Container Platform 中调度的一个重要用例是支持灵活的亲和性和反亲和性策略。

基础设施拓扑级别

管理员可以通过在节点上指定标签来为其基础设施(节点)定义多个拓扑级别。例如:region=r1zone=z1rack=s1

这些标签名称没有任何特定含义,管理员可以自由命名其基础设施级别,例如城市/建筑物/房间。此外,管理员可以为其基础设施拓扑定义任意数量的级别,通常三个级别就足够了(例如:区域分区机架)。管理员可以在这些级别的任意组合中指定亲和性和反亲和性规则。

亲和性

管理员应该能够配置调度程序以在任何拓扑级别甚至多个级别指定亲和性。特定级别的亲和性表示属于同一服务的全部 Pod 都调度到属于同一级别的节点上。这通过允许管理员确保对等 Pod 不会地理位置过于分散来处理应用程序的任何延迟要求。如果在同一亲和性组内没有可用的节点来托管 Pod,则不调度该 Pod。

这些高级调度功能允许管理员指定可以在哪个节点上调度 Pod,以及强制或拒绝相对于其他 Pod 的调度。

反亲和性

管理员应该能够配置调度程序以在任何拓扑级别甚至多个级别指定反亲和性。特定级别的反亲和性(或“分散”)表示属于同一服务的全部 Pod 都分散在属于该级别的节点上。这确保了应用程序为了高可用性目的而得到良好分散。调度程序尝试尽可能均匀地将服务 Pod 分散到所有适用的节点上。

这些高级调度功能允许管理员指定可以在哪个节点上调度 Pod,以及强制或拒绝相对于其他 Pod 的调度。