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 和标准过滤器的示例。