Openstack computeノード削除

OpenstackのComputeノードの削除の方法がなかったのでメモ。

  • Centos/Junoで確認。
    ただし、正しいドキュメントがないので、少々不安な手順

削除したいコンピュートノードの確認

[root@controller ~(keystone_admin)]# nova service-list
+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| Binary           | Host       | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+------------------+------------+----------+---------+-------+----------------------------+-----------------+
| nova-consoleauth | controller | internal | enabled | up    | 2016-02-10T02:00:17.000000 | -               |
| nova-scheduler   | controller | internal | enabled | up    | 2016-02-10T02:00:17.000000 | -               |
| nova-conductor   | controller | internal | enabled | up    | 2016-02-10T02:00:17.000000 | -               |
| nova-cert        | controller | internal | enabled | up    | 2016-02-10T02:00:16.000000 | -               |
| nova-compute     | compute2   | compute2 | enabled | up    | 2016-02-10T02:00:18.000000 | -               |
| nova-compute     | compute1   | compute1 | enabled | up    | 2016-02-10T02:00:18.000000 | -               |
+------------------+------------+----------+---------+-------+----------------------------+-----------------+

コンピュートノードのDisable

[root@controller ~(keystone_admin)]# nova-manage service disable --host=compute1 --service=nova-compute

コンピュートノードをDB上から削除

[root@controller ~(keystone_admin)]# mysql -u root -p
MariaDB [(none)] use nova;
MariaDB [nova] select id, hypervisor_hostname  from compute_nodes;
+----+-----------------------+
| id | hypervisor_hostname   |
+----+-----------------------+
|  1 | compute2              |
|  2 | compute1              |
+----+-----------------------+
1 row in set (0.00 sec)
MariaDB [nova] delete from compute_nodes where hypervisor_hostname='compute1'
MariaDB [nova] 
MariaDB [nova] select id,host from services;
+----+--------------+
| id | host         |
+----+--------------+
|  6 | compute1     |
|  5 | compute2     |
|  4 | controller   |
|  3 | controller   |
|  1 | controller   |
|  2 | controller   |
+----+--------------+
5 rows in set (0.00 sec)

MariaDB [nova] delete from services where host='compute1'
MariaDB [nova] 

OpenstackのAffinity

Openstackのaffinityについて

Icehouseからaffinityをサポートしているので、動作を確認。
Affinity/Anti-affinityはFilterとして実装されており、動作は以下の通り。

Affinityは同じサーバ上にVMを作成する

Anti-affinityは異なるサーバ上にVMを作成する
どのホストにも同じグループのVMが存在し、作成できない場合にはErrorとなる
有効化はnova.confからscheduler_default_filtersAffinityFilterを追加

nova.conf

nova/nova.conf:scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

Affinity用のサーバグループの作成は以下のコマンド

# nova server-group-create --policy affinity test-affinity
+--------------------------------------+---------------+---------------+---------+----------+
| Id                                   | Name          | Policies      | Members | Metadata |
+--------------------------------------+---------------+---------------+---------+----------+
| 979912fe-a558-46e5-b3d2-1022104cd5b8 | test-affinity | [u'affinity'] | []      | {}       |
+--------------------------------------+---------------+---------------+---------+----------+

Anti-affinity用のサーバグループの作成は以下のコマンド

# nova server-group-create --policy anti-affinity test-anti-affinity
+--------------------------------------+--------------------+--------------------+---------+----------+
| Id                                   | Name               | Policies           | Members | Metadata |
+--------------------------------------+--------------------+--------------------+---------+----------+
| dacf95e9-e1d5-4ec9-ae6a-c45ea87f417d | test-anti-affinity | [u'anti-affinity'] | []      | {}       |
+--------------------------------------+--------------------+--------------------+---------+----------+

作成したサーバグループの確認は以下のコマンド

# nova server-group-list
+--------------------------------------+--------------------+--------------------+---------+----------+
| Id                                   | Name               | Policies           | Members | Metadata |
+--------------------------------------+--------------------+--------------------+---------+----------+
| 979912fe-a558-46e5-b3d2-1022104cd5b8 | test-affinity      | [u'affinity']      | []      | {}       |
| dacf95e9-e1d5-4ec9-ae6a-c45ea87f417d | test-anti-affinity | [u'anti-affinity'] | []      | {}       |
+--------------------------------------+--------------------+--------------------+---------+----------+

NovaのVM作成コマンドは以下の通り

# nova boot --flavor m1.tiny --image ubuntu --hint group=test-anti-affinity ubuntu-test

OpenStack の概要理解

OpenStackはPythonで記述されたアプリケーションで、以下のコンポーネントから構成されている

  • Horizon
    Web管理インタフェースを提供
  • Heat
    自動化のためのコンポーネント
  • Neutron
    ネットワークを管理
    Open vSwitch や OpenFlow と連動して VM 間や外部とのネットワーク機能を提供
  • Cinder
    ゲストOSやアプリケーションのデータ等を保管するためのブロックデバイスを管理
  • Nova
    OpenStackのメインコンポーネントで、仮想マシンの起動等を行う
  • Ceilometer
    リソースの利用料を監視、計測する
  • Glance
    イメージを格納するストレージ
    ストレージはRead-onlyという形でアタッチされるので、実際のデータはCinderに格納
  • Swift
    分散型オブジェクトストレージ
    REST APIを利用してアクセスが可能
  • Keystone
    認証機能を提供