インスタンス

インスタンスは OpenStack クラウドの中で実行中の仮想マシンです。このセクションは、インスタンス、インスタンスが使用するイメージ、インスタンスのネットワークプロパティを扱うための方法について取り扱います。また、それらがデータベースでどのように表現されているかについて取り扱います。

 インスタンスの起動

インスタンスを起動するには、イメージ、フレーバーおよび名前を選択する必要があります。名前は一意である必要がありませんが、名前が一意である限りは、多くのツールが UUID の代わりに名前を使用できるので、シンプルにできます。インスタンスの起動はダッシュボードにおいて、「インスタンス」ページにある「インスタンスの起動」ボタン、または「イメージ & スナップショット」ページにあるイメージまたはスナップショットの隣にある「起動」アクションから実行できます。

コマンドラインでは次のようにします。

$ nova boot --flavor <flavor> --image <image> <name>

指定できる多くのオプション項目があります。インスタンスを起動しようとする前に、このインスタンスのセクションを最後まで読んでください。しかし、これが今から説明する詳細の基本となるコマンドです。

ダッシュボードからインスタンスを削除するには、「インスタンス」ページにおいてインスタンスの隣にある「インスタンスの終了」アクションを選択します。または、コマンドラインから次のとおり実行します。

$ nova delete <instance-uuid>

注意すべき大事な点は、インスタンスの電源オフは、OpenStack 的な意味でのインスタンスの終了ではないということです。

 インスタンスの起動失敗

インスタンスの開始に失敗し、すぐに「エラー」状態になるならば、何が問題なのかを追跡するために、いくつかの異なる方法があります。いくつかの方法は通常のユーザーアクセスで実行でき、他の方法ではログサーバーやコンピュートノードへのアクセスが必要です。

ノードが起動に失敗する最も簡単な理由は、クォータ違反、またはスケジューラーがインスタンスを実行するのに適したコンピュートノードを見つけられなかった場合です。これらの場合、失敗したインスタンスに対して nova show を実行するとエラーが表示されます。

