第 8 章 配置实例调度和放置


计算调度程序服务决定将实例放置到哪个 Compute 节点或主机聚合上。当计算(nova)服务收到启动或移动实例的请求时,它使用请求、类别和镜像中提供的规格来查找合适的主机。例如,类别可以指定实例需要具有的特征,如存储磁盘的类型,或者 Intel CPU 指令集扩展。

计算调度程序服务使用以下组件的配置,按以下顺序决定在哪个 Compute 节点上启动或移动实例:

  1. 放置服务 prefilters :计算调度程序服务使用放置服务根据特定属性过滤候选 Compute 节点集合。例如,放置服务会自动排除禁用的 Compute 节点。
  2. 过滤器 :由计算调度程序服务使用来确定在其上启动实例的初始计算节点集合。
  3. Weights:计算调度程序服务通过权重系统来优先选择过滤的 Compute 节点。最高的权重具有最高的优先级。

在以下示意图中,主机 1 和 3 在过滤后有资格。主机 1 具有最高的权重,因此具有调度最高的优先级。

Scheduling hosts

8.1. 使用放置服务进行过滤

计算服务(nova)在创建和管理实例时与放置服务交互。放置服务跟踪资源提供程序的清单和使用情况,如 Compute 节点、共享存储池或 IP 分配池,以及它们的可用数量资源,如可用的 vCPU。任何需要管理资源选择和消耗的服务都可以使用放置服务。

放置服务还跟踪可用定性资源到资源提供程序的映射,如资源提供程序具有的存储磁盘特征的类型。

放置服务根据放置服务资源提供程序清单和特征将 prefilters 应用到一组候选 Compute 节点。您可以基于以下条件创建 prefilters:

  • 支持的镜像类型
  • 遍历
  • 项目或租户
  • 可用区

8.1.1. 根据请求的镜像类型支持过滤

您可以排除不支持启动实例的镜像的磁盘格式的 Compute 节点。当您的环境使用 Red Hat Ceph Storage 作为临时后端时,这很有用,它不支持 QCOW2 镜像。启用此功能可确保调度程序不会向由 Red Hat Ceph Storage 支持的 Compute 节点发送使用 QCOW2 镜像启动实例的请求。

流程

  1. 打开您的 Compute 环境文件。
  2. 要排除不支持启动实例的镜像的磁盘格式的 Compute 节点,请在 Compute 环境文件中将 NovaSchedulerQueryImageType 参数设置为 True
  3. 将更新保存到计算环境文件。
  4. 使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
     -e [your environment files] \
     -e /home/stack/templates/<compute_environment_file>.yaml

8.1.2. 根据资源供应商特征过滤

每个资源提供程序都有一组特征。特征是资源提供程序的定性方面,例如存储磁盘类型或 Intel CPU 指令集扩展。

Compute 节点报告放置服务的功能作为特征。实例可以指定它所需的这些特征,或者资源提供程序不能有的特征。计算调度程序可以使用这些特征来识别合适的 Compute 节点或主机聚合来托管实例。

要让您的云用户在具有特定特征的主机上创建实例,您可以定义需要或禁止特定特征的类别,您可以创建需要或禁止特定特征的镜像。

有关可用特征的列表,请参阅 os-traits。您还可以根据需要创建自定义特征。

您可以创建实例镜像,可供您的云用户在具有特定特征的主机上启动实例。

流程

  1. 创建新镜像:

    (overcloud)$ openstack image create ... trait-image
  2. 确定需要主机或主机聚合的特征。您可以选择现有的特征或创建新特征:

    • 要使用现有的特征,请列出现有的特征来检索特征名称:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait list
    • 要创建新特征,请输入以下命令:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait \
       create CUSTOM_TRAIT_NAME

      自定义特征必须以前缀 CUSTOM_ 开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。

  3. 收集每个主机的现有资源供应商特征:

    (overcloud)$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')
  4. 检查所需主机或主机聚合的现有资源提供程序特征:

    (overcloud)$ echo $existing_traits
  5. 如果所需特征还没有添加到资源供应商中,请将现有的特征和所需的特征添加到每个主机的资源供应商中:

    (overcloud)$ openstack --os-placement-api-version 1.6 \
     resource provider trait set $existing_traits \
     --trait <TRAIT_NAME> \
     <host_uuid>

    将 < TRAIT_NAME > 替换为您要添加到资源供应商的特征名称。您可以根据需要 多次使用--trait 选项来添加其他特征。

    注意

    此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。

  6. 要将实例调度到具有所需特征的主机或主机聚合上,请将特征添加到镜像额外规格中。例如,要将实例调度到支持 AVX-512 的主机或主机聚合上,请将以下特征添加到镜像额外规格中:

    (overcloud)$ openstack image set \
     --property trait:HW_CPU_X86_AVX512BW=required \
     trait-image
  7. 要过滤掉具有禁止特征的主机或主机聚合,请将特征添加到镜像额外规格中。例如,要防止将实例调度到支持多重附加卷的主机或主机聚合上,请将以下特征添加到镜像额外规格中:

    (overcloud)$ openstack image set \
     --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \
     trait-image

