OpenStack 中如何應用 Host Aggregates 來更有效地分配硬件資源

 

簡介

本文將要介紹如何應用 OpenStack 中 Host Aggregates 的機制來更爲有效地分配 nova computes 節點上的硬件資源,從而達到 OpenStack 的用戶能夠合理地選擇特定的 computes 節點,來創建符合自己需求的虛擬機。Host Aggregates 最先出現在 OpenStack Grizzly 的版本中,是在 OpenStack 的 Regions 和 Availability Zones 之後被提出來,並建立於 Availability Zones 基礎之上更進一步劃分 computes 節點物理資源的一種機制。

Host Aggregates 與 Availability Zones 定義上的區別

Availability Zones 通常是對 computes 節點上的資源在小的區域內進行邏輯上的分組和隔離。例如在同一個數據中心,我們可以將 Availability Zones 規劃到不同的機房,或者在同一機房的幾個相鄰的機架,從而保障如果某個 Availability Zone 的節點發生故障(如供電系統或網絡),而不影響其他的 Availability Zones 上節點運行的虛擬機,通過這種劃分來提高 OpenStack 的可用性。目前 OpenStack 默認的安裝是把所有的 computes 節點劃分到 nova 的 Availability Zone 上,但我們可以通過對 nova.conf 文件的配置來定義不同的 Availability zones。

Host Aggregates 是在 Availability Zones 的基礎上更進一步地進行邏輯的分組和隔離。例如我們可以根據不同的 computes 節點的物理硬件配置將具有相同共性的物理資源規劃在同一 Host Aggregate 之下,或者根據用戶的具體需求將幾個 computes 節點規劃在具有相同用途的同一 Host Aggregate 之下,通過這樣的劃分有利於提高 OpenStack 資源的使用效率。Host Aggregates 可以通過 nova client 或 API 來創建和配置。下面以 nova client 的命令行方式來配置 Host Aggregates。

圖 1.Availability Zones 與 Host Aggregates 的關係

圖 1.Availability Zones 與 Host Aggregates 的關係

根據實際的物理資源在 OpenStack 環境中創建 Host Aggregates

1. 在具有相同物理特性的 computes 節點上創建 Host Aggregate, 比如下面將具有高內存的 computes 節點規劃爲一組,並將 Host Aggregate 命名爲“high-memory-agg”。

[root@controller ~]# nova aggregate-create high-memory-agg high-memory-az

+----+-----------------+-------------------+-------+------------------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+-----------------+-------------------+-------+------------------------------------+

| 3 | high-memory-agg | high-memory-az | | 'availability_zone=high-memory-az' |

+----+-----------------+-------------------+-------+------------------------------------+

如果沒有指定 Availability Zone, OpenStack 會將 Host Aggregate 建在默認的 Availability Zone 下面(如 nova),否則會根據指定的名字來判斷是否創建新的 Availability Zone 或使用已經存在的 Availability Zone,同時在此之下創建 Host Aggregate。

2. 設置對應的 Host Aggregate 的 metadata,將具有高內存配置的 computes 節點的 Host aggregate 的 metadata 設置成“HW=high-memory”。

[root@controller ~]# nova aggregate-set-metadata high-memory-agg HW=high-memory

Metadata has been successfully updated for aggregate 3.

+----+-----------------+-------------------+-------+-------------------------------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+-----------------+-------------------+-------+--------------------------------------------- ---+

| 3 | high-memory-agg | high-memory-az | | 'HW=high-memory', 'availability_zone=high-memory-az' |

+----+-----------------+-------------------+-------+--------------------------------------------- ---+

3. 設置 flavor 的 extra_specs 的參數,保持這個參數與 Host aggregate 的 metadata 參數配置一致。

[root@controller ~]# nova flavor-key High_Memory_test set HW=high-memory

[root@controller ~]# nova flavor-show High_Memory_test

+----------------------------+-----------------------+

| Property | Value |

+----------------------------+-----------------------+

| OS-FLV-DISABLED:disabled | False |

| OS-FLV-EXT-DATA:ephemeral | 20 |

| disk | 60 |

| extra_specs | {"HW": "high-memory"} |

…

+----------------------------+-----------------------+

4. 將 AggregateInstanceExtraSpecsFilter 添加到所有 controller 節點的 nova.conf 配置文件的 scheduler_default_filter 項後面。

根據實際的用戶需求在 OpenStack 環境中創建 Host Aggregates

1. 根據用戶需求,在一類 computes 節點上創建 Host aggregate。比如用戶希望將 CPU 的 overcommit rate 爲 1:5 的 computes 節點分配給開發團隊使用。

[root@controller ~]# nova aggregate-create dev-agg dev-az

+----+---------+-------------------+-------+----------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+---------+-------------------+-------+----------------------------+

| 6 | dev-agg | dev-az | | 'availability_zone=dev-az' |

+----+---------+-------------------+-------+----------------------------+

這裏的 Host Aggregate 的名稱“dev-agg”需要與 Availability Zone 的名稱“dev-az”建立一一對應的關係,保證以後創建虛擬機時指定 Availability Zone 會創建到對應的 Host Aggregate 下。

2. 設置對應的 Host Aggregate 的 metadata,由於用戶需求是 CPU 的 overcommit rate 爲 1:5,將 metadata 設置爲“cpu_allocation_ratio=5”。