$ nova show test-instance
+------------------------+--------------------------------------------------------------\
| Property               | Value                                                        /
+------------------------+--------------------------------------------------------------\
| OS-DCF:diskConfig      | MANUAL                                                       /
| OS-EXT-STS:power_state | 0                                                            \
| OS-EXT-STS:task_state  | None                                                         /
| OS-EXT-STS:vm_state    | error                                                        \
| accessIPv4             |                                                              /
| accessIPv6             |                                                              \
| config_drive           |                                                              /
| created                | 2013-03-01T19:28:24Z                                         \
| fault                  | {u'message': u'NoValidHost', u'code': 500, u'created': u'2013/
| flavor                 | xxl.super (11)                                               \
| hostId                 |                                                              /
| id                     | 940f3b2f-bd74-45ad-bee7-eb0a7318aa84                         \
| image                  | quantal-test (65b4f432-7375-42b6-a9b8-7f654a1e676e)          /
| key_name               | None                                                         \
| metadata               | {}                                                           /
| name                   | test-instance                                                \
| security_groups        | [{u'name': u'default'}]                                      /
| status                 | ERROR                                                        \
| tenant_id              | 98333a1a28e746fa8c629c83a818ad57                             /
| updated                | 2013-03-01T19:28:26Z                                         \
| user_id                | a1ef823458d24a68955fec6f3d390019                             /
+------------------------+--------------------------------------------------------------\   

この場合、「fault」メッセージに NoValidHost が表示されています。NoValidHost はスケジューラーがインスタンスの要件を満たせなかったことを意味します。

nova show が十分な失敗の理由が表示されていない場合、そのインスタンスがスケジューリングされたコンピュートノードの nova-compute.log やスケジューラーホストの nova-scheduler.log を、インスタンスの UUID で検索するのが、より低レベルの問題を調査する良い出発点となります。

管理ユーザーとして nova show を使用すると、インスタンスがスケジュールされたコンピュートノードが hostId として表示されます。インスタンスがスケジュール中に失敗していれば、この項目が空白です。

 インスタンス固有のデータ

カスタムデータを注入する方法は、認証済みキー注入、ユーザーデータ、メタデータサービス、ファイル注入 (file injection) などいろいろな方法があります。

ユーザーデータとメタデータの違いを明確にするには、「ユーザーデータ」がデータの塊で、インスタンスが実行されていないときに設定することを理解する必要があります。このユーザーデータは、インスタンスが実行中に、インスタンスの中からアクセスできます。設定、スクリプト、またはテナントが必要とする任意のものを保存するために、このユーザーデータを使用します。

Compute では、インスタンスのメタデータはインスタンスと関連付けられたキーバリューペアの集まりです。エンドユーザーがこれらのキーバリューペアを読み書きするために Compute API を使用するとき、Compute がインスタンスの生存期間中にインスタンスの内外からこれらを読み書きします。しかしながら、Amazon EC2 メタデータサービスと互換性のあるメタデータサービス経由で、インスタンスに関連付けられたキーバリューペアをクエリーできません。

ユーザーが nova コマンドを使用して SSH 鍵を生成および登録できます。

$ nova keypair-add mykey > mykey.pem

これにより、インスタンスと関連付けられる mykey という名前の鍵が生成されます。mykey.pem というファイルが秘密鍵です。これは、mykey 鍵が関連付けられたインスタンスに root アクセスできるので、安全な場所に保存すべきです。

このコマンドを使用して、既存の公開鍵を OpenStack に登録できます。

$ nova keypair-add --pub-key mykey.pub mykey

この鍵と関連付けられたインスタンスにアクセスするために、対応する秘密鍵を持つ必要があります。

起動時にインスタンスに鍵を関連付けるには、たとえば、コマンドラインに --key_name mykey を追加します。

$ nova boot --image ubuntu-cloudimage --flavor 1 --key_name mykey

サーバーを起動するとき、他の実行中のインスタンスと区別しやすくするために、メタデータを追加することもできます。--meta オプションを key=value ペアとともに使用します。ここで、キーとバリューの両方の文字列を指定することができます。たとえば、説明とサーバーの作成者を追加できます。

$ nova boot --image=test-image --flavor=1 smallimage --meta description='Small test image'

サーバーの情報を表示するとき、メタデータ行に含まれるメタデータを参照できます。

$ nova show smallimage
+------------------------+-----------------------------------------+
|     Property           |                   Value                 |
+------------------------+-----------------------------------------+
|   OS-DCF:diskConfig    |               MANUAL                    |
| OS-EXT-STS:power_state |                 1                       |
| OS-EXT-STS:task_state  |                None                     |
|  OS-EXT-STS:vm_state   |               active                    |
|    accessIPv4          |                                         |
|    accessIPv6          |                                         |
|      config_drive      |                                         |
|     created            |            2012-05-16T20:48:23Z         |
|      flavor            |              m1.small                   |
|      hostId            |             de0...487                   |
|        id              |             8ec...f915                  |
|      image             |             natty-image                 |
|     key_name           |                                         |
|     metadata           | {u'description': u'Small test image'}   |
|       name             |             smallimage2                 |
|    private network     |            172.16.101.11                |
|     progress           |                 0                       |
|     public network     |             10.4.113.11                 |
|      status            |               ACTIVE                    |
|    tenant_id           |             e83...482                   |
|     updated            |            2012-05-16T20:48:35Z         |
|     user_id            |          de3...0a9                      |
+------------------------+-----------------------------------------+

ユーザーデータはメタデータサービスにおける特別なキーで、ゲストインスタンス内のクラウド対応アプリケーションがアクセスできるファイルを保持します。たとえば、 cloudinit (https://help.ubuntu.com/community/CloudInit) は、このユーザーデータを使用するクラウドインスタンスの初期設定を処理する、Ubuntu のオープンソースパッケージです。

このユーザーデータは、ローカルマシンのファイルに保存され、--user-data <user-data-file> フラグを用いてインスタンスの生成時に渡されます。例えば、

$ nova boot --image ubuntu-cloudimage --flavor 1 --user-data mydata.file 

--file <dst-path=src-path> オプションを用いて、任意のローカルファイルを生成時にインスタンスのファイルシステムの中に置けます。5 ファイルまで保存できます。たとえば、何らかの理由で通常の SSH 鍵の注入ではなく、special_authorized_keysfile という名前の特別な authorized_keys をインスタンスに置きたい場合、以下のコマンドを使用できます。

$ nova boot --image ubuntu-cloudimage --flavor 1 --file /root/.ssh/authorized_keys=special_authorized_keysfile


loading table of contents...