仮想マシンの作成まとめ前回のRecipeで、物理マシン2台にOpenNebulaのフロントエンドとホストをそれぞれセットアップしました。後編では、フロントエンド上のonedにホストやネットワーク、ディスクイメージといったリソースを登録し、OpenNebula環境を組み立てます。組み上がったOpenNebula環境で仮想マシンを作成してログインしてみます。今回は以下の順番でonedにリソースを登録します。ホストの登録ネットワークの登録ディスクイメージの登録テンプレートの登録これらの登録作業はOpenNebulaの管理ユーザーであるoneadminから行います。登録作業はCLI、WebインターフェースSunstoneのどちらからでも可能です。今回はSunstoneから設定してみます。Sunstoneにoneadminユーザーでログインしてください(図1⁠)⁠。Sunstoneにoneadminユーザーでログインするホストの登録Sunstoneの左側にメニューがまとまっています。“⁠Infrastructure⁠”をクリックし、展開されるサブメニューの“⁠Hosts⁠”をクリックすると、ホストの管理画面が表示されます(図2⁠)⁠。ホスト管理画面ここではホスト名“⁠host001⁠”のマシンをホストとして登録します。Hostウィンドウがポップアップします。ホスト名またはIPアドレスを入力し、ホストの所属するクラスターと、そのホストで使用するVirtuarization、Information、Networkingそれぞれのドライバスクリプトを選択します(図3⁠)⁠。ホスト名の入力とドライバスクリプト選択Hostnameホストとして登録する物理マシンのホスト名またはIPアドレスを記入します。Clusterホストが属するクラスターを選びます。今回はクラスター設定については省略します。Default(none)を選択してください。Virualizationハイパーバイザ用のドライバスクリプトを選びます。今回はハイパーバイザにKVMを使用するため、KVMドライバを選択します。Informationモニタリング用ドライバスクリプトを選びます。基本的にはVirtuarizationと同じものを選べば良いです。今回はKVMを選択します。Networkingネットワーク用ドライバスクリプトを選択します。ホスト上で稼働する仮想マシンのネットワーク制御に何を使用するかがここで決まります。vSwitch、iptablesなどが選べます。今回は特にネットワーク制御は行わないため、Default(dummy)を選択します。“Create⁠”ボタンをクリックすると物理マシンがホストとしてOpenNebula環境に登録されます。無事登録されるとStatusがONになります(図4⁠)⁠。登録完了ホスト登録時に、各種ドライバスクリプトがホストの/var/tmp/one以下に転送されます。仮想マシンに提供するネットワークリソースを登録します。ID、と言った属性をひとまとめにして、ネットワークリソースとして管理します。Networks⁠”をクリックすると、ネットワークの管理画面が表示されます(図5⁠)⁠。今回は192.168.1.150から始まる4個のIPv4アドレスを“⁠private⁠”と言う名称で登録することにします。仮想マシンが接続する物理マシンのブリッジインターフェースはbr0です。Networkウィンドウがポップアップします。modeがありますが、今回はWizardを使用します。GeneralName:にネットワークの名称を記入します。今回はprivateと入力します(図6⁠)⁠。ネットワーク名Configurationホスト上のブリッジインターフェースとネットワーク制御方法を指定します(図7⁠)⁠。ブリッジインターフェースと制御方式Bridgeここで指定したブリッジインターフェースに仮想マシンが接続します。今回はbr0と入力します。modelこのネットワークリソースが前提とするネットワーク制御方式を選択します。ホストの登録の際に選択したネットワーク制御方式と揃えておきます。今回はDefaultを選択します。AddressesIPアドレスレンジなどを指定します(図8⁠)⁠。IPアドレスレンジ今回はIPv4で定義します。ラジオボタンはIPv4を選択します。Startレンジの始点となるIPアドレスを記入します。筆者の環境では192.168.1.150から始めることにします。アドレスは適宜変更してください。Start必要に応じて、仮想マシンのMACアドレスを記入します。OpenNebulaは独自のルールに基づいてMACアドレスを自動生成するので、ここでの指定は基本的には不要です。SizeIPアドレスの個数を指定します。Startで指定したIPアドレスからの連番でIPアドレスレンジが登録されます。今回は4を入力します。今回はとりあえず空欄とします。Contextネットマスク、デフォルトゲートウェイ、DNSサーバーなどのネットワーク情報が定義できます(図9⁠)⁠。登録General、Configuration、Addresses、Contextに各種パラメータを入し終えたら、緑地に白抜きの“⁠Create⁠”ボタンをクリックします。これでネットワークリソースが登録されます(図10⁠)⁠。仮想マシンの起動元になるディスクイメージを登録します。OpenNebulaでは仮想マシンのIPアドレス設定やSSH公開鍵の受け渡しに「Contextualization」または省略して「CONTEXT」と呼ばれる仕組みを用意しています。仮想マシン起動時にCONTEXTによる各種設定を行うためには、OpenNebula.orgで配布しているCONTEXTパッケージをディスクイメージにあらかじめインストールしておく必要があります[1]⁠。Marketplaceというサイトを公開しており[2]⁠、CONTEXTパッケージをインストール済みの各種ディストリビューションのディスクイメージを配布しています。14.04のディスクイメージをダウンロードして登録することにします。ディスクイメージはデフォルトではフロントエンドの/var/lib/one/datastores以下にコピーされます。事前にファイルシステムに充分な空きスペースがあることを確認しておきましょう。LabsのMarketplaceで公開されているディスクイメージの一覧が表示されます(図11⁠)⁠。14.04ディスクイメージがヒットするので(図12⁠)⁠、これをクリックします。14.04ディスクイメージディスクイメージの情報が表示されます(図13⁠)⁠。Applianceのウィンドウがポップアップします(図14⁠)⁠。Imagesディスクイメージを登録するデータストアを選択します。今回はデータストアの設定は省略します。1:defaultを選択してください。Nameこのディスクイメージに任意の名称を付けます。今回はubuntu1404imgとします。Nameこのディスクイメージを使用するテンプレートの名称を記入します。テンプレートに付いては後述します。今回はubuntu1404tmplとします。緑地に白抜きの“⁠Import⁠”ボタンをクリックすると、ディスクイメージとテンプレートが登録されます。登録は一瞬で終わりますが、この時点ではディスクイメージのダウンロードがバックグラウンドで実行されており、まだ利用可能になっていません。Resources⁠”から“⁠Images⁠”をクリックすることで確認できます。ダウンロード中はStatusがLOCKEDとなっています。ダウンロードが完了すると、READYに変わります(図15⁠)⁠。opennebula-contextとすることでインストールできます。ディスクイメージのpersistent/nonpersistent属性ディスクイメージにはpersistentとnonpersistentの属性があります。persistent仮想マシンを破棄する際に、仮想マシンのディスクイメージの状態を保存します。仮想マシンを作成すると、前回仮想マシンを破棄した時点のディスクイメージから再開します。OpenNebulaに登録した1つのディスクイメージから、同時に1つだけ仮想マシンが作成可能です。nonpersistent仮想マシンを破棄する際に、仮想マシンのディスクイメージの状態も破棄します。毎回初期状態から仮想マシンが作成されます。OpenNebulaに登録した1つのディスクイメージから、同時に複数の仮想マシンを作成可能です。デフォルトではnonpersistent属性が設定されます。負荷に応じてスケールする計算ノードとして仮想マシンを利用する場合にはnonpersistentに設定と言った具合に、利用方法に応じてディスクイメージの属性を設定できます。テンプレートの登録OpenNebulaでは仮想マシンを構成する各種リソースの組み合わせを「テンプレート」と言う形で定義できます。下記はテンプレートにまとめられるリソースの一部です。仮想マシンの起動元になるディスクイメージ仮想マシンが使用するネットワークCPUコア数メモリサイズ今回のようにMarketplaceからディスクイメージをダウンロードして登録する場合は、テンプレートも一緒に作成されます。今回はubuntu1404tmplという名称でテンプレートを作成しました。この時点ではテンプレートubuntu1404tmplはどのネットワークリソースを使用するか定義されていません。ここではubuntu1404tmplを編集し、先ほど登録したネットワークprivateを使用するよう設定します。Resources⁠”をクリックし、展開されるサブメニューの“⁠Templates⁠”をクリックすると、登録されたテンプレートの一覧が表示されます(図16⁠)⁠。テンプレート一覧ubuntu1404tmplをクリックするとテンプレート情報が表示されるので、上部の“⁠Update⁠”ボタンをクリックします(図17⁠)⁠。Templateのウィンドウがポップアップするので、Networkをクリックします(図18⁠)⁠。model仮想マシンで使用するNICのモデルを指定します。ここではvirtioとしています。現在登録されているネットワークリソースの一覧ここではprivateをクリックします。list⁠”の横に選択したネットワーク名が青地に白抜きで表示されます(図19⁠)⁠。青地に白抜きの“⁠Update⁠”ボタンをクリックすると編集完了です。仮想マシンの作成リソースの準備が整ったので、いよいよ仮想マシンの作成に取りかかります。14.04のイメージファイルは、rootユーザーでのSSHログインのみ可能な設定となっています[4]⁠。公開鍵の受け渡しにはOpenNebulaのCONTEXT機能を使用しています。仮想マシンの起動時にCONTEXTスクリプトが実行され、利用者のSSH公開鍵が仮想マシンの/root/.ssh/authorized_keysにインストールされます。この機能を利用するため、事前に利用者のSSH公開鍵をOpenNebulaのユーザー属性に登録しておきます。今回は、oneadminが仮想マシンを作成しますので、oneadminのユーザー属性にSSH公開鍵を登録します。Sunstoneの左側メニューから“⁠System⁠”をクリックし、展開されるサブメニューの“⁠Users⁠”をクリックすると、ユーザーの一覧が表示されます(図20⁠)⁠。現時点ではoneadminユーザーとserveradminユーザーの2人のみ表示されるはずです。このうちoneadminをクリックします。oneadminユーザーの情報が表示されます(図21⁠)⁠。oneadminユーザーの情報Attributesの一番下に、任意のKEYとVALUEを追加するフォームがあります。ここにSSH公開鍵を追加します。左のフォーム(KEY)にSSH_PUBLIC_KEYと入力し、右のフォーム(VALUE)にSSH公開鍵をコピー&ペーストします(図22⁠)⁠。右のフォームは右下をドラッグすると大きさが変えられるので、適当な大きさに広げておくと便利です。“add⁠”ボタンをクリックするとSSH_PUBLIC_KEY属性が追加登録されます。[4]rootユーザーにパスワードが設定されていないため、SunstoneのVNCコンソールからのログインはできません。Machines⁠”をクリックすると、仮想マシンの一覧が表示されます。availableと表示されています(図23⁠)⁠。Machineウィンドウがポップアップします(図24⁠)⁠。1の枠に作成する仮想マシンの名前と起動数を記入します。Name任意の仮想マシン名を記入します。ここではubuntu1404vmとします。instances作成する仮想マシンの数を記入します。ここでは1台作成することにします。2の枠で、どのテンプレートから仮想マシンを作成するかを選択します。ここではubuntu1404tmplをクリックして選択します。template:⁠”の横に選択したテンプレート名が青地に白抜きで表示されます。緑地に白抜きの“⁠Create⁠”ボタンをクリックすると仮想マシンが作成されます。ホスト上で仮想マシンが起動するとStatusがRUNNINGに変わります(図25⁠)⁠。仮想マシンが起動IPsの欄に、この仮想マシンに割り当てられたIPアドレスが表示されます。このアドレスに対してrootユーザーでSSHログインしてください(図26⁠)⁠。SSHでログインしたところもしrootのパスワードを求めるプロンプトが表示された場合は、SSH公開鍵認証に失敗しています。oneadminユーザー属性のSSH_PUBLIC_KEY属性に適切な公開鍵が登録されているか確認してください。まとめ前編ではOpenNebulaの特徴からインストールまで、後編ではリソース設定から仮想マシンが起動するまでを駆け足で紹介してきました。紹介しきれなかった機能もたくさんありますが、とりあえず触ってみて興味がわく方向を調べてみるとおもしろいと思います。ツールに合わせて環境を構築するのではなく、要望に合わせて環境を構築できるのがOpenNebulaの強みです。OpenNebulaの機能の組み合わせやカスタマイズ、外部のサービスとの連携により、利用者/管理者の望みに柔軟に応えてくれると思います。和訳されたドキュメントは少ないですが、OpenNebula公式のドキュメントが平易な英文でまとまっているので、意外と困らないと思います。クラウドに限った話ではありませんが、本番環境では多くの場合「インストールと初期セットアップが済んだら終了」ということにはなりません。そこから運用という長く過酷な日々が始まります。障害が発生すると原因がハードウェアにあるのかソフトウェアの不具合にあるのかを切り分け、ソフトウェアの不具合であれば開発者に報告し、回避策を検討し、場合によっては自分たちで修正パッチを書くことにもなると思います。構築時に想定していなかった要望が運用開始後に利用者から挙がってくることもあります。すると既存の環境を残しつつ、新しい要望に対応する必要があります。そのようなときに、OpenNebulaのシンプルでフレキシブルな設計と言うのは、非常に大きなアドバンテージだと実感できると思います[5]⁠。[5]少なくとも筆者は実感しています。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。