前两天遇到这样一个问题,用户在创建VM instance的时候,想让一些VM instance创建到SSD的机器上,一部分VM instance创建到SAS的机器上,并且live migration的时候,也要遵守这样的规则。
这是一个非常典型的host aggregation的用例,我们可以通过AggregateInstanceExtraSpecsFilter来实现此功能。
第一步,enable AggregateInstanceExtraSpecsFilter,编辑/etc/nova/nova.conf,将如下配置加到[DEFAULT]段,配置完成后,重启nova-scheduler让配置生效。
scheduler_default_filters=AggregateInstanceExtraSpecsFilter
[root@rhel8233 ~]# /etc/init.d/openstack-nova-scheduler restart
Stopping openstack-nova-scheduler: [ OK ]
Starting openstack-nova-scheduler: [ OK ]
第二步,创建第一个host aggregation,并为这个host aggregation设置metadata SSD=1
[root@rhel8233 ~]# nova aggregate-create aggregate1 nova
+----+------------+-------------------+-------+----------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+-------+----------+
| 1 | aggregate1 | nova | | |
+----+------------+-------------------+-------+----------+
[root@rhel8233 ~]# nova aggregate-add-host 1 rhel8234
Aggregate 1 has been successfully updated.
+----+------------+-------------------+---------------+---------------------------------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+---------------+---------------------------------+
| 1 | aggregate1 | nova | [u'rhel8234'] | {u'availability_zone': u'nova'} |
+----+------------+-------------------+---------------+---------------------------------+
[root@rhel8233 ~]# nova aggregate-set-metadata 1 SSD=1
Aggregate 1 has been successfully updated.
+----+------------+-------------------+---------------+-----------------------------------------------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+---------------+-----------------------------------------------+
| 1 | aggregate1 | nova | [u'rhel8234'] | {u'SSD': u'1', u'availability_zone': u'nova'} |
+----+------------+-------------------+---------------+-----------------------------------------------+
第三步,创建第二个host aggregation,并为这个host aggregation设置metadata SAS=1
[root@rhel8233 ~]# nova aggregate-create aggregate2 nova
+----+------------+-------------------+-------+----------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+-------+----------+
| 2 | aggregate2 | nova | | |
+----+------------+-------------------+-------+----------+
[root@rhel8233 ~]# nova aggregate-add-host 2 rhel8235
Aggregate 2 has been successfully updated.
+----+------------+-------------------+---------------+---------------------------------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+---------------+---------------------------------+
| 2 | aggregate2 | nova | [u'rhel8235'] | {u'availability_zone': u'nova'} |
+----+------------+-------------------+---------------+---------------------------------+
[root@rhel8233 ~]# nova aggregate-set-metadata 2 SAS=1
Aggregate 2 has been successfully updated.
+----+------------+-------------------+---------------+-----------------------------------------------+
| Id | Name | Availability Zone | Hosts | Metadata |
+----+------------+-------------------+---------------+---