07.計算Nova→2.nova組件詳解→2.nova-scheduler

  1. 建立 Instance 時,用戶會提出資源需求,例如 CPU、內存、磁盤各須要多少。OpenStack 將這些需求定義在 flavor 實例類型中,用戶只須要指定用哪一個 flavor 就能夠了。
  2. 可用的 flavor 在 Admin->Compute->Flavors 中管理
描述 詳細
  1. 在 /etc/nova/nova.conf 中,nova 經過 scheduler_driver,scheduler_available_filters 和 scheduler_default_filters 這三個參數來配置 nova-scheduler。

  1. scheduler_driver
    1. Filter scheduler 是 nova-scheduler 默認的調度器,調度過程分爲兩步
      1. 經過過濾器(filter)選擇知足條件的計算節點(運行 nova-compute)
      2. 經過權重計算(weighting)選擇在最優(權重值最大)的計算節點上建立 Instance
        1
        scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

  1. Nova 容許使用第三方 scheduler,配置 scheduler_driver 便可。
    1. Scheduler 能夠使用多個 filter 依次進行過濾,過濾以後的節點再經過計算權重選出最適合的節點。

上圖是調度過程的一個示例:
1.最開始有 6 個計算節點 Host1-Host6
2.經過多個 filter 層層過濾,Host2 和 Host4 沒有經過,被刷掉了3.Host1,Host3,Host5,Host6 計算權重,結果 Host5 得分最高,最終入選
  1. scheduler_available_filters
    1. 當 Filter scheduler 須要執行調度操做時,會讓 filter 對計算節點進行判斷,filter 返回 True 或 False
    2. Nova.conf 中的 scheduler_available_filters 選項用於配置 scheduler 可用的 filter,默認是全部 nova 自帶的 filter 均可以用於過濾操做
      1
      scheduler_available_filters = nova.scheduler.filters.all_filters
  1. scheduler_default_filters
    1. 用於指定 scheduler 真正使用的 filter
      1
      2
      3
      scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, 
      DiskFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, 
      ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter
  1. RetryFilter
    1. 做用是刷掉以前已經調度過的節點
    2. 舉個例子: 假設 A,B,C 三個節點都經過了過濾,最終 A 由於權重值最大被選中執行操做。 但因爲某個緣由,操做在 A 上失敗了。 默認狀況下,nova-scheduler 會從新執行過濾操做(重複次數由 scheduler_max_attempts 選項指定,默認是 3)。 那麼這時候 RetryFilter 就會將 A 直接刷掉,避免操做再次失敗。 RetryFilter 一般做爲第一個 filter。
  1. AvailabilityZoneFilter
    1. 爲提升容災性和提供隔離服務,能夠將計算節點劃分到不一樣的Availability Zone中。
    2. 建立 Instance 時,須要指定將 Instance 部署到在哪一個 Availability Zone中。nova-scheduler 在作 filtering 時,會使用 AvailabilityZoneFilter 將不屬於指定 Availability Zone 的計算節點過濾掉。
  1. RamFilter
    1. RamFilter 將不能知足 flavor 內存需求的計算節點過濾掉。
    2.  爲了提升系統的資源使用率,OpenStack 在計算節點可用內存時容許 overcommit,也就是能夠超過實際內存大小。 超過的程度是經過 nova.conf 中 ram_allocation_ratio 這個參數來控制的,默認值爲 1.5
      1
      ram_allocation_ratio = 1.5
      其含義是:若是計算節點的內存爲 10GB,OpenStack 則會認爲它有 15GB(10*1.5)內存。
  1. DiskFilter
    1. DiskFilter 將不能知足 flavor 磁盤需求的計算節點過濾掉。
    2. Disk 一樣容許 overcommit,經過 nova.conf 中 disk_allocation_ratio 控制,默認值爲 1
      1
      disk_allocation_ratio = 1.0
  1. CoreFilter
    1. CoreFilter 將不能知足 flavor vCPU 需求的計算節點過濾掉。
    2. vCPU 一樣容許 overcommit,經過 nova.conf 中 cpu_allocation_ratio 控制,默認值爲 16
      1
      cpu_allocation_ratio = 16.0
      這意味着一個 8 vCPU 的計算節點,nova-scheduler 在調度時認爲它有 128 個 vCPU。 須要提醒的是: nova-scheduler 默認使用的 filter 並無包含 CoreFilter。 若是要用,能夠將 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置選項中。
  1. ComputeFilter
    1. ComputeFilter 保證只有 nova-compute 服務正常工做的計算節點纔可以被 nova-scheduler調度。ComputeFilter 顯然是必選的 filter。
  1. ComputeCapabilitiesFilter
    1. ComputeCapabilitiesFilter 根據計算節點的特性來篩選。例如咱們的節點有 x86_64 和 ARM 架構的,若是想將 Instance 指定部署到 x86_64 架構的節點上,就能夠利用 ComputeCapabilitiesFilter。
    2.  flavor 中有個 Metadata ,Compute 的 Capabilities就在 Metadata中指定。
      1. 點擊update Metadata,「Compute Host Capabilities」 列出了全部可設置 Capabilities
      2. 點擊 「Architecture」 後面的 「+」,就能夠在右邊的列表中指定具體的架構
      3. 配置好後,ComputeCapabilitiesFilter 在調度時只會篩選出 x86_64 的節點。 若是沒有設置 Metadata,ComputeCapabilitiesFilter 不會起做用,全部節點都會經過篩選。

當配置了metadata後
  1. ImagePropertiesFilter
    1. ImagePropertiesFilter 根據所選 image 的屬性來篩選匹配的計算節點。 跟 flavor 相似,image 也有 metadata,用於指定其屬性。
    2. 例如但願某個 image 只能運行在 kvm 的 hypervisor 上,能夠經過 「Hypervisor Type」 屬性來指定
    3. 點擊 「+」,而後在右邊的列表中選擇 「kvm」。
    4. 配置好後,ImagePropertiesFilter 在調度時只會篩選出 kvm 的節點。 若是沒有設置 Image 的Metadata,ImagePropertiesFilter 不會起做用,全部節點都會經過篩選。
  1. ServerGroupAntiAffinityFilter 這裏能夠進行設置,但我沒成功???
    1. 能夠儘可能將 instance 分散部署到不一樣的節點上。
  1. ServerGroupAffinityFilter
    1. 與 ServerGroupAntiAffinityFilter 的做用相反,ServerGroupAffinityFilter 會盡可能將 instance 部署到同一個計算節點上。
  1. Weight
    1. nova-scheduler 選出了可以部署 instance 的計算節點。若是有多個計算節點經過了過濾,那麼最終選擇哪一個節點呢?
    2. Scheduler 會對每一個計算節點打分,得分最高的獲勝。 打分的過程就是 weight,翻譯過來就是計算權重值,那麼 scheduler 是根據什麼來計算權重值呢?
    3. 目前 nova-scheduler 的默認實現是根據計算節點空閒的內存量計算權重值: 空閒內存越多,權重越大,instance 將被部署到當前空閒內存最多的計算節點上。
相關文章
相關標籤/搜索