[root@controller ~]# nova aggregate-set-metadata dev-agg cpu_allocation_ratio=5

Metadata has been successfully updated for aggregate 6.

+----+---------+-------------------+-------+------------------------------------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+---------+-------------------+-------+------------------------------------------------------+

| 6 | dev-agg | dev-az | | 'availability_zone=dev-az', 'cpu_allocation_ratio=5' |

+----+---------+-------------------+-------+------------------------------------------------------+

如果用戶需要改變 memory 或者是 disk 的 overcommit rate,這裏也可以設置對應的 metadata,如 ram_allocation_ratio,disk_allocation_ratio。在創建虛擬機,nova scheduler 會根據當前 Host Aggregate 的 metadata 上設定 ratio 做篩選條件來創建,如果沒有找到 metadata,會使用全局的 ratio 來做篩選條件,全局的 ratio 參數配置在 nova.conf 文件裏。

3. 將對應 filters 添加到所有 controller 節點的 nova.conf 配置文件的 scheduler_default_filter 項後面,如 AggregateCoreFilter,AggregateRamFilter 和 AggregateDiskFilter。

將相應的 nova compute 節點添加到 Host Aggregates 中,並創建虛擬機

1. 將 computes 節點上的物理機添加到對應的 Host Aggregates 裏。

[root@controller ~]# nova aggregate-add-host high-memory-agg kvm001

Host kvm001 has been successfully added for aggregate 3

+----+-----------------+-------------------+---------------------+--------------------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+-----------------+-------------------+---------------------+--------------------------------------+

| 3 | high-memory-agg | high-memory-az | 'kvm001' | 'HW=high-memory', 'availability_zone=high-memory-az'|

+----+-----------------+-------------------+---------------------+--------------------------------------+

[root@controller ~]# nova aggregate-add-host dev-agg kvm002

Host kvm002 has been successfully added for aggregate 6

+----+---------+-------------------+---------------------+--------------------------------------------+

| Id | Name | Availability Zone | Hosts | Metadata |

+----+---------+-------------------+---------------------+-------------------------------------------+

| 6 | dev-agg | dev-az | 'kvm002' | 'availability_zone=dev-az', 'cpu_allocation_ratio=5' |

+----+---------+-------------------+---------------------+------------------------------------------+

2. 重啓所有 controller 節點上的 nova-api 服務,確保新添加到 nova.conf 的 Filters 生效。

3. 在對應的 Host Aggregates 上創建虛擬機。

[root@controller ~]# nova boot high-memory-vm --image <image-id> --flavor High_Memory_test

由於 flavor“High_Memory_test”已經與 Host Aggregate“high-memory-agg”建立 了關聯,因此新建的虛擬機“high-memory-vm”應該建在這個 Host Aggregate 下,而這個 Host aggregate 只加了一個 compute 節點“kvm001”,如果“kvm001”在資源充足的條件下,虛擬機就應該成功在此創建。

[root@controller ~]# nova boot dev-vm --image <image-id> --flavor m1.medium --availability-zone dev-az

由於在創建虛擬機“dev-vm”時指定了 availability zone“dev-az”,而且“dev-az”下只存在 Host aggregate“dev-agg”,“dev-agg”上只添加了一個 compute 節點“kvm002”,因此在“kvm002”在資源充足的條件下(CPU ratio=5), 虛擬機就應該成功在此創建。

驗證虛擬機以及配置的 Host Aggregate Filters 是否滿足用戶需求

1. 檢查虛擬機“high-memory-vm”的狀態並確定是否建在了符合需求的 compute 節點上

[root@controller ~]# nova show high-memory-vm

+--------------------------------------+----------------------------------------------------------+

| Property | Value |

+--------------------------------------+----------------------------------------------------------+

| OS-DCF:diskConfig | MANUAL |

| OS-EXT-AZ:availability_zone | high-memory-az |

| OS-EXT-SRV-ATTR:host | kvm001 |

| OS-EXT-SRV-ATTR:hypervisor_hostname | kvm001 |

… |

+--------------------------------------+----------------------------------------------------------+

2. 檢查虛擬機“dev-vm”的狀態並確定是否建在了符合需求的 compute 節點上

[root@controller ~]# nova show dev-vm

+--------------------------------------+----------------------------------------------------------+

| Property | Value |

+--------------------------------------+----------------------------------------------------------+

| OS-DCF:diskConfig | MANUAL |

| OS-EXT-AZ:availability_zone | dev-az |

| OS-EXT-SRV-ATTR:host | kvm002 |

| OS-EXT-SRV-ATTR:hypervisor_hostname | kvm002 |

…

+--------------------------------------+----------------------------------------------------------+

結束語.

在具體使用 Host Aggregates 機制來分配 computes 節點資源時,我們可以綜合考慮目前 OpenStack 環境裏的物理資源和用戶需求來靈活地配置 Host Aggregate 的 metadatas 以及 filters。由於一個 Availability Zone 可以同時包含多個 Host aggregates,每個 Host aggregate 又有可能配置不同的 metadatas,因此我們在創建虛擬機時也應該注意這點,不要將虛擬機創建到錯誤的 compute 節點上。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章