Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

DPDK 节点上的控制 Pod 调度

总结 云原生 Contrail 网络 22.2 版支持自定义插件,该插件可根据节点接口容量调度 Pod。此插件包含多个 API,用于过滤并选择用于 Pod 分配的最佳 DPDK 节点。

Kubernetes 中的 Pod 调度

在 Kubernetes 中,调度器可以监控 Pod 新创建的 Pod,无需分配节点。计划程序尝试使用过滤阶段和评分阶段将这些 Pod 分配给合适的节点。根据 Pod 的资源需求等属性过滤潜在节点。如果节点没有 Pod 的可用资源,该节点将过滤掉。如果多个节点通过过滤阶段,Kubernetes 将根据剩余节点对给定 Pod 的适用性进行评分和排名。调度程序将 Pod 分配给排名最高的节点。如果两个节点的分数相同,则调度程序会随机选择一个节点。

Kubernetes 调度框架概述

Kubernetes 调度框架将新的调度 API 添加到默认的群集调度器中,以实现扩展计划功能。该框架会为每个 Pod 执行一个计划周期和一个绑定周期。计划周期为 Pod 选择最佳节点,而绑定周期将该决策应用于群集。调度和绑定周期在各自的周期过程中会公开多个扩展点。已注册插件,可在各个扩展点调用。例如,在计划周期中,公开的扩展点之一称为过滤器。当调度循环到达过滤器扩展点时,会调用过滤器插件来执行过滤任务。

Contrail 自定义时间表概述

云原生 Contrail 网络支持为高吞吐量应用部署 DPDK 节点。默认情况下,DPDK 节点的 VMI(虚拟机接口)限制为 32。这意味着一个 DPDK 节点最多可托管 32 个 Pod。Kubernetes 默认时间表目前不支持识别 DPDK 节点要求和限制的机制。因此,云原生 Contrail 网络提供了一个基于 Kubernetes 调度框架的自定义调度器,该框架实施插件 VMICapacity 以支持 DPDK 节点上的 Pod 调度。

Contrail 自定义时间表在云原生 Contrail 网络中实施

云原生 Contrail 网络自定义时间表支持在 VMICapacity 调度器框架中实施过滤器、分数和 NormalizeScore 扩展点的插件。有关这些扩展点的详细信息,请参阅以下部分。

图 1:Contrail 自定义时间表扩展点 Contrail Custom Scheduler Extension Points

滤波器

这些插件会过滤掉无法运行 Pod 的节点。根据 VMI 容量过滤节点。如果某个节点拥有已分配的最大 Pod 数量,则该节点将过滤掉,并且调度程序会将该 Pod 标记为该节点上不可用。在此阶段,还会根据识别 DPDK 节点的用户配置 nodeLabels ,过滤掉非 DPDK 节点。

得分

这些插件会对通过过滤阶段的节点进行排名。计划程序会为每个节点调用一系列评分插件。在云原生 Contrail 网络中,节点的分数基于节点中当前处于活动状态的 VVI 数量。如果只有一个节点通过了过滤器阶段,则跳过分数和 NormalizeScore 扩展点,并且计划程序会将该 Pod 分配给该节点。

标准化分数

这些插件在计划程序计算节点的最终排名之前修改节点分数。节点上的活动 VVI 数量决定了该节点的分数。活动 VVI 的数量越高,分数越低,反之亦然。分数在 0-100 的范围内进行规范化。完成这一 NormalizeScore 阶段后,计划程序将根据在调度器配置中定义的配置插件权重来组合所有插件的节点分数。

将 Kubernetes 调度框架部署为辅助 Scheduluer

按照以下高级步骤,将 Contrail 自定义时间表部署为与默认 Kubernetes 时间表一起运行的辅助调度器:

  1. 为自定义调度程序创建配置文件。
  2. 创建一个具有适当容量安装和标记的全新部署,并为您的调度器配置设置标记。
  3. 验证您希望自定义计划程序安排的 Pod。

有关更多信息,请参阅以下部分。

为自定义调度程序创建配置文件

自定义调度程序需要一个 kubeconfig 和一个调度器配置文件。考虑以下示例计划程序配置文件:

请注意以下字段:

  • schedulerName:自定义时间表的名称。此名称对群集必须是唯一的。如果您希望使用此调度器调度 Pod,则必须定义此字段。
  • kubeconfig:Pod 文件系统上安装的文件的路径 kubeconfig
  • maxVMICount:DPDK 节点容纳的最大 VMI 数。
  • nodeLabels:一组标识 DPDK 节点的标签。
  • VMICapacity:使 Kubernetes 能够确定 DPDK 节点的 VMI 容量的插件名称。

创建 Vanilla 部署,为您的调度器配置提供适当的容量安装和标记

请确保在单个节点上不会运行多个调度器部署实例,这会导致端口冲突。在满足高可用性 (HA) 要求的情况下,使用 节点关联规则守护程序集 ,以便在单独的节点上运行调度器的多个实例。根据需要修改调度器配置,以启用领导者选举。有关领导者选举的更多信息,请参阅以下 Kubernetes 文章中的“启用领导者选举部分”: 配置多个调度器

以下 YAML 文件显示了调度器部署的示例:

注意:

在启动调度器部署 YAML 之前,您必须为调度器创建一个命名空间。调度器在您创建的命名空间下运行。

验证 Pod 是否希望自定义调度程序进行调度

以下 Pod 清单显示了使用辅助时间表进行 Pod 部署的示例:

请注意。 schedulerName这个字段告诉 Kubernetes 在部署 Pod 时要使用哪个调度器。您必须在希望以这种方式部署的每个 Pod 清单中定义此字段。如果群集中不存在指定的调度器,Pod 的部署状态将保持挂起。