• Home
  • About
    • VeinFu的技术博客 photo

      VeinFu的技术博客

      目前从事云计算相关的工作,主要针对私有云场景的开发,专注Openstack订制化功能的开发及实施,欢迎广大程序爱好者一起沟通共同进步。

    • Learn More
    • Email
    • Github
  • 所有文章
  • 归档
  • 技术博客
  • 生活记录

Openstack之Nova-Scheduler模块简介

15 Jan 2019

Reading time ~1 minute

本文总阅读量: 次

  • 1. 楔子
  • 2. 调度步骤
  • 3. Filters
    • 过滤器配置
    • 过滤调度实现
  • 4. 权重计算

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值通过配置文件获取。



Openstack Share Tweet +1