openstack nova scheduler 调度,过滤器(Filter)筛选规则

一、核心概念

OpenStack Nova的调度器(nova-scheduler),其职责是从集群中筛选出符合创建虚拟机条件的计算节点。过滤器(Filter)是筛选的核心逻辑,通过“过滤-权衡”流程缩小候选节点范围。

二、规则信息拆解

1. 过滤器执行流程

日志中的Filter results显示过滤器按顺序执行,每个过滤器消费startend的剩余候选节点(数量变化反映过滤严格度):

  • RetryFilter
    • 作用:根据“重试记录”(如前次失败的节点)过滤候选节点,避免重复调度到已失败的节点。
    • 举例:若前次创建VM时某节点故障,重试时该过滤器会剔除该故障节点。
    • 日志表现:两次请求中,RetryFilter均从2112节点开始,结束时仍为2112(说明无重试记录,未过滤节点)。
  • AvailabilityZoneFilter
    • 作用:按“可用区(Availability Zone, AZ)”筛选节点,确保VM创建在用户指定的AZ内。
    • 举例:用户请求将VM创建在az1,则该过滤器只保留属于az1的计算节点。
    • 日志表现:两次请求中,该过滤器输入/输出均为2112节点(说明所有节点都在同一AZ,或用户未指定AZ,未过滤节点)。
  • CoreFilter
    • 作用:校验节点的vCPU资源(核心数、超线程等)是否满足VM需求。
    • 举例:若VM要求4 vCPU,节点需有足够未分配的vCPU配额。
    • 日志表现:两次请求中,该过滤器输入/输出均为2112节点(说明所有节点vCPU资源充足,未过滤节点)。
  • RamFilter
    • 作用:校验节点的内存资源是否满足VM需求(如VM要16GB内存,节点需有足够空闲内存)。
    • 举例:若集群中某节点内存占用过高(仅剩2GB),而VM需8GB内存,则该节点被过滤。
    • 日志表现:两次请求中,该过滤器输入/输出均为2112节点(说明所有节点内存资源充足,未过滤节点)。
  • ComputeFilter
    • 作用:过滤状态异常的计算节点(如节点服务离线、维护模式、资源数据未更新等)。
    • 举例:若某计算节点nova-compute服务崩溃,该过滤器会剔除它。
    • 日志表现:两次请求中,该过滤器从2112节点开始,输出180节点(说明312个节点因状态异常被过滤,仅剩180个“健康”节点进入下一环节)。
  • ComputeCapabilitiesFilter
    • 作用:校验节点的能力属性(如硬件特性、hypervisor类型等)是否满足VM要求。
    • 举例:若VM要求“CPU型号为Intel的节点”,而某节点是AMD CPU,则该节点被过滤。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明所有剩余节点能力均满足要求,未过滤节点)。
  • ImagePropertiesFilter
    • 作用:校验镜像属性与节点特性是否匹配(如镜像要求“硬件加速特性”,节点需支持对应硬件)。
    • 举例:若镜像需“GPU加速”,则节点需配置GPU;否则节点被过滤。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明所有剩余节点与镜像属性兼容,未过滤节点)。
  • ServerGroupAntiAffinityFilter
    • 作用:实现反亲和性调度(同一“服务器组”的VM不能在同一节点)。
    • 举例:若用户创建VM时指定“与VM_A反亲和”,则该过滤器会剔除“VM_A所在节点”。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明无反亲和约束,或所有节点均不违反规则,未过滤节点)。
  • ServerGroupAffinityFilter
    • 作用:实现亲和性调度(同一“服务器组”的VM必须在同一节点)。
    • 举例:若用户创建VM时指定“与VM_B亲和”,则该过滤器只保留“VM_B所在节点”。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明无亲和约束,或所有节点均满足规则,未过滤节点)。
  • DifferentHostFilter
    • 作用:确保新创建的VM与指定VM不在同一节点(常用于“备份VM”“主从节点”隔离)。
    • 举例:若用户要求“VM_C与VM_D不在同一节点”,则该过滤器会剔除“VM_D所在节点”。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明无“不同主机”约束,或所有节点均不违反规则,未过滤节点)。
  • SameHostFilter
    • 作用:与DifferentHostFilter相反,确保新创建的VM与指定VM在同一节点(常用于“主从需同节点”的场景)。
    • 举例:若用户要求“VM_E与VM_F在同一节点”,则该过滤器只保留“VM_F所在节点”。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明无“同主机”约束,或所有节点均满足规则,未过滤节点)。
  • SimpleCIDRAffinityFilter
    • 作用:按**IP网段(CIDR)**实现亲和性/反亲和性(如“VM的调度节点IP需在10.0.0.0/24内”)。
    • 举例:若用户指定“节点IP需属于10.0.0.0/24”,则该过滤器只保留IP在此网段的节点。
    • 日志表现:两次请求中,该过滤器输入/输出均为180节点(说明无CIDR亲和约束,或所有节点IP均满足规则,未过滤节点)。
  • AggregateInstanceExtraSpecsFilter
    • 作用:校验**聚合(Aggregate)**的额外规格(Extra Specs)是否与VM的flavorimage属性匹配。聚合是“节点分组”逻辑,可为不同组的节点设置自定义约束(如“高性能组”要求SSD硬盘,“测试组”要求特定安全策略)。
    • 举例:若VM的flavor要求“ aggregates: [‘ssd_group’] ”,则该过滤器只保留属于ssd_group聚合的节点;若节点未加入该聚合或聚合未配置对应规格,则节点被过滤。
    • 日志表现:两次请求中,该过滤器从180节点开始,输出0节点(核心问题!说明所有剩余节点均不满足“聚合额外规格”约束,最终无候选节点)。

三、调度失败根因

日志结尾的AggregateInstanceExtraSpecsFilter returned 0 hosts是关键:因“聚合额外规格”过滤器未找到符合条件的节点,导致调度失败

可能原因包括:

  • VM的flavorimage指定了严格且未被任何节点满足的“聚合额外规格”(如要求ssd_group聚合,但所有节点都不在该聚合内)。
  • 节点所在的聚合未正确配置对应规格(如聚合虽存在,但未设置“SSD硬盘”等约束属性)。

四、总结

这些过滤器是OpenStack Nova调度的“筛选引擎”,通过资源、状态、策略、亲和性等维度逐步缩小候选节点范围。日志中AggregateInstanceExtraSpecsFilter是“瓶颈”,需从VM规格、节点聚合配置方向排查问题(如检查flavor绑定的聚合是否存在、节点是否加入对应聚合、聚合规格是否匹配)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值