OpenStack について学ぶ: コンピュート関連コンポーネントの Glance と Nova

この記事では、OpenStack Compute (Nova) プロジェクトと Image (Glance) プロジェクトを紹介し、OpenStack のアーキテクチャー全体の中でこの 2 つのプロジェクトがどのような位置を占めており、どのような機能を実現するのかを説明します。また、これらのプロジェクトのコンポーネントをインストール、構成、使用する上での要件についても説明します。

John Rhoton, Cloud Computing Strategist, Recursive

Author photoJohn Rhoton は、パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウド・コンピューティングに焦点を絞り、世界の企業を顧客としたコンサルティングを専門とする技術ストラテジストです。彼はさまざまな業界イベントで、モバイル、ソーシャル・ネットワーキング、仮想化などの新興技術に関する講演を頻繁に行っており、また『Cloud Computing Explained』(2009年)、『Cloud Computing Architected』(2011年) など、6 冊の著作があります。



2014年 1月 30日

この記事で取り上げるのは、あらゆるワークロードのコアとなる OpenStack Compute (Nova) です。コンピューテーションを伴わずに機能するクラウド・サービスもありますが、そのようなクラウド・サービスは静的ストレージ以上のものではありません。動的なアクティビティーには例外なく、何らかのコンピューテーションの要素が伴います。

OpenStack Compute という名前は特定の 1 つのプロジェクトを指しますが (Nova とも呼ばれます)、実際にはコンピューテーション、およびコンピューテーションを実行するソフトウェアに関連するプロジェクトには、Image と Compute の 2 つがあります。

  • OpenStack Image (Glance とも呼ばれます) は、実行コードと動作環境を格納する静的ディスク・イメージを管理します。
  • OpenStack Compute (Nova) は、実行中のインスタンスを管理します。

Nova はクラウド・コンピューティング・ファブリックを制御することから、インスラストラクチャー・サービスのコアとなるコンポーネントです。Nova は、高度に分散される性質を持っていること、そして数え切れないほどのプロセスがあることが要因で、OpenStack ファミリーのなかで最も複雑なコンポーネントとなっています。

Nova は、他のいくつかの OpenStack サービスとインターフェースを取ります。具体的には、認証を行うための Keystone、管理インターフェースとして使用する Horizon、そして Nova のイメージを提供する Glance とインターフェースを取ります。そのなかで、Nova が最も緊密にやりとりするサービスは、Glance です。Nova がインスタンスを起動する際に使用するイメージをダウンロードするには、この Glance サービスが必要となります。

Nova の詳細を探る前に、順番的にはコンピュート・ワークロードの開始部分に相当する Image サービスについて詳しく見て行きましょう。OpenStack Image Service は 仮想マシン (VM) イメージを登録、一覧表示、取得するサービスであり、そのプロジェクト名は Glance です。

Glance は OpenStack クラスター内のイメージを管理しますが、実際のストレージを扱うわけではありません。Glance は、単純なファイルシステムから OpenStack Swift プロジェクトなどのオブジェクト・ストレージ・システムに至るまで、さまざまなストレージ・テクノロジーを抽象化します。実際のディスク・イメージと併せ、Glance はイメージを記述するメタデータとステータス情報を保持します。

仮想イメージの中央リポジトリーとなるのは、OpenStack Image Store です。ユーザーおよび他のプロジェクトは、インスタンスを起動するために利用できるパブリック・イメージとプライベート・イメージの両方をこの OpenStack Image Store に格納することができます。さらに、利用可能なイメージのリストをリクエストし、それらの構成情報を取得し、Nova インスタンスを開始する土台としてそれらイメージを使用することができます。また、VM とその状態をバックアップする手段として、実行中のインスタンスからスナップショットを作成することもできます。

Nova が活躍するのは、イメージが作成された後です。通常、Nova はイメージを使用してインスタンス (VM) を起動します。Nova には仮想化ソフトウェア自体は組み込まれていませんが、仮想化テクノロジーとインターフェースを取るドライバーを通じて、一般的なハイパーバイザーの多くを統合することができます。

