scheduler_default_filters 詳解


Filter scheduler 是 nova-scheduler 默認的調度器,調度過程分為兩步:

   

通過過濾器(filter)選擇滿足條件的計算節點(運行 nova-compute)

通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建 Instance。

   

Nova 允許使用第三方 scheduler,配置 scheduler_driver 即可。

   

Scheduler 可以使用多個 filter 依次進行過濾,過濾之后的節點再通過計算權重選出最適合的節點。

   

   

【RetryFilter】

   

RetryFilter 的作用是刷掉之前已經調度過的節點。

   

舉個例子方便大家理解: 假設 A,B,C 三個節點都通過了過濾,最終 A 因為權重值最大被選中執行操作。 但由於某個原因,操作在 A 上失敗了。 默認情況下,nova-scheduler 會重新執行過濾操作(重復次數由 scheduler_max_attempts 選項指定,默認是 3)。 那么這時候 RetryFilter 就會將 A 直接刷掉,避免操作再次失敗。

RetryFilter 通常作為第一個 filter。

   

【AvailabilityZoneFilter】

   

為提高容災性提供隔離服務,可以將計算節點划分到不同的Availability Zone中。

   

例如把一個機架上的機器划分在一個 Availability Zone 中。 OpenStack 默認有一個命名為 "Nova" 的 Availability Zone,所有的計算節點初始都是放在 "Nova" 中。 用戶可以根據需要創建自己的 Availability Zone

   

【RamFilter】

   

RamFilter 將不能滿足 flavor 內存需求的計算節點過濾掉。

   

對於內存有一點需要注意: 為了提高系統的資源使用率,OpenStack 在計算節點可用內存時允許 overcommit(超售),也就是可以超過實際內存大小。 超過的程度是通過 nova.conf 中 ram_allocation_ratio 這個參數來控制的,默認值為 1.5

ram_allocation_ratio = 1.5

   

其含義是:如果計算節點的內存有 10GB,OpenStack 則會認為它有 15GB(10*1.5)的內存。

   

【DiskFilter】

   

DiskFilter 將不能滿足 flavor 磁盤需求的計算節點過濾掉。

   

Disk 同樣允許 overcommit,通過 nova.conf 中 disk_allocation_ratio 控制,默認值為 1

   

disk_allocation_ratio = 1.0

   

【CoreFilter】

   

CoreFilter 將不能滿足 flavor vCPU 需求的計算節點過濾掉。

   

vCPU 同樣允許 overcommit,通過 nova.conf 中 cpu_allocation_ratio 控制,默認值為 16

   

cpu_allocation_ratio = 16.0

   

這意味着一個 8 vCPU 的計算節點,nova-scheduler 在調度時認為它有 128 個 vCPU。 需要提醒的是: nova-scheduler 默認使用的 filter 並沒有包含 CoreFilter。 如果要用,可以將 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置選項中。

   

【ComputeFilter】

   

ComputeFilter 保證只有 nova-compute 服務正常工作的計算節點才能夠被 nova-scheduler調度。

ComputeFilter 顯然是必選的 filter。

   

【ComputeCapabilitiesFilter】

   

ComputeCapabilitiesFilter 根據計算節點的特性來篩選。

   

這個比較高級,我們舉例說明。

例如我們的節點有 x86_64 和 ARM 架構的,如果想將 Instance 指定部署到 x86_64 架構的節點上,就可以利用到 ComputeCapabilitiesFilter。

   

還記得 flavor 中有個 Metadata 嗎,Compute 的 Capabilitie s就在 Metadata中 指定。

 

【ImagePropertiesFilter】

   

ImagePropertiesFilter 根據所選 image 的屬性來篩選匹配的計算節點。

跟 flavor 類似,image 也有 metadata,用於指定其屬性。

 

【ServerGroupAntiAffinityFilter】

   

ServerGroupAntiAffinityFilter 可以盡量將 Instance 分散部署到不同的節點上。

 

【ServerGroupAffinityFilter】

   

與 ServerGroupAntiAffinityFilter 的作用相反,ServerGroupAffinityFilter 會盡量將 instance 部署到同一個計算節點上。

   

【Weight】

   

經過前面一堆 filter 的過濾,nova-scheduler 選出了能夠部署 instance 的計算節點。

如果有多個計算節點通過了過濾,那么最終選擇哪個節點呢?

   

Scheduler 會對每個計算節點打分,得分最高的獲勝

打分的過程就是 weight,翻譯過來就是計算權重值,那么 scheduler 是根據什么來計算權重值呢?

   

目前 nova-scheduler 的默認實現是根據計算節點空閑的內存量計算權重值:

空閑內存越多,權重越大,instance 將被部署到當前空閑內存最多的計算節點上。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM