nova で VM を立ち上げるノード制御する

nova-scheduler

nova が hypervisor ホストで VM を立ち上げる時、どの hypervisor ホストで立ち上げるかを決めるのは nova-scheduler です。

nova-scheduler は立ち上げるホストを filtering して決めます。

デフォルトでは、以下の様な filter が使用できます。(/etc/nova/nova.conf に設定されている。)

scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

新規立ち上げ時以外に、以下の時にホストを決定します。

  • VM をマイグレートするとき
  • nova evacuate コマンドでホストを指定しなかった場合

立ち上げるホストを指定したい

Host aggregate で指定出来そう。

Host aggregate を使用すると、Flavor に指定した metadata を利用して VM を立ち上げるホストを指定出来るみたいです。

Host aggregate を使用するための設定

/etc/nova/nova.conf の "scheduler_default_filters" に "AggregateInstanceExtraSpecsFilter" を追加する。

scheduler_default_filters=AggregateInstanceExtraSpecsFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

openstack aggregate create コマンドで aggregate を作成する。

$ openstack aggregate create --zone nova test
+-------------------+----------------------------+
| Field             | Value                      |
+-------------------+----------------------------+
| availability_zone | nova                       |
| created_at        | 2015-11-07T10:36:58.000000 |
| deleted           | False                      |
| deleted_at        | None                       |
| id                | 1                          |
| name              | test                       |
| updated_at        | None                       |
+-------------------+----------------------------+

openstack aggregate add host コマンドで作成した aggregate にホストを追加する

$ openstack aggregate add host 1 compute0 
+-------------------+---------------------------------------------------+
| Field             | Value                                             |
+-------------------+---------------------------------------------------+
| availability_zone | nova                                              |
| created_at        | 2015-11-07T10:36:58.000000                        |
| deleted           | False                                             |
| deleted_at        | None                                              |
| hosts             | [u'compute0']                                     |
| id                | 1                                                 |
| metadata          | {u'test': u'true', u'availability_zone': u'nova'} |
| name              | test                                              |
| updated_at        | None                                              |
+-------------------+---------------------------------------------------+

aggregate に metadata を設定する

$ openstack aggregate set --property test=true 1
+-------------------+---------------------------------------------------+
| Field             | Value                                             |
+-------------------+---------------------------------------------------+
| availability_zone | nova                                              |
| created_at        | 2015-11-07T10:36:58.000000                        |
| deleted           | False                                             |
| deleted_at        | None                                              |
| hosts             | [                                                |
| id                | 1                                                 |
| metadata          | {u'test': u'true', u'availability_zone': u'nova'} |
| name              | test                                              |
| updated_at        | None                                              |
+-------------------+---------------------------------------------------+]

flavor に metadata を設定する

$ nova flavor-key 1 set aggregate_instance_extra_specs:test=true
$ nova flavor-show 1
+----------------------------+-------------------------------------------------+
| Property                   | Value                                           |
+----------------------------+-------------------------------------------------+
| OS-FLV-DISABLED:disabled   | False                                           |
| OS-FLV-EXT-DATA:ephemeral  | 0                                               |
| disk                       | 1                                               |
| extra_specs                | {"aggregate_instance_extra_specs:test": "true"} |
| id                         | 1                                               |
| name                       | m1.tiny                                         |
| os-flavor-access:is_public | True                                            |
| ram                        | 512                                             |
| rxtx_factor                | 1.0                                             |
| swap                       |                                                 |
| vcpus                      | 1                                               |
+----------------------------+-------------------------------------------------+

VM を立ち上げてみる

aggregate の設定をしていない場合。

$ nova show aggregate-test
+--------------------------------------+----------------------------------------------------------+
| Property                             | Value                                                    |
+--------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                   |
| OS-EXT-AZ:availability_zone          | nova                                                     |
| OS-EXT-SRV-ATTR:host                 | compute1                                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | compute1                                                 |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000005                                        |
| OS-EXT-STS:power_state               | 1                                                        |
| OS-EXT-STS:task_state                | -                                                        |
| OS-EXT-STS:vm_state                  | active                                                   |
| OS-SRV-USG:launched_at               | 2015-11-07T10:53:33.000000                               |
| OS-SRV-USG:terminated_at             | -                                                        |
| accessIPv4                           |                                                          |
| accessIPv6                           |                                                          |
| config_drive                         |                                                          |
| created                              | 2015-11-07T10:52:12Z                                     |
| flavor                               | m1.tiny (1)                                              |
| hostId                               | d851fc374eb13a12aa7df7f38f6889196fa0cbfc52808379265c6f72 |
| id                                   | e1b54302-e9a5-42b7-9e5c-a7e5f9cded71                     |
| image                                | cirros (d5bfdf59-fb05-44ae-90fb-62e848feca1b)            |
| key_name                             | -                                                        |
| metadata                             | {                                                       |
| name                                 | aggregate-test                                           |
| os-extended-volumes:volumes_attached | [                                                       |
| pri-net network                      | 172.16.1.4                                               |
| progress                             | 0                                                        |
| security_groups                      | default                                                  |
| status                               | ACTIVE                                                   |
| tenant_id                            | be0aa029aed749169432428147648b68                         |
| updated                              | 2015-11-07T10:53:34Z                                     |
| user_id                              | c881bb43e6fd4a8aafd1f3e2cb874d00                         |
+--------------------------------------+----------------------------------------------------------+]}

設定後。

$ nova boot --flavor m1.tiny --image cirros --nic net-id=a0e5ac16-6dd4-4c68-86f6-ee6691477017 --poll aggregate-test2
+--------------------------------------+-----------------------------------------------+
| Property                             | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          | nova                                          |
| OS-EXT-SRV-ATTR:host                 | -                                             |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                             |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000007                             |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | -                                             |
| OS-SRV-USG:terminated_at             | -                                             |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| adminPass                            | NZAQeQp3MmvS                                  |
| config_drive                         |                                               |
| created                              | 2015-11-07T11:05:58Z                          |
| flavor                               | m1.tiny (1)                                   |
| hostId                               |                                               |
| id                                   | cfd4412f-b6e4-4986-830e-bc20c0274ff1          |
| image                                | cirros (d5bfdf59-fb05-44ae-90fb-62e848feca1b) |
| key_name                             | -                                             |
| metadata                             | {                                            |
| name                                 | aggregate-test2                               |
| os-extended-volumes:volumes_attached | [                                            |
| progress                             | 0                                             |
| security_groups                      | default                                       |
| status                               | BUILD                                         |
| tenant_id                            | be0aa029aed749169432428147648b68              |
| updated                              | 2015-11-07T11:05:58Z                          |
| user_id                              | c881bb43e6fd4a8aafd1f3e2cb874d00              |
+--------------------------------------+-----------------------------------------------+
Server building... 100% complete
Finished

ログを見ると以下の様なログが出ている。

Filter AggregateInstanceExtraSpecsFilter returned 1 host(s)

ここで、compute0 を返しているのではないかと思う。

参考にしたものURL