実際的な観点から見ると、インスタンスを起動するには、仮想ハードウェア・テンプレート (OpenStack では「フレーバー」と呼ばれます) を識別して指定する必要があります。仮想ハードウェア・テンプレートとは、VM インスタンスに割り当てられるコンピュート・リソース (仮想 CPU)、メモリー (RAM)、ストレージ構成 (ハードディスク) を記述するものです。デフォルトのインストールでは、5 つのフレーバーが提供されます。これらのフレーバーは、管理者が構成できるようになっています。

仮想ハードウェア・テンプレートが指定されると、Nova はリクエストされたインスタンスの実行をスケジューリングするために、その実行インスタンスを特定のコンピュート・ノード (OpenStack では「ホスト」と呼ばれます) に割り当てます。従って、システムのそれぞれが、定期的にそのステータスと機能を tonova-scheduler に報告しなければなりません。このスケジューラーはそのデータを使用して、ホストに対するインスタンスの割り当てを最適化します。

割り当てプロセス全体は、2 つのフェーズで構成されます。まず、「フィルタリング」フェーズでは、一連のフィルターを適用して、最適なホストのリストを生成します。その際に最も重要な考慮事項の 1 つとなるのは、すべての OpenStack サービスが公開するそれぞれの機能です。スケジューラーがホストの選択を絞り込んで、リクエストのパラメーターを満たすホストのみにすると、次の「重み付け」フェーズでは、特別な機能を使用して各ホストのコストが計算され、その結果がソートされます。このフェーズの出力が、特定の数のインスタンスに対するユーザーのリクエストを最小コストで満たすことが可能なホストのリストになります。

Nova には他にもいくつかの機能を実行し、その多くは、ネットワーク、セキュリティー、管理に対処する他の OpenStack プロジェクトと緊密なやりとりをします。ただし、Nova が一般に対処するのは、ストレージの接続と接続解除、IP アドレスの割り当て、実行中インスタンスのスナップショットの作成といった、インスタンス固有の側面です。

アーキテクチャー

Nova は、何も共有されないアーキテクチャーを使用します (図 1 を参照)。そのため、主要なすべてのコンポーネントをそれぞれ個別のサーバー上で実行することができます。この分散設計では、メッセージ・キューを利用して、コンポーネント間の非同期通信に対処します。

図 1. Nova のアーキテクチャー
Nova のアーキテクチャーを示す図

Nova は VM の状態を、すべての OpenStack コンポーネントが使用する SQL (Structured Query Language) ベースの中央データベースに保管します。このデータベースには、使用可能なインスタンス・タイプ、ネットワーク (nova-network が使用されている場合)、およびプロジェクトの各詳細が格納されます。SQLAlchemy でサポートされているデータベースであれば、どのデータベースでも中央データベースとして使用することができます。

Web ダッシュボード

OpenStack Compute との主要なユーザー・インターフェースは、Web ダッシュボード (OpenStack Horizon) です。この Web ダッシュボードは、あらゆる OpenStack モジュールの中央ポータルとして、すべてのプロジェクトのグラフィック・インターフェースを提供し、API (アプリケーション・プログラミング・インターフェース) を呼び出すことによって、リクエストされたどのサービスでも呼び出します。

試してください!

セルフサービス IaaS SoftLayer インフラストラクチャーの試用

API

この REST (REpresentational State Transfer) ベースの API は、URI (Uniform Resource Indicator) をコントローラー・クラスのアクション・メソッドにルーティングする Web Server Gateway Interface アプリケーションです。この API は HTTP リクエストを受け取ると、コマンドを処理してから、メッセージ・キューまたは (ObjectStore の場合) HTTP を介して他のコンポーネントにタスクを委任します。Nova API は、OpenStack Compute API、Amazon EC2 (Amazon Elastic Compute Cloud) API、そして特権ユーザーの管理 API をサポートしています。ほとんどのオーケストレーション・アクティビティーおよびポリシー (クォータなど) は、この API が開始します。

認可マネージャー

HTTP リクエストごとに、プロバイダーがコンピュート・ノードに構成した認証スキームのいずれかを使用した特定の認証用クレデンシャルが必要です。認可マネージャーは別個のバイナリーではなく、あらゆる OpenStack コンポーネントが認証に使用できる Python クラスです。認可マネージャーは、ユーザー、プロジェクト、ロールに認可されている API 使用法を公開し、OpenStack Keystone と詳細についてのやり取りをします。実際のユーザー・ストアには、データベースまたは LDAP (Lightweight Directory Access Protocol) バックエンドのいずれかを使用することができます。

ObjectStore

ObjectStore は、Amazon Simple Storage Service のような、イメージを保管するための単純な HTTP ベースのオブジェクト・ストレージです。これは、OpenStack Glance との置き換えが可能であり、通常は OpenStack Glance に置き換えられます。

メッセージ・キュー

メッセージ・キューは、OpenStack Nova を構成するすべてのコンポーネントが互いに通信して調整を取るための手段となります。メッセージ・キューはいわば、すべての Nova コンポーネントによって共有および更新される一元化されたタスク・リストのようなものです。

すべての Nova コンポーネントはノンブロッキング・メッセージ・ベースのアーキテクチャーで実行されるため、これらのコンポーネントが同じメッセージ・キュー・サービスを使用する限り、同じホストからでも異なるホストからでも実行することができます。コンポーネント間のやりとりは、Advanced Message Queuing Protocol を使用したコールバック指向の方法で行われます。ほとんどのディストリビューションでは、デフォルトで、Kombu ライブラリーからアクセスする RabbitMQ を実装しますが、Apache Qpid および ZeroMQ にはプラグインも使用することができます。

Nova コンポーネント間では、リモート・プロシージャー・コールを使用して、メッセージ・ブローカーを介したパブリッシュ/サブスクライブ方式で、通信が行われます。さらに具体的に言うと、Nova は rpc.call (API がコンシューマーとして機能するリクエスト/レスポンス用) および rpc.cast (API がパブリッシャーとして機能する片方向通信用) を実装しています。

Nova API およびスケジューラーはメッセージ・キューを呼び出し側として使用し、Network と Compute はワーカーとして機能します。呼び出し側は、rpc.call または rpc.cast を使用してメッセージを送信します。ワーカー・パターンでは、キューからメッセージを受け取って、各 rpc.call に適切なレスポンスで応答します。

デーモン

Nova で検討すべき主要なデーモンには、スケジューラー・デーモンとコンピュート・デーモンの 2 つがあります。スケジューラー・デーモンは、VM リクエストに対して割り当てるコンピュート・ホストを決定します。そのために、前述のフィルタリング・アルゴリズムとスケジューリング・アルゴリズムを使用して、各種のパラメーターを検討します。これらのパラメーターには、アフィニティー (関連するワークロードの同一場所への配置)、非アフィニティー (ワークロードの分散)、アベイラビリティー・ゾーン、コア CPU 使用率、システム RAM、カスタム JSON (JavaScript Object Notation) スケジュールなどがあります。スケジューラー・デーモンは、この決定をプロビジョニングするときにだけ行うことに注意してください。スケジューラー・デーモンによって実行中のインスタンスが再分散されることはありません。

Nova コンピュート・デーモンは、ハイパーバイザーと VM との通信を管理するワーカー・デーモンで、メッセージ・キューから要求を受け取って、ハイパーバイザーの API を使用して VM の作成タスクや削除タスクを実行します。コンピュート・デーモンはまた、中央データベースに保管されている自身のタスクのステータスを更新します。