您可以创建类别,可供您的云用户用于在具有特定特征的主机上启动实例。

流程

  1. 创建类别:

    (overcloud)$ openstack flavor create --vcpus 1 --ram 512 \
     --disk 2 trait-flavor
  2. 确定需要主机或主机聚合的特征。您可以选择现有的特征或创建新特征:

    • 要使用现有的特征,请列出现有的特征来检索特征名称:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait list
    • 要创建新特征,请输入以下命令:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait \
       create CUSTOM_TRAIT_NAME

      自定义特征必须以前缀 CUSTOM_ 开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。

  3. 收集每个主机的现有资源供应商特征:

    (overcloud)$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')
  4. 检查所需主机或主机聚合的现有资源提供程序特征:

    (overcloud)$ echo $existing_traits
  5. 如果所需特征还没有添加到资源供应商中,请将现有的特征和所需的特征添加到每个主机的资源供应商中:

    (overcloud)$ openstack --os-placement-api-version 1.6 \
     resource provider trait set $existing_traits \
     --trait <TRAIT_NAME> \
     <host_uuid>

    将 < TRAIT_NAME > 替换为您要添加到资源供应商的特征名称。您可以根据需要 多次使用--trait 选项来添加其他特征。

    注意

    此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。

  6. 要将实例调度到具有所需特征的主机或主机聚合上,请将特征添加到类别额外规格中。例如,要将实例调度到支持 AVX-512 的主机或主机聚合上,请将以下特征添加到类别额外规格中:

    (overcloud)$ openstack flavor set \
     --property trait:HW_CPU_X86_AVX512BW=required \
     trait-flavor
  7. 要过滤掉具有禁止特征的主机或主机聚合,请将特征添加到类别额外规格中。例如,要防止将实例调度到支持多重附加卷的主机或主机聚合上,请将以下特征添加到类别额外规格中:

    (overcloud)$ openstack flavor set \
     --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \
     trait-flavor

8.1.3. 通过隔离主机聚合进行过滤

您可以将主机聚合上的调度限制为那些类别和镜像特征与主机聚合的元数据匹配的实例。类别和镜像元数据的组合必须要求所有主机聚合特征有资格在该主机聚合中的 Compute 节点上调度。

流程

  1. 打开您的 Compute 环境文件。
  2. 要隔离主机聚合,以仅托管其类别和镜像特征与聚合元数据匹配的实例,请在 Compute 环境文件中将 NovaSchedulerEnableIsolatedAggregateFiltering 参数设置为 True
  3. 将更新保存到计算环境文件。
  4. 使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
     -e [your environment files] \
     -e /home/stack/templates/<compute_environment_file>.yaml
  5. 确定您要隔离主机聚合的特征。您可以选择现有的特征或创建新特征:

    • 要使用现有的特征,请列出现有的特征来检索特征名称:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait list
    • 要创建新特征,请输入以下命令:

      (overcloud)$ openstack --os-placement-api-version 1.6 trait \
       create CUSTOM_TRAIT_NAME

      自定义特征必须以前缀 CUSTOM_ 开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。

  6. 收集每个 Compute 节点的现有资源供应商特征:

    (overcloud)$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')
  7. 检查您要隔离主机聚合的现有资源提供程序特征:

    (overcloud)$ echo $existing_traits
  8. 如果所需特征还没有添加到资源提供程序中,请将现有的特征和所需的特征添加到主机聚合中每个 Compute 节点的资源供应商中:

    (overcloud)$ openstack --os-placement-api-version 1.6 \
     resource provider trait set $existing_traits \
     --trait <TRAIT_NAME> \
     <host_uuid>

    将 < TRAIT_NAME > 替换为您要添加到资源供应商的特征名称。您可以根据需要 多次使用--trait 选项来添加其他特征。

    注意

    此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。

  9. 对主机聚合中的每个 Compute 节点重复步骤 6 - 8。
  10. 将 trait 的 metadata 属性添加到主机聚合中:

    (overcloud)$ openstack --os-compute-api-version 2.53 aggregate set \
     --property trait:<TRAIT_NAME>=required <aggregate_name>
  11. 将特征添加到类别或镜像:

    (overcloud)$ openstack flavor set \
     --property trait:<TRAIT_NAME>=required <flavor>
    (overcloud)$ openstack image set \
     --property trait:<TRAIT_NAME>=required <image>

8.1.4. 使用放置服务根据可用区进行过滤

您可以使用放置服务来遵循可用区请求。要使用放置服务根据可用区过滤,放置聚合必须存在以匹配可用区主机聚合的成员资格和 UUID。

流程

  1. 打开您的 Compute 环境文件。
  2. 要使用放置服务根据可用区过滤,请在 Compute 环境文件中将 NovaSchedulerQueryPlacementForAvailabilityZone 参数设置为 True
  3. NovaSchedulerEnabledFilters 参数中删除 AvailabilityZoneFilter 过滤器。
  4. 将更新保存到计算环境文件。
  5. 使用其他环境文件将计算环境文件添加到堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
     -e [your environment files] \
     -e /home/stack/templates/<compute_environment_file>.yaml

其他资源

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部