Pod 调度是一个内部流程,用于确定将新的 Pod 部署到集群中的节点。
调度程序代码具有清晰的分离,它监视新创建的 Pod 并识别最合适的节点来托管它们。然后,它使用主 API 为 Pod 创建绑定(Pod 到节点的绑定)。
默认的 OpenShift Container Platform Pod 调度程序负责确定将新的 Pod 部署到集群中的节点。它读取 Pod 的数据,并根据配置的配置文件查找合适的节点。它是完全独立的,并作为一个独立的解决方案存在。它不会修改 Pod;它会为 Pod 创建一个绑定,将 Pod 绑定到特定节点。
现有的通用调度程序是平台提供的默认调度程序 *引擎*,它通过三个步骤操作选择一个节点来托管 Pod
根据指定的约束或要求过滤可用节点。这是通过运行每个节点通过称为 *谓词* 或 *过滤器* 的过滤器函数列表来完成的。
这是通过将每个节点传递给一系列 *优先级* 或 *评分* 函数来实现的,这些函数为其分配 0-10 之间的分数,其中 0 表示不匹配,10 表示非常匹配以托管 Pod。调度程序配置还可以为每个评分函数采用简单的 *权重*(正数值)。每个评分函数提供的节点分数乘以权重(大多数分数的默认权重为 1),然后通过添加所有分数为每个节点提供的分数来组合。管理员可以使用此权重属性来赋予某些分数更高的重要性。
根据节点分数对节点进行排序,并选择分数最高的节点来托管 Pod。如果多个节点具有相同的高分,则随机选择其中一个。
OpenShift Container Platform 中调度的一个重要用例是支持灵活的亲和性和反亲和性策略。
管理员可以通过在节点上指定标签来为其基础设施(节点)定义多个拓扑级别。例如:region=r1
、zone=z1
、rack=s1
。
这些标签名称没有任何特定含义,管理员可以自由命名其基础设施级别,例如城市/建筑物/房间。此外,管理员可以为其基础设施拓扑定义任意数量的级别,通常三个级别就足够了(例如:区域
→ 分区
→ 机架
)。管理员可以在这些级别的任意组合中指定亲和性和反亲和性规则。
管理员应该能够配置调度程序以在任何拓扑级别甚至多个级别指定亲和性。特定级别的亲和性表示属于同一服务的全部 Pod 都调度到属于同一级别的节点上。这通过允许管理员确保对等 Pod 不会地理位置过于分散来处理应用程序的任何延迟要求。如果在同一亲和性组内没有可用的节点来托管 Pod,则不调度该 Pod。
如果您需要更精细地控制 Pod 的调度位置,请参阅使用节点亲和性规则控制 Pod 在节点上的放置和使用亲和性和反亲和性规则相对于其他 Pod 安排 Pod。
这些高级调度功能允许管理员指定可以在哪个节点上调度 Pod,以及强制或拒绝相对于其他 Pod 的调度。
管理员应该能够配置调度程序以在任何拓扑级别甚至多个级别指定反亲和性。特定级别的反亲和性(或“分散”)表示属于同一服务的全部 Pod 都分散在属于该级别的节点上。这确保了应用程序为了高可用性目的而得到良好分散。调度程序尝试尽可能均匀地将服务 Pod 分散到所有适用的节点上。
如果您需要更精细地控制 Pod 的调度位置,请参阅使用节点亲和性规则控制 Pod 在节点上的放置和使用亲和性和反亲和性规则相对于其他 Pod 安排 Pod。
这些高级调度功能允许管理员指定可以在哪个节点上调度 Pod,以及强制或拒绝相对于其他 Pod 的调度。