完全を期して説明しておくと、数あるデーモンのなかには、当初 Nova に割り当てられていた機能で、その後次第に他のプロジェクトに移されつつある機能をカバーするものがあります。例えば、ネットワーク・マネージャーは、IP フォワーディング、ネットワーク・ブリッジ、仮想 LAN を管理し、ネットワーク関連のタスクをメッセージ・キューから選定するワーカー・デーモンです。現在、OpenStack Neutron もこれらの機能に対応するようになっているため、ネットワーク・マネージャーの代わりに OpenStack Neutron を選択することもできます。

ボリューム・マネージャーは、永続ブロック・ストレージ・ボリュームの VM への接続および接続解除を行います (Amazon Elastic Block Store と同様の機能です)。この機能がボリューム・マネージャーから抜き出されて、OpenStack Cinder に取り込まれました。Cinder は、論理ボリューム・マネージャーを使用する iSCSI ソリューションです。


セットアップ

OpenStack コンポーネントの実際のインストール手順は、ディストリビューションによっても OpenStack リリースによっても、大きく異なります。通常は、ディストリビューションの一部として使用可能になるとはいえ、完了しなければならない共通の基本タスクがあります。このセクションでは、OpenStack のインストールに関係する概念を説明します。

システム要件

OpenStack は 64 ビット x86 アーキテクチャーを利用します。それ以外の点では、一般商品化されたハードウェア用に設計されているため、最小システム要件は厳しいものではありません。8GB の RAM を搭載した単一システムがあれば、一連の OpenStack プロジェクトのすべてを実行することができます。ただし、真剣な取り組みである場合は、ネットワーク、ボリューム、API、スケジューラー、およびイメージ・サービスを実行するクラウド・コントローラー・ノードは、少なくとも 12GB の RAM、2 つの 2TB のディスク、およびネットワーク・アダプターを備えていることが公式に推奨されています。(仮想インスタンスを実行する) コンピュート・ノードは、負荷の面でさらに大きく異なるはずですが、単純なシステムには少なくともクアッド・コア CPU、32GB の RAM、2 つの ギガビット・ネットワーク・アダプターが推奨されます。

インストール

インストール手順はディストリビューションによって異なります。さらに具体的に言うと、どのパッケージ管理ユーティリティーを選択するかによって変わってきます。ほとんどの場合に共通して必要となるのは、リポジトリーの宣言です。例えば、Zypper の場合には、zypper ar を使用して libzypp を宣言します。

リスティングを見るにはここをクリック

# zypper ar -f http://download.opensuse.org/repositories/Cloud:/OpenStack:/Grizzly/SLE_11_SP3/Cloud:OpenStack:Grizzly.repo

次に、必要な Nova パッケージをコントローラー・ノードとコンピュート・ノードの両方にインストールします。すべての依存関係は、パッケージ管理ユーティリティーによって自動的にインストールされるはずです。

説明用として、以下に Ubuntu、Red Hat (Red Had Enterprise Linux、CentOS、Fedora)、および openSUSE の場合に使用する主要なコマンドを記載します。

  • Ubuntu: コントローラー・ノードでは、以下のコマンドを実行します。

    リスティングを見るにはここをクリック

    sudo apt-get install nova-novncproxy novnc nova-api nova-ajax-console-proxy nova-cert nova-conductor nova-consoleauth nova-doc nova-scheduler nova-network

    コンピュート・ノードでは、以下のコマンドを実行します。

    sudo apt-get install nova-compute nova-network
    sudo apt-get install glance
  • Red Hat: 以下のコマンドを実行します。
    sudo yum install openstack-nova 
    sudo yum install openstack-glance
  • openSUSE: 以下のコマンドを実行します。
    sudo zypper install openstack-nova openstack-glance

構成

Nova の構成に必要なファイルは複数ありますが、そのうち最も重要なのは、/etc/nova にインストールされている nova.conf です。標準のインストール済み環境には、オプションのデフォルト設定が適切ですが、特殊な要件がある場合には、構成を編集する必要があります。nova.conf ファイルのフォーマットは、ここをクリックすると確認することができ、nova.conf 構成オプションのリストは、ここをクリックすると参照することができます。


