【openstack】openstack的调度(Scheduler)
???如上图,Filter Scheduler首先得到未经过滤的主机列表,然后根据过滤属性,选择主机创建指定数目的虚拟机。
???????需要在nova.conf文件中配置以下两项:
简单的返回主机剩余的内存。默认的weight值为-1.0(在配置文件nova.conf文件中是以代价函数名称加_weight表示)。开发者可以实现自己的代价函数,设置自己的weight值来更精确的、利用更加复杂的算法选择主机。对于openstack提供的默认值来说,主机拥有的剩余内存越多,权值越小,被选择在其上创建虚拟机的可能性就越大。
??????? 如上图,在run_instance()方法中调用了driver对象的schedule_run_instance()方法。那我们来看下driver对象是什么?找到SchedulerManager类的初始化函数__init__():
可见driver对象是配置中的scheduler_driver字段表示的类对象。通过配置文件看到这里默认是nova.scheduler.muti.MultiScheduler类。
接着在MultiScheduler类的初始化函数中找到drivers字典的定义,发现其“compute”键所对应的值是nova.scheduler.filter_scheduler.FilterScheduler类对象。
?a)???? 首先调用了_schedule()方法。该方法的功能是获取所有的计算节点主机,对每一个要创建的虚拟机进行循环:
之前一直说openstack的调度功能很简单,其实个人感觉openstack给了开发者最大的自由度,让开发者能够根据自己项目的需求自由定制很多环节的处理。openstack的框架很简单,因为它把复杂的部分(也是依个人需求而不同的部分)交给了开发者定制。它的接口设计、函数定制以及动态加载机制都是值得我们学习的地方。