共計 1285 個字符,預計需要花費 4 分鐘才能閱讀完成。
如何實現 nova-scheduler 模塊調度,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
openstack 在創建虛擬機或進行虛擬機的冷遷移時根據在 nova.conf 文件中 scheduler_default_filters 和 scheduler_available_filters 配置的過濾器,
對主機進行篩選,選擇合適的目的主機。
下面根據 nova M 版源碼分析調度不同過濾器的。
一、conductor 服務通過 rpc 調用 scheduler 服務 SchedulerManager 類的 select_destinations,由此開始進入進入主機過濾階段,
此階段主要目的是調用事先在 nova.conf 文件中配置的過濾器,選擇合適的計算節點。
文件 nova/scheduler/manager.py
104 行,self.driver 實際是在 nova.conf 文件中配置的 FileterScheduler
二、nova/scheduler/filter_scheduler.py 文件
52 行,num_instances 是要選擇的計算節點數。
53 行,self._schedule 是實際的調度函數,在此函數中調度各個過濾器的函數。
三、_schedule 函數
94 行,加載 json 文件可以在 json 文件里配置過濾規則,現在 m 版 json 文件沒起作用。
104 行,在過濾之前首先要從數據庫拿到所有計算節點的的當前狀態。
112 行,進行主機過濾
120 行,拿到過濾的主機計算權重,并返回根據權重排序的列表。
四、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 是所有的計算節點。
五、nova/filters.py 文件
81 行,循環調用過濾器
85 行,調用過濾器類的 filter_all 方法,對主機進行篩選,以 AvailabilityZoneFilter 類說明調用關系
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。