使用シナリオ

OpenStack Compute が実際にどのように使用されるのかを把握するための例として、OpenStack で起動するベース・イメージがあるとします。システムを構成して独自のカスタマイズを行った後、このプロビジョニング・プロセスの時間を短縮して同じタスクを再実行できるように、実行中インスタンスのスナップショットを作成しておくとよいかもしれません。プロジェクトの完了後は、インスタンスを停止しなければなりません。さらには、イメージも削除したほうがよい場合があります。

  1. メンバー・ロールが割り当てられたユーザーとして、OpenStack Dashboard にログインします。
  2. ナビゲーション・ペインで、「Manage Compute (コンピュートの管理)」の下に記載されている「Images & Snapshots (イメージとスナップショット)」をクリックし、次に「Create Image (イメージの作成)」をクリックします。これにより、「Create An Image (イメージの作成)」ウィンドウが開きます (図 2 を参照)。このウィンドウで、目的のインスタンスを定義する設定を構成することができます。
  3. 前に作成またはダウンロードしたイメージの名前と場所を入力します。イメージ・ファイルのフォーマットは指定しなければなりませんが、最小ディスク・サイズや最小 RAM については、指定する必要がなければ、指定しなくても構いません。
    図 2. イメージを作成する
    「Create An Image (イメージの作成)」ウィンドウを示す図
  4. イメージを作成した後、「Manage Compute (コンピュートの管理)」の下に記載されている「Instances (インスタンス)」をクリックし、次に「Launch Instance (インスタンスの起動)」をクリックします。
    図 3. インスタンスを起動する
    「Launch Instance (インスタンスの起動)」ウィンドウを示す図
  5. 構成を確認するウィンドウが開きます。このウィンドウで、必要なフレーバー (基本ハードウェア構成) を指定することができます。「Launch (起動)」をクリックすると、インスタンスが起動されて実行中の状態になります。
  6. スナップショットを作成する場合は、同じく「Manage Compute (コンピュートの管理)」の下に記載されている「Instances (インスタンス)」をクリックします。次に、対象のインスタンスに関連付けられた行で「Create Snapshot (スナップショットの作成)」をクリックします。
    図 4. インスタンス
    「Instances (インスタンス)」ウィンドウを示す図

    クリックして大きなイメージを見る

    図 4. インスタンス

    「Instances (インスタンス)」ウィンドウを示す図

    このウィンドウから実行できるその他のタスクには、インスタンスの編集、一時停止、中断、リブートがあります。また、インスタンスを使用し終わった後にインスタンスを停止するときにも、このウィンドウを使用します。

  7. イメージとすべてのスナップショットを削除するには、「Images & Snapshots (イメージとスナップショット)」メニューに移動します。ここに、不要になったオブジェクトを削除する手段があります。
図 5. イメージとスナップショット
「Images & Snapshots (イメージとスナップショット)」ウィンドウを示す図

クリックして大きなイメージを見る

図 5. イメージとスナップショット

「Images & Snapshots (イメージとスナップショット)」ウィンドウを示す図

まとめ

OpenStack Compute 機能を使い始めるために必要な作業は、これだけです。OpenStack を使用したコンピュート・ワークロードの計画およびデプロイメントの際に留意しなければならない要点は、これは仮想化プラットフォームではなく、管理の抽象化であるということです。この抽象化により、さまざまなプラガバブル・テクノロジーを使用する多様なハイパーバイザー全体でのワークフローのオーケストレーションが可能になります。OpenStack は、これらのコンポーネントの管理および統合を単純化するだけに過ぎません。

参考文献

学ぶために

製品や技術を入手するために

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=960667
ArticleTitle=OpenStack について学ぶ: コンピュート関連コンポーネントの Glance と Nova
publish-date=01302014