第 7 章 配置实例调度和放置
计算调度程序服务决定将实例放置到哪个 Compute 节点或主机聚合上。当计算(nova)服务收到启动或移动实例的请求时,它使用请求、类别和镜像中提供的规格来查找合适的主机。例如,类别可以指定实例需要具有的特征,如存储磁盘的类型,或者 Intel CPU 指令集扩展。
计算调度程序服务使用以下组件的配置,按以下顺序决定在哪个 Compute 节点上启动或移动实例:
- 放置服务 prefilters :计算调度程序服务使用放置服务根据特定属性过滤候选 Compute 节点集合。例如,放置服务会自动排除禁用的 Compute 节点。
- 过滤器 :由计算调度程序服务使用来确定在其上启动实例的初始计算节点集合。
- Weights:计算调度程序服务通过权重系统来优先选择过滤的 Compute 节点。最高的权重具有最高的优先级。
在以下示意图中,主机 1 和 3 在过滤后有资格。主机 1 具有最高的权重,因此具有调度最高的优先级。
7.1. 使用放置服务进行过滤 复制链接链接已复制到粘贴板!
计算服务(nova)在创建和管理实例时与放置服务交互。放置服务跟踪资源提供程序的清单和使用,如 Compute 节点、共享存储池或 IP 分配池,以及它们的可用数量资源,如可用的 vCPU。任何需要管理资源选择和消耗的服务都可以使用放置服务。
放置服务还跟踪可用定性资源到资源提供程序的映射,如资源提供程序具有的存储磁盘特征的类型。
放置服务根据放置服务资源提供程序清单和特征将 prefilters 应用到一组候选 Compute 节点。您可以基于以下条件创建 prefilters:
- 支持的镜像类型
- 遍历
- 项目或租户
- 可用区
7.1.1. 根据请求的镜像类型支持过滤 复制链接链接已复制到粘贴板!
您可以排除不支持启动实例的镜像的磁盘格式的 Compute 节点。当您的环境使用 Red Hat Ceph Storage 作为临时后端时,这很有用,它不支持 QCOW2 镜像。启用此功能可确保调度程序不会向由 Red Hat Ceph Storage 支持的 Compute 节点发送使用 QCOW2 镜像启动实例的请求。
流程
-
在工作站上打开
OpenStackControlPlane自定义资源(CR)文件openstack_control_plane.yaml。 将
customServiceConfig参数添加到 Compute 调度程序(nova-scheduler)模板schedulerServiceTemplate,以配置计算调度程序服务,以根据请求的镜像类型支持过滤:apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: extraMounts: ... nova: template: schedulerServiceTemplate: customServiceConfig: | [scheduler] query_placement_for_image_type_support = true更新 control plane:
$ oc apply -f openstack_control_plane.yaml -n openstack等待 RHOCP 创建与
OpenStackControlPlaneCR 相关的资源。运行以下命令来检查状态:$ oc get openstackcontrolplane -n openstack当状态为 "Setup complete" 时,会创建
OpenStackControlPlane资源。提示在
get命令的末尾附加 -w 选项以跟踪部署进度。-
可选:查看您创建的每个单元的
openstack命名空间中的 pod,以确认部署了 control plane。当所有 pod 都已完成或运行时,会部署 control plane。
7.1.2. 根据资源供应商特征过滤 复制链接链接已复制到粘贴板!
每个资源提供程序都有一组特征。特征是资源提供程序的定性方面,例如存储磁盘类型或 Intel CPU 指令集扩展。
Compute 节点报告放置服务的功能作为特征。实例可以指定它所需的这些特征,或者资源提供程序不能有的特征。计算调度程序可以使用这些特征来识别合适的 Compute 节点或主机聚合来托管实例。
要让您的云用户在具有特定特征的主机上创建实例,您可以定义需要或禁止特定特征的类别,您可以创建需要或禁止特定特征的镜像。
有关可用特征的列表,请参阅 os-traits 库。您还可以根据需要创建自定义特征。
7.1.2.1. 创建需要或禁止资源供应商特征的镜像 复制链接链接已复制到粘贴板!
您可以创建实例镜像,可供您的云用户在具有特定特征的主机上启动实例。
先决条件
-
您已在工作站上安装了
oc和podman命令行工具。 - 以具有 cluster-admin 权限的用户身份登录到可访问 RHOSO 控制平面的工作站。
流程
从您的工作站访问 OpenStackClient pod 的远程 shell:
$ oc rsh -n openstack openstackclient进入 cloud-admin 主目录:
$ cd /home/cloud-admin创建新镜像:
$ openstack image create ... trait-image确定需要主机或主机聚合的特征。您可以选择现有的特征或创建新特征:
要使用现有的特征,请列出现有的特征来检索特征名称:
$ openstack --os-placement-api-version 1.6 trait list要创建新特征,请输入以下命令:
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAME自定义特征必须以前缀
CUSTOM_开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。
收集每个主机的现有资源供应商特征:
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')检查所需主机或主机聚合的现有资源提供程序特征:
$ echo $existing_traits如果所需特征还没有添加到资源供应商中,请将现有的特征和所需的特征添加到每个主机的资源供应商中:
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <TRAIT_NAME> \ <host_uuid>将 <
TRAIT_NAME> 替换为您要添加到资源供应商的特征名称。您可以根据需要多次使用--trait选项来添加其他特征。注意此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。
要将实例调度到具有所需特征的主机或主机聚合上,请将特征添加到镜像额外规格中。例如,要将实例调度到支持 AVX-512 的主机或主机聚合上,请将以下特征添加到镜像额外规格中:
$ openstack image set \ --property trait:HW_CPU_X86_AVX512BW=required \ trait-image要过滤掉具有禁止特征的主机或主机聚合,请将特征添加到镜像额外规格中。例如,要防止将实例调度到支持多重附加卷的主机或主机聚合上,请将以下特征添加到镜像额外规格中:
$ openstack image set \ --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \ trait-image退出 openstackclient pod:
$ exit
7.1.2.2. 创建需要或禁止资源提供程序特征的类别 复制链接链接已复制到粘贴板!
您可以创建类别,可供您的云用户用于在具有特定特征的主机上启动实例。
先决条件
-
您已在工作站上安装了
oc和podman命令行工具。 - 以具有 cluster-admin 权限的用户身份登录到可访问 RHOSO 控制平面的工作站。
流程
从您的工作站访问 OpenStackClient pod 的远程 shell:
$ oc rsh -n openstack openstackclient进入 cloud-admin 主目录:
$ cd /home/cloud-admin创建类别:
$ openstack flavor create --vcpus 1 --ram 512 \ --disk 2 trait-flavor确定需要主机或主机聚合的特征。您可以选择现有的特征或创建新特征:
要使用现有的特征,请列出现有的特征来检索特征名称:
$ openstack --os-placement-api-version 1.6 trait list要创建新特征,请输入以下命令:
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAME自定义特征必须以前缀
CUSTOM_开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。
收集每个主机的现有资源供应商特征:
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')检查所需主机或主机聚合的现有资源提供程序特征:
$ echo $existing_traits如果所需特征还没有添加到资源供应商中,请将现有的特征和所需的特征添加到每个主机的资源供应商中:
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <TRAIT_NAME> \ <host_uuid>将 <
TRAIT_NAME> 替换为您要添加到资源供应商的特征名称。您可以根据需要多次使用--trait选项来添加其他特征。注意此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。
要将实例调度到具有所需特征的主机或主机聚合上,请将特征添加到类别额外规格中。例如,要将实例调度到支持 AVX-512 的主机或主机聚合上,请将以下特征添加到类别额外规格中:
$ openstack flavor set \ --property trait:HW_CPU_X86_AVX512BW=required \ trait-flavor要过滤掉具有禁止特征的主机或主机聚合,请将特征添加到类别额外规格中。例如,要防止将实例调度到支持多重附加卷的主机或主机聚合上,请将以下特征添加到类别额外规格中:
$ openstack flavor set \ --property trait:COMPUTE_VOLUME_MULTI_ATTACH=forbidden \ trait-flavor退出 openstackclient pod:
$ exit
7.1.3. 通过隔离主机聚合进行过滤 复制链接链接已复制到粘贴板!
您可以将主机聚合上的调度限制为那些类别和镜像特征与主机聚合的元数据匹配的实例。类别和镜像元数据的组合必须要求所有主机聚合特征有资格在该主机聚合中的 Compute 节点上调度。
先决条件
-
已在工作站上安装了
oc和podman命令行工具。 -
以具有
cluster-admin权限的用户身份登录到可访问 RHOSO 控制平面的工作站。
流程
从您的工作站访问
OpenStackClientpod 的远程 shell:$ oc rsh -n openstack openstackclient确定您要隔离主机聚合的特征。您可以选择现有的特征或创建新特征:
要使用现有的特征,请列出现有的特征来检索特征名称:
$ openstack --os-placement-api-version 1.6 trait list要创建新特征,请输入以下命令:
$ openstack --os-placement-api-version 1.6 trait \ create CUSTOM_TRAIT_NAME注意自定义特征必须以前缀
CUSTOM_开头,并且仅包含字母 A 到 Z、数字 0 到 9,以及下划线 "_" 字符。
收集每个 Compute 节点的现有资源供应商特征:
$ existing_traits=$(openstack --os-placement-api-version 1.6 resource provider trait list -f value <host_uuid> | sed 's/^/--trait /')检查您要隔离主机聚合的现有资源提供程序特征:
$ echo $existing_traits如果所需特征还没有添加到资源提供程序中,请将现有的特征和所需的特征添加到主机聚合中每个 Compute 节点的资源供应商中:
$ openstack --os-placement-api-version 1.6 \ resource provider trait set $existing_traits \ --trait <trait_name> \ <host_uuid>-
将 <
trait_name> 替换为您要添加到资源供应商的特征名称。您可以根据需要多次使用--trait选项来添加其他特征。 将
<host_uuid> 替换为主机的 UUID。注意此命令对资源提供程序执行特征的完整替换。因此,您必须检索主机上现有资源供应商特征列表,然后再次设置它们,以防止被删除。
-
将 <
- 对主机聚合中的每个 Compute 节点重复步骤 6 - 8。
将 trait 的 metadata 属性添加到主机聚合中:
$ openstack --os-compute-api-version 2.53 aggregate set \ --property trait:<trait_name>=required <aggregate_name>将特征添加到类别或镜像:
$ openstack flavor set \ --property trait:<trait_name>=required <flavor> $ openstack image set \ --property trait:<trait_name>=required <image>退出
OpenStackClientpod:$ exit
其他资源