openstack scheduler weight类

本文介绍OpenStack中计算节点的调度过程,包括通过自定义的权重类对节点进行评分,标准化权重,累加权重乘以系数,排序及选择最佳主机等步骤。

openstack weight 类主要对计算节点进行称重,最终根据各项指标返回主机的权值,

一个weight类的示例,返回未使用的虚拟CPU的数量:

class MyWeigher(weights.BaseHostWeigher):
	minval = 0
    	maxval = None

    	def _weigh_object(self, host_state, weight_properties):
        		unused_vcpus = host_state.vcpus_total - host_state.vcpus_used
        		return unused_vcpus

	def weight_multiplier(self):
      		return weight_multiplier


称重的过程主要有以下5步:

The procedure of weight action for one weight class:
1、execute _weigh_object method in weight class, get a weight list which contains metrics of every compute node. Take RamWeigher for example, the return value is:

图在下面


2、normalize:
 1)、get the minval and maxval value, these values can be got as the default configuration, if there is no default configuraion, can be get by this:
 minval = min(weigths); maxval = max(weights);
If minval is equal to maxval set the weight list to all zero then return.
 2)、execute the following expression for every element in weight list:
 i = ( i - minval ) / ( maxval - minval ).

get a new weight list.


3、accumulation:

 compute_node.weight += weigher.weight_multiplier( )  *  weight
the weight value is obtained from the weight list, for each compute node execute the above expression.


4、sort (reverse)


5、select one compute from the N best hosts, which is specified by the parameter “scheduler_host_subset_size”




<think>嗯,用户这次想深入理解OpenStack中Nova-Scheduler的过滤和权重机制。看来ta正在研究OpenStack的调度原理,可能是个云计算运维工程师或者开发人员。从提问的专业性来看,用户应该已经具备OpenStack基础架构知识。 我注意到用户特意提供了四段站内引用,虽然强调不是真实需求,但内容确实都与nova-scheduler相关。引用[1]提到可用区过滤器和内存过滤器,引用[3]说明过滤器动态加载机制,引用[4]涉及服务初始化逻辑——这些都需要整合进回答。 用户上次问过似问题,这次更聚焦在"过滤和权重的含义",说明ta需要概念解析+工作机制的完整说明。考虑到OpenStack文档的复杂性,应该用分层解释法:先总述调度流程,再拆解过滤阶段,最后说明权重阶段。三个引用正好对应这三个部分。 特别要注意引用[3]提到的动态加载机制,这是很多文档容易忽略的实现细节。Python反射机制的应用很关键,需要通俗解释但保持技术准确性。权重计算部分虽然引用没直接提及,但RamFilter的例子可以延伸讨论WeightedRam的派生关系。 用户可能实际遇到调度配置问题,所以需要强调nova.conf配置实践。最后三个问题设计成阶梯式:概念确认→配置实践→进阶优化,这样既能验证理解又能延伸学习。 </think>在 OpenStack 的 Nova 组件中,**Nova-Scheduler** 负责为虚拟机实例选择合适的计算节点(Host)。其核心调度过程分为两个关键阶段:**过滤(Filtering)** 和 **权重计算(Weighting)**,二者的含义和工作机制如下: --- ### **1. 过滤(Filtering)阶段** * **目的**:筛选出满足实例部署基本要求的计算节点,排除不满足条件的节点。 * **工作机制**: * Scheduler 根据用户请求(如镜像型、CPU/内存需求、可用区、主机聚合等)和系统配置,加载并执行一系列 **过滤器(Filters)**。 * 每个过滤器检查计算节点的**硬性条件**(如资源容量、特性支持、策略限制)。 * 节点必须通过**所有**启用的过滤器才能进入下一阶段(权重计算)。 * **示例过滤器**(参考你的引用): * `AvailabilityZoneFilter`:排除不属于目标可用区(如用户创建的 AZ 或默认的 `nova` 区)的节点[^1]。 * `RamFilter`:排除内存(RAM)不足以满足实例请求的节点[^1]。 * **动态加载**:过滤器通过 `nova.conf` 配置文件动态加载(如 `scheduler_default_filters` 配置项),利用 Python 反射机制在运行时初始化[^3]。 --- ### **2. 权重计算(Weighting)阶段** * **目的**:在通过过滤的节点中,**量化评估节点的适合度**,选择最优节点。 * **工作机制**: * 对每个通过过滤的节点,Scheduler 运行**权重计算器(Weighers)**。 * 权重器为节点计算一个**权重分值**(数值可正可负)。分值越高表示节点越适合。 * 权重器可基于不同策略设计: * **资源优化型**:如 `WeightedRam`(剩余内存越多分值越高)、`WeightedCPU`(空闲 CPU 越多分值越高)。 * **负载均衡型**:如 `MetricsWeigher`(根据自定义指标如 CPU 负载打分)。 * **策略偏好型**:如 `ServerGroupAntiAffinityWeigher`(实现反亲和性策略)。 * **总分计算**:`节点最终权重 = Σ (权重器分值 × 权重器系数)`。 * **决策**:最终选择**权重总分最高**的节点;若总分相同则随机选择。 --- ### **关键区别总结** | **特性** | **过滤(Filtering)** | **权重计算(Weighting)** | |------------------|-----------------------------------|----------------------------------| | **目的** | 淘汰不合格节点(二元判断:通过/排除) | 量化评估节点优先级(连续打分) | | **结果** | 生成候选节点列表 | 为候选节点排序并选择最优 | | **逻辑** | 硬性条件(必须满足) | 软性策略(择优选择) | | **配置示例** | `scheduler_default_filters` [^3] | `scheduler_weight_classes` | --- ### **配置与扩展性** * **自定义策略**:管理员可通过修改 `nova.conf` 启用/禁用特定过滤器或权重器,并调整权重系数(如 `ram_weight_multiplier`)[^3]。 * **灵活架构**:开发者可编写自定义过滤器(继承 `BaseHostFilter`)或权重器(继承 `BaseHostWeigher`),动态加载到调度流程中[^3]。 ### **工作流程示意** ```plaintext 用户请求 → Nova-Scheduler │ ├─ 过滤阶段 ──────┤ 执行过滤器 → 生成候选节点列表 │ (e.g., AZFilter, RamFilter) │ └─ 权重阶段 ──────┤ 执行权重器 → 计算节点权重 → 选择最高分节点 (e.g., WeightedRam, MetricsWeigher) ``` 通过过滤与权重的协同,Nova-Scheduler 既保障了部署的合规性,又实现了资源的智能调度优化。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值