应用Host Aggregates来更有效地分配硬件资源

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。

根据实际物理资源创建Host Aggregates

在具有相同物理特性的 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。

设置 metadata

设置对应的 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' |
+----+-----------------+-------------------+-------+--------------------------------------------- ---+

设置flavor extra_specs参数

设置 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"} |
…
+----------------------------+-----------------------+

添加过滤规则

将 AggregateInstanceExtraSpecsFilter 添加到所有 controller 节点的 nova.conf 配置文件的 scheduler_default_filter 项后面。

根据实际的用户需求创建 Host Aggregates

创建 Host aggregate

根据用户需求,在一类 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 下。

设置metadata

设置对应的 Host Aggregate 的 metadata,由于用户需求是 CPU 的
[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 文件里。

添加filter

将对应 filters 添加到所有 controller 节点的 nova.conf 配置文件的 scheduler_default_filter 项后面,如 AggregateCoreFilter,AggregateRamFilter 和 AggregateDiskFilter。

添加节点和启动虚拟机

添加compute节点到聚合中

将 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' |
+----+---------+-------------------+---------------------+------------------------------------------+

重启服务

重启所有 controller 节点上的 nova-api 服务,确保新添加到 nova.conf 的 Filters 生效。

创建虚拟机

在对应的 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 是否满足用户需求
检查虚拟机“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 |
… |
+--------------------------------------+----------------------------------------------------------+
检查虚拟机“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 |
…
+--------------------------------------+----------------------------------------------------------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值