Flavor とは

Flavor は、CPU、メモリ、ディスクなど、インスタンスに割り当てるために、事前に定義された仮想リソースのスペックテーブルです。

ここでは、以下の Flavor を2つを追加します。

  • m2.disk0_c1_m1_s2 (Disk 0、Cpu 1、Mem 1、Swap 2048)
  • m2.disk0_c1_m1_s0 (Disk 0、Cpu 1、Mem 1、Swap 0)

ディスクサイズ 0 の Flavor を作成する理由について

ディスクサイズ 0 の Flavor を作成する理由は、インスタンス作成時に Compute Node のストレージ容量が消費されないようにするためです。

例えば、インスタンス作成時にディスクサイズとして 80GB が定義されている Flavor を指定すると、Compute Node から 80GB が消費されてしまいます。

おそらく、実際に OpenStack 環境を構築するとなるとインスタンスデータは、Cinder (ブロックストレージ) を使ってブータブルボリューム上で動かすことになると思うので、インスタンス作成時に Compute Node の容量を消費させないようにする必要があります。

もちろん、腹持ちのローカルディスク上でインスタンスを動かすんだったら話は別です。

Flavor 追加

Flavor は、以下のコマンドを使って追加可能です。

$ nova flavor-create <NAME> <ID> <MEM> <HDD> <CPU> <FACTOR> <SWAP> <PUBLIC>

パラメータ 内容
NAME Flavor 名
ID Flavor ID (1~255)
MEM メモリサイズ (MB)
HDD 「/」パーティションのディスク容量 (GB)
CPU CPU 個数
FACTOR インスタンスが使用できる帯域幅
SWAP スワップサイズ (MB)
PUBLIC Flavor の使用範囲 (true|false)

追加した Flavor をユーザテナントが使えるようにするためには

Flavor は、admin テナントで作成する必要があります。

そして、新しく作成した Flavor は、最初は、admin しか使えないため、他のユーザテナントがこの Flavor を使えるようにするために、各ユーザテナントへのアクセス権を追加する必要があります。

ここでは、以下の順番で Flavor を追加します。

  • admin クレデンシャル読み込み
  • デフォルト Flavor リスト確認
  • Flavor 作成 : DISK 0、CPU 1、MEM 2GB、SWAP 2GB
  • Flavor 作成 : DISK 0、CPU 1、MEM 2GB、SWAP 0
  • Flavor が追加されていることを確認
  • ユーザテナント ID 確認
  • ユーザテナントへの新規 Flavor 接続許可
  • ユーザテナントクレデンシャル読み込み
  • ユーザテナントで Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
admin クレデンシャル読み込み
━━━━━━━━━━━━━━━━━━━━━━━
$ source ~/admin-openrc.sh

━━━━━━━━━━━━━━━━━━━━━━━
デフォルト Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
Flavor 作成 : DISK 0、CPU 1、MEM 2GB、SWAP 2GB
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-create m2.disk0_c1_m1_s2 6 1024 0 1 --rxtx-factor 1.0 --swap 2048 --is-public true
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
Flavor 作成 : DISK 0、CPU 1、MEM 2GB、SWAP 0
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-create m2.disk0_c1_m1_s0 7 1024 0 1 --rxtx-factor 1.0 --swap 0 --is-public true
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 7  | m2.disk0_c1_m1_s0 | 1024      | 0    | 0         |      | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
Flavor が追加されていることを確認
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-list
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny           | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small          | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium         | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large          | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge         | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
| 7  | m2.disk0_c1_m1_s0 | 1024      | 0    | 0         |      | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
ユーザテナント ID 確認
━━━━━━━━━━━━━━━━━━━━━━━
$ keystone tenant-list
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| 4bc9e2b503a04cab949dcd8490df64e3 |  admin  |   True  |
| 111f5d2dce1b4ab79e5ab14746aae23a |   demo  |   True  |
| afde75a766ca4220a9fc5b1bf978c60e | service |   True  |
+----------------------------------+---------+---------+

━━━━━━━━━━━━━━━━━━━━━━━
ユーザテナントへの新規 Flavor 接続許可
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-access-add m2.disk0_c1_m1_s2 111f5d2dce1b4ab79e5ab14746aae23a
+-----------+----------------------------------+
| Flavor_ID | Tenant_ID                        |
+-----------+----------------------------------+
| 6         | 111f5d2dce1b4ab79e5ab14746aae23a |
+-----------+----------------------------------+

$ nova flavor-access-add m2.disk0_c1_m1_s0 111f5d2dce1b4ab79e5ab14746aae23a
+-----------+----------------------------------+
| Flavor_ID | Tenant_ID                        |
+-----------+----------------------------------+
| 7         | 111f5d2dce1b4ab79e5ab14746aae23a |
+-----------+----------------------------------+

━━━━━━━━━━━━━━━━━━━━━━━
ユーザテナントで Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
$ source ~/demo-openrc.sh

$ nova flavor-list
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny           | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small          | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium         | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large          | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge         | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
| 7  | m2.disk0_c1_m1_s0 | 1024      | 0    | 0         |      | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

Flavor 削除

一方、Flavor を削除する方法は、とても簡単です。

Flavor を削除するためには、admin テナントで以下のコマンドを実行します。

$ nova flavor-delete <FLAVOR_ID>

admin テナントで Flavor を削除してからユーザテナントのアクセス権を解除する等の作業は、不要です。 つまり、flavor-access-add した各テナントの Flavor も削除されることになります。

ここでは、例として、先ほど新規追加した m2.disk0_c1_m1_s0 を削除してみます。

  • admin クレデンシャル読み込み
  • 現在の Flavor リスト確認
  • Flavor 削除
  • Flavor が削除されていることを確認
  • ユーザテナントで Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
admin クレデンシャル読み込み
━━━━━━━━━━━━━━━━━━━━━━━
$ source admin-openrc.sh

━━━━━━━━━━━━━━━━━━━━━━━
現在の Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-list
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny           | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small          | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium         | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large          | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge         | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
| 7  | m2.disk0_c1_m1_s0 | 1024      | 0    | 0         |      | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
Flavor 削除
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-delete 7
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 7  | m2.disk0_c1_m1_s0 | 1024      | 0    | 0         |      | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

━━━━━━━━━━━━━━━━━━━━━━━
Flavor が削除されていることを確認
━━━━━━━━━━━━━━━━━━━━━━━
$ nova flavor-list
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny           | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small          | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium         | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large          | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge         | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+


━━━━━━━━━━━━━━━━━━━━━━━
ユーザテナントで Flavor リスト確認
━━━━━━━━━━━━━━━━━━━━━━━
$ source demo-openrc.sh

$ nova flavor-list
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name              | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny           | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small          | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium         | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large          | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge         | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m2.disk0_c1_m1_s2 | 1024      | 0    | 0         | 2048 | 1     | 1.0         | True      |
+----+-------------------+-----------+------+-----------+------+-------+-------------+-----------+

Flavor 修正について

Dashboard のメニューを確認して見ると Flavor 修正メニューがあるのですが、実際には、修正ではなく、既存の Flavor を削除してからスペックだけ変えてまったく同じ Flavor を再作成しているだけなので、厳密に言うと修正とは言えません。

以上、OpenStack フレーバー追加、削除 でした。