nova-scheduler模塊調度過程分析

openstack在建立虛擬機或進行虛擬機的冷遷移時根據在nova.conf文件中scheduler_default_filters和scheduler_available_filters配置的過濾器,數據庫

對主機進行篩選,選擇合適的目的主機。json

本文根據nova M版源碼分析調度不一樣過濾器的過程。函數

1、conductor服務經過rpc調用scheduler服務 SchedulerManager類的select_destinations,由此開始進入進入主機過濾階段,源碼分析

       此階段主要目的是調用事先在nova.conf文件中配置的過濾器,選擇合適的計算節點。3d

文件nova/scheduler/manager.pyblog

104行,self.driver實際是在nova.conf文件中配置的FileterScheduler排序

2、nova/scheduler/filter_scheduler.py文件rpc

52行,num_instances是要選擇的計算節點數。get

53行,self._schedule是實際的調度函數,在此函數中調度各個過濾器的函數。源碼

3、_schedule函數

94行,加載json文件能夠在json文件裏配置過濾規則,如今m版json文件沒起做用。

104行,在過濾以前首先要從數據庫拿到全部計算節點的的當前狀態。

112行,進行主機過濾

120行,拿到過濾的主機計算權重,並返回根據權重排序的列表。

4、nova/scheduler/host_manager.py文件

get_filtered_host函數中參數filter_class_names傳進來的值是None,進入517分支

517行,filters是全部過濾器類名字的列表,由self._choose_host_filters函數返回

_choose_host_filters(),函數根據nova.conf文件中的scheduler_default_filters和scheduler_available_filters挑選出要使用的過濾器

self._load_filters()加載nova.conf文件中的scheduler_default_filters項,默認在nova/scheduler/filters下的所有過濾器都打開。

545行,調用nova/filters.py文件中BaseFilterHandler::get_filtered_objects,參數filters是要使用的過濾器類列表,hosts是全部的計算節點。

5、nova/filters.py文件

81行,循環調用過濾器

85行,調用過濾器類的filter_all方法,對主機進行篩選,以AvailabilityZoneFilter類說明調用關係

相關文章
相關標籤/搜索