Openstack Nova-Scheduler模块简介

服务器

浏览数:62

2019-11-2

AD:资源代下载服务

1. 楔子

从之前openstack Nova模块概览这篇文章我们可以大致知道nova-scheduler模块的功能:在创建(或者重建)虚机时,无非是nova-api接收到HTTP请求后,由nova-schduler决定该请求在哪个节点具体执行。而本篇主要是基于应用及代码层面进一步学习nova-scheduler的。

2. 调度步骤

问题来了,nova-scheduler究竟是通过什么方式或算法来选择合适的节点来创建虚机呢?简单来说,基本上就是如下两种途径了:

  • Filters:通过各种Filter筛选掉不满足要求的的主机;
  • 计算权重:基于上面过滤后的结果对每个主机计算权重值,然后排序,最终选择权重值高的几个主机。

3. Filters

过滤器配置

可以通过查看控制节点/etc/nova/nova.conf来获取,而其中需要留意的是下面三项配置信息:
scheduler-driver: 调度驱动

scheduler_driver.png


scheduler_available_filters:可用的过滤器,默认所有都可用


scheduler_available_filters.png


scheduler_default_filters:实际用的过滤器


image.png

过滤调度实现

下面具体从代码层面一步一步分析过滤调度是如何实现的:
/nova/conductor/manager.py




/nova/scheduler/client/__init__.py





/nova/scheduler/client/query.py





/nova/scheduler/rpcapi.py





/nova/scheduler/manager.py





/nova/scheduler/filter_scheduler.py





/nova/scheduler/host_manager.py




而函数
get_filtered_hosts最终实现过滤调度,深挖你会发现这个函数会根据配置文件
scheduler_default_filters依次调用各个过滤器模块的
host_passes函数实现对主机的筛选,这儿就不细细赘述了。

另外注意,对于CPU、HDD、Memory等模块是允许overcommit,具体的比例值参照配置文件。

4. 权重计算

/nova/scheduler/filter_scheduler.py这个文件除了实现Filters筛选出符合要求的HOST外,而且也同时实现对这些HOST的权重计算。




/nova/scheduler/host_manager.py




函数
get_weighted_objects依据不同的Weighter来计算每个HOST的权重值,而对于每个Weighter只需要实现函数
_weight_object即可,另外每种Weighter的
multiplier值通过配置文件获取。

作者:VienFu