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


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

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

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

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

Scheduling hosts

7.1. 使用放置服务进行 Prefiltering

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

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

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

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

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

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

流程

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

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

7.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. 要过滤具有禁止特征的主机或主机聚合,请将特征添加到镜像额外规格中。例如,要防止实例调度到支持 multi-attach 卷的主机或主机聚合,请将以下特征添加到镜像额外规格中:

    (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

7.1.3. 通过隔离主机聚合过滤

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

流程

  1. 打开 Compute 环境文件。
  2. 要将主机聚合隔离为仅与聚合元数据匹配的实例,请在 Compute 环境文件中将 NovaSchedulerEnableIsolatedAggregateFiltering 参数设置为 True
  3. 保存对 Compute 环境文件的更新。
  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. 将特征的 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>

7.1.4. 使用放置服务根据可用区过滤

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

流程

  1. 打开 Compute 环境文件。
  2. 要使用放置服务根据可用区过滤,请在 Compute 环境文件中将 NovaSchedulerQueryPlacementForAvailabilityZone 参数设置为 True
  3. NovaSchedulerEnabledFilters 参数中删除 AvailabilityZoneFilter 过滤器。
  4. 保存对 Compute 环境文件的更新。
  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
返回顶部