https://docs.openstack.org/nova/latest/admin/scheduling.html
在默认的配置中,调度器将考虑如下的几个方面:
- 请求的是Availability Zone
- nova-compute服务在目标节点上是启用的
- 满足实例类型的extra specs(ComputeCapabilityesFilter)
- 满足实例镜像的需求参数,如architecture,hypervisor type,virtual machine mode等等(Image ProperitiesFilter)
- 与其他的实例运行在不同的节点(如果有需求)(主要是考虑ServerGroupAntiAffinityFilter)
- 位于主机组之中(ServerGroupAffinityFilter)
当实例在迁移、调整大小、驱逐或者在shelve offloaded之后再unshelved。当从节点中驱逐实例,调度器负责在管理员指定的节点上执行nova evacuate命令。如果管理员并未指定驱逐后的目标节点,调度器将会自动选择。
Prefilters
从Rocky版本开始,调度器的进程包含一个预过滤的步骤来提升子阶段的效率。旨在减少候选计算节点的数量。除了以下列出的过滤器以外,还支持其他的过滤器,可参考:https://docs.openstack.org/nova/latest/admin/aggregates.html#tenant-isolation-with-placement
Compute Image Type Support
从Train版本开始,该过滤器用于排除不满足镜像引导需求的disk_format的计算节点。通过设置scheduler.query_placement_for_image_type_support=true启用。
Compute Diabled Status Support
从Train版本开始,该过滤器用于排除禁用的计算节点。当计算节点有COMPUTE_STATUS_DISABLED污点将被排除作为候选节点。该污点是被nova-compute服务管理的并镜像该disabled status到相关的计算服务并记录在os-services API。
如果在状态发生改变时,计算服务down了,该污点将在计算服务重启时进行同步。相同的,当尝试给资源供应节点添加或者移除污点时发生错误,该污点将会在update_available_resource任务执行时进行同步。这个任务间隙由update_resources_interval配置进行控制。
Isolate Aggregates
从Train版本开始,有一个可选的隔离主机聚合过滤器。当启用时,traits被写入到实例类型中以及镜像必须至少是聚合元数据中所需的映像,以便服务器有资格在该聚合中的主机上启动。
The Filter Scheduler
Wallaby发生变更:移除对自定义调度器的支持。过滤调度器目前仅支持nova。
nova调度器及filter 调度器,支持过滤和权重确认新实例运行的位置。
当调度器接收到对资源的请求,它首先应用过滤器决定在调度资源时哪些节点有资格被考虑。过滤器是二进制的:主机要么被过滤器接受,要么被拒绝。然后,过滤器接受的主机由不同的算法处理,以决定为该请求使用哪些主机,这被描述在Weights section。
filter_scheduler.available_filters配置参数提供调度器可用的过滤器。默认情况下指定计算服务的所有过滤器。该配置参数可以被多次进行配置。如果你有自定义的过滤器和系统默认的过滤器,并且你都想同时使用,那么在配置文件中,可以如下表示:
通过filter_scheduler.enabled_filters应用列表中的过滤器。
Filters
以下描述可用的计算过滤器。使用如下的配置参数配置filter:
- filter_scheduler.available_filters:定义调度器可用的过滤器
- filter_scheduler.enabled_filters:定义调度器默认应用的过滤器
每个过滤器选择主机的方式不同,开销也不同。filter_scheduler.enable_filters的顺序影响调度的性能。普遍的建议是尽快过滤掉不可用的主机来避免不必要的开销。我们可以按照过滤器的开销反向进行排序。比如ComputeFilter在NUMATopologyFilter之前就比较好。
在大型的环境中,AvailabilityZoneFilter在其他容量或计算过滤器之前就很有用。
AggregateImagePropertiesIsolation
从Liberty发生变更:在Liberity版本之前,可以通过此过滤器指定和使用任意元数据。从Liberty开始,nova只解析标准元数据。如果你希望使用任意的元数据,考虑使用AggregateInstanceExtraSpecsFilter。
将镜像元数据中定义的属性与聚合的属性进行匹配,以确定主机匹配:
- 如果一个主机属于一个聚合,该聚合定义了一个或多个元数据并且匹配镜像中的元数据,那么该主机就会作为候选节点引导镜像实例。
- 如果主机不属于任一聚合,那么它可以引导所有镜像的实例。
你可以配置AggregateImagePropertiesIsolation通过以下的配置选项:
-
filter_scheduler.aggregate_image_properties_isolation_namespace
default:<None>
在host aggregate中使用的镜像property。
镜像和主机可以被配置成特定的镜像只能运行在特定的aggregate中的主机上。这是通过在主机聚合上设置元数据值来完成的,这些元数据值以该选项的值开头标识。如果主机作为aggregate的一部分并拥有该元数据的key,那么镜像也必须拥有该元数据,这样调度器才会任务该主机是可接受的。
该选项只会被FilterScheduler和子类型使用,如果你使用不同的调度器,这个参数将不会有任何的影响。同时需要注意,该设置只会在启用aggregate_image_properties_isolation过滤器时才有用。
可能的值:- 字符串,该字符串对应于镜像属性命名空间。
相关选项:
- aggregate_image_properties_isolation_separator
-
filter_scheduler.aggregate_image_properties_isolation_separator
default: .
属性和命名空间的分隔符。
当使用aggregate_image_properties_isolation过滤器时,相关的元数据键使用aggregate_image_properties_isolation_namespace配置选项中定义的名称空间加上分隔符作为前缀。此选项定义要使用的分隔符。
此选项仅由FilterScheduler及其子类使用;如果使用其他调度器,则此选项不起作用。还要注意,如果启用了“aggregate_image_properties_isolation”过滤器,则此设置仅影响调度。
AggregateInstanceExtraSpecsFilter
对实例定义的exra specs参数与管理员给aggregate定义的参数匹配。适用于用aggregate_instance_extra_specs限定范围的规范。可以指定多个值。为了向后兼容,也适用于无作用域的规范;高度不建议使用此操作,因为当您同时启用ComputeCapabilitiesFilter过滤器时,它会与之冲突。
AggregateIoOpsFilter
单台主机最大的iops。max_io_ops_per_host。如果一个主机位于多个aggregate中并且有多个max_io_ops_per_host,以最小值为准。
AggregateMultiTenancyIsolation
限制租户到aggregate。
AggregateNumInstancesFilter
限制aggregate中每个主机最大实例数。
AggregateTypeAffinityFilter
如果实例的名称与聚合元数据中设置的instance_type键匹配,或者没有设置instance_type键,则过滤聚合中的主机。
AllostsFilter
AvailabilityXoneFilter
ComputeCapabilityesFilter
ComputeFilter
DifferentHostFilter
将实例调度到与指定实例运行的不同的节点。