Filter Scheduler

Filter Scheduler 支持 过滤 zun 计算主机,以便决定新的容器应该在何处创建。

过滤

Filter Scheduler 遍历所有找到的计算主机,评估每个主机是否符合一组过滤器。然后,Scheduler 为请求的容器选择一个主机。特定的过滤器可以决定是允许还是过滤掉特定的主机。该决定基于用户请求规范、主机状态和/或一些额外信息。

如果 Scheduler 找不到适合容器的候选主机,则意味着没有合适的宿主机可以调度该容器。

Filter Scheduler 拥有一组内置的 filters(过滤器)。如果内置过滤器不足以满足需求,您可以实现自己的过滤器,并使用您自己的过滤算法。

有许多标准的过滤器类可供使用 (zun.scheduler.filters)

  • CPUFilter - 基于 CPU 核心利用率进行过滤。它传递具有足够 CPU 核心数量的主机。

  • RamFilter - 根据主机的 RAM 对主机进行过滤。只有具有足够 RAM 来托管实例的主机才会被传递。

  • LabelFilter - 根据主机是否具有 CLI 指定的标签进行过滤。

  • ComputeFilter - 过滤处于运行和启用状态的主机。通常,您应该始终启用此过滤器。

  • RuntimeFilter - 根据主机的运行时对主机进行过滤。它传递具有指定运行时的主机。

配置过滤器

要使用过滤器,您需要指定两个设置

  • filter_scheduler.available_filters - 定义可供调度器使用的过滤器类。

  • filter_scheduler.enabled_filters - 在可用的过滤器中,定义调度器默认使用的过滤器。

这些设置在 zun.conf 中的默认值是

--filter_scheduler.available_filters=zun.scheduler.filters.all_filters
--filter_scheduler.enabled_filters=RamFilter,CPUFilter,ComputeFilter,RuntimeFilter

使用此配置,zun.scheduler.filters 中的所有过滤器都将可用,并且默认情况下将使用 RamFilter 和 CPUFilter。

编写您自己的过滤器

要创建您自己的过滤器,您必须从 BaseHostFilter 继承并实现一个方法:host_passes。如果主机通过过滤器,此方法应返回 True

P.S.: 您可以在 zun.tests.scheduler 中找到更多关于使用 Filter Scheduler 和标准过滤器的示例。