既存のインスタンスの操作
最初は、既存のインスタンスの停止や削除といった操作を行う機能を説明します。
インスタンスを操作する場合の実行経路
ユーザーがインスタンスを操作する際、まずnova-apiコンポーネント(以下、nova-api)にそのリクエストが送信されます。 nova-apiはユーザーのリクエストを認可した後、操作対象のインスタンスがあるnova-computeコンポーネント(以下、nova-compute)にそのリクエストを転送します。 リクエストを受け取ったnova-computeは、インスタンスに対して操作を実行します。
nova-computeがサポートしている仮想化方式
nova-computeは数多くの仮想化方式をサポートしています。 次表に、サポートされている仮想化方式の例を挙げます。
| Hyper-V | Microsoftが提供する仮想化方式。ゲストOSとしてWindowsはもちろん、Red Hat Enterprise LinuxやCent OSなどもサポートしている |
|---|---|
| KVM | Kernel-based Virtual Machine。後述のQEMUの機能の一部を利用するが、ハードウェアはCPU上で仮想化するので高速。Novaはインストールした際、デフォルトではこれを利用しようとする |
| QEMU | ソフトウェア上でハードウェアをエミュレーションする仮想化方式。開発などの用途で広く使われている。なお、QEMUは何かの略称ではなく、そういう名前である |
| UML | User Mode Linux。Linux上で実行することでプロセスの中で独立したLinuxを動作させることができる。仮想サーバー内の各プロセスは、物理サーバー内のプロセスと1対1で紐付けられる |
| VirtualBox | KVMのようにCPU上でハードウェアを仮想化する仮想化方式。Windowsを実行させることも可能 |
| vSphere | 管理用OSを含む仮想化方式。軽量な管理用OSにドライバなども含まれているため、高いパフォーマンスを発揮する。また、サポートされるOSも幅広く、各種LinuxのみならずWindowsやMacをもサポートしている |
| Xen | Linux上で動作する仮想化方式。Linux上で動作するが、Windowsの仮想サーバーを作成することも可能 |
| LXC | Linux Containers。「コンテナ」と呼ばれる形でプロセスやネットワークスペースを分離することによって仮想化環境を作る。起動が速いという利点がある |
| Docker | OpenStackでは2013年2月リリースのHavanaからサポート。LXCと同じくコンテナを利用する仮想化方式だが、アプリケーションのデプロイにより特化されている |
このように、nova-computeが様々な仮想化方式をサポートしているおかげで、他の仮想化環境で動作していたシステムをOpenStack上へ移行する場合に、かかるコストが抑えられます。
また、複数の仮想化方式が混在したクラウドコンピューティングサービスを提供することも可能です。
仮想化方式を問わず共通の方法で操作できる
想像してみてください。OpenStack上で異なる仮想化方式のインスタンスがいくつも動作しているときに、それらを一斉に一時停止させたいとします。 ただし、仮想化方式が異なると、できることや操作の仕方も異なるのが普通です。 すると、各インスタンスの仮想化方式に合わせて、一時停止コマンドを変えて送信することになるのでしょうか。
これは少々無駄ですし、異なる仮想化方式の新規導入がおっくうになりますよね。
OpenStackではその心配はありません。仮想化方式にかかわらず、共通のインターフェイスでどのコンピュートノードにも同じようにアクセスできます。仮想化方式ごとに操作方法やコマンドを使い分けるといった必要はありません。その理由はこうです。
インスタンスを作成するコンピュートノードにはnova-computeをセットアップしますが、このとき、そのコンピュートノードで利用する仮想化方式をnova-computeに設定します。nova-computeは設定された仮想化方式に適合するドライバーを用いて、起動や停止といったインスタンスへの操作を行います。
一方で、インスタンスの仮想化方式が何であれ、同じようにアクセスし操作できるように、nova-apiが共通のインターフェイス(API)を外部に提供しています。ユーザーはnova-apiが受け付けるAPIだけを意識すればよく、内部で使われている仮想化方式について気にかける必要はありません。これが「仮想化方式ごとに操作方法やコマンドを使い分けるといった必要がない」理由です。
また、「ユーザーはnova-apiが受け付けるAPIだけを意識すればよく、内部で使われている仮想化方式について気にかける必要はない」ということは、「APIが取り決められた形式に従っていれば、内部実装にどのような技術を用いてもよい」という意味でもあります。すると、サービスの基盤となる技術を独立させることが可能となります。これは「マイクロサービスアーキテクチャ」の特徴です。
Novaでは、新しい仮想化方式をサポートすることも容易です。nova-computeの共通APIを通じて新しい仮想化方式を扱うためのドライバーを実装するだけです。それで、既存のnova-computeと同じ手順で、新しい仮想化方式のインスタンスを作成できます。
1つのOpenStack環境に、複数の仮想化方式で作成したインスタンスを混在させることも可能です。これは、Novaがコンピュートノードそれぞれに個別のnova-computeを導入する方式を採用しているためです。
どちらも、OpenStackがマイクロサービスアーキテクチャを採用していることに由来します。
