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