クラウド構築・管理ツールのOpenNebulaが、2017年7月20日にOpenNebula 5.4 'Medusa'をリリースしました[1]。バージョン5系列で3回目の安定版リリースとなります。Ubuntu Weekly Recipeでは第345回、346回でOpenNebula
バージョン4系列での環境構築方法を取り上げました。5系列では手順に一部変更がありますので、今回は改めてUbuntuでのOpenNebula 5.4の環境構築を紹介します[2]。
OpenNebula 5.4のごく簡単な紹介
OpenNebula 5.4はVMware vSphere環境向けの機能強化の他、新機能がいくつか追加されています。主要なものを取り上げてみます。
VM Groups
「仮想マシンと仮想マシン」「仮想マシンとホスト」というグループ化と、affinity/anti-affinityのルール付けができるようになりました。特定の仮想マシングループを特定のホストで実行する、CPUバウンドな仮想マシン同士が同じホスト割り当てられないようにする、といったルールが定義できます。
既存の類似機能としてClusterがありますが、こちらはホストとネットワークやデータストアといった粒度の大きいリソースでグループ化するもので、細かな設定に難がありました。VM Groupsはホストと仮想マシン単位でのグループ化とルール付けが可能で、利用するシーンが多そうです。
High Availability
フロントエンドの冗長構成がOpenNebulaネイティブな機能として実装されました。過去のバージョンではCorosyncとPacemakerを利用して冗長構成が組めましたが、5.4ではこれらのサードパーティーコンポーネントは不要となっています。
複数のOpenNebulaフロントエンドをゾーンとして束ねるData Center Federation機能も、バックエンドデータベースのMySQL/MariaDBによるレプリケーションが不要となっています。いずれの機能も過去のバージョンに比べて構築しやすいものとなっているようです。
OpenNebula 5.4のサポートする環境
Release Notes 5.4のPlatform NotesにOpenNebulaがサポートする環境の一覧がまとまっています。UbuntuについてはUbuntu Server 14.04 LTS、16.04 LTS、17.04がサポートされています[3]。また、Debianは8、9が、Red
Hat Enterprise LinuxとCentOSは7系列がサポートされています。
OpenNebula 5.4でクラウド環境を構築してみよう
今回は以下の構成で環境を構築します。
- OpenNebulaデーモンの稼働する「フロントエンド」、仮想マシンの稼働する「ホスト」の合計2台のマシンからなるインフラ構成とします。
- フロントエンド、ホストともにUbuntu Server 16.04.2 LTSを使用します。
- OpenNebula公式リポジトリの5.4パッケージを使用します。Ubuntu 16.04 LTSのリポジトリにはOpenNebula 4.12パッケージがありますが、こちらは使用しません。
- データベースはデフォルトのSQLiteを使用します。
- データストアの転送ドライバはsshを使用します。
OpenNebulaリポジトリ追加
フロントエンドとホストの両方にOpenNebulaの公式リポジトリを追加します。まずは鍵を登録します。
続いてUbuntu Server 16.04用のOpenNebula 5.4リポジトリを追加します。
apt updateした後、apt policyでインストールされるOpenNebulaパッケージを確認します。
Candidate: 5.4.0-1となっていますね。
フロントエンドのセットアップ
OpenNebulaデーモンの稼働するフロントエンドは、物理マシンやネットワークアドレス、イメージファイルなどのリソース情報の管理やスケジューリングを司ります。また、今回はWebインタフェースのSunstoneやCLIもフロントエンドにインストールします[4]。
フロントエンド向けパッケージのインストール
apt installで以下のパッケージをインストールします。今回の記事では触れないOneGateやOneFlowといった関連パッケージも一緒にインストールしています。
続いてinstall_gemsスクリプトを実行します。install_gemsスクリプトはビルドに必要なパッケージをインストールした後に依存するRubyライブラリをインストールします。
OpenNebulaサービスの開始
フロントエンドでOpenNebulaサービスを開始できる状態となりました。さっそくsystemctlコマンドで起動してみましょう。
確認のためUNIXアカウントのoneadmin権限でoneuserコマンドを実行してみます。以下のような出力があれば、OpenNebulaデーモンのonedは問題なく起動できています。
Webブラウザでフロントエンドマシンのポート9869番にアクセスし、Sunstoneが起動していることを確認します。
この時点でSunstoneにはOpenNebulaの管理者アカウントoneadminでログインできます。パスワードはフロントエンドの/var/lib/one/.one/one_authに記載されています。":"で区切られた右側がOpenNebulaデーモン初回起動時にランダムで作成されたoneadminアカウントのパスワードです。
問題なければsystemdから自動起動するよう設定しておきましょう。
ホストのセットアップ
仮想マシンインスタンスが稼働するホストをセットアップします[5]。
Linux環境ではハイパーバイザはKVMを使用します。バージョン4系列まではXen用のドライバスクリプトが用意されていましたが、5系列からはAdd-onとして別途追加する形式になっています。その他にもLXDを使用するAdd-onなどがコミュニティにより提供されています。
ホスト向けパッケージのインストール
ホストはopennebula-nodeパッケージをインストールします。これによりqemu関連やlibvirt関連等の依存パッケージのインストール、UNIXアカウントのoneadminの作成、OpenNebula用の設定ファイルの配置などが行われます。
apt policyでインストール候補が5.4.0-1となっていることを確認します。
opennebula-nodeパッケージがインストールされるタイミングでlibvirt関連の設定ファイルがOpenNebula用に書き換わるため、libvirt-binを再起動します。
ブリッジインタフェース設定
仮想マシンへのネットワーク提供用にブリッジインターフェースを作成します。今回はbridge-utilsを使用します。
Ubuntu Server 16.04はデフォルトでは/etc/network/interfaceにインタフェース設定が記述されています。これをコメントアウトします。
次に/etc/network/interfaces.d/以下にブリッジインタフェース用の設定ファイルを作成します。ブリッジインタフェース名は任意で構いませんが、ホスト間で統一しておく必要があります。この例では「br0」としています。
なお、NICのインタフェース名(この例ではenp3s0)は環境によって異なりますので、適宜読み替えてください。
上記を設定後、ホストマシンを再起動します。
ノーパスフレーズSSH公開鍵認証設定
OpenNebulaはフロントエンドとホスト間のやりとりをUNIXアカウントのoneadmin権限のSSHで行います。フロントエンド上の各種ドライバスクリプトのホストへの配布や、仮想マシンの起動・停止等の操作、デフォルトのイメージファイル転送もSSHです。
フロントエンドでOpenNebulaをインストールしたタイミングで、/var/lib/one/.sshにノーパスフレーズのSSH鍵ペアが作成され、authorized_keysに公開鍵が登録されています。これらを何らかの方法ですべてのホストに配布します。今回はホスト上で一時的にパスワード認証を有効にしてscpで配布する方法を採ります[6]。
ホスト側設定
ホスト側の/etc/ssh/sshd_configでパスワード認証を有効にします。
sshdを再起動します。
UNIXアカウントoneadminにパスワードを設定します。
フロントエンド側設定
ssh-keyscanコマンドでUNIXアカウントoneadminのknown_hostsにフロントエンドと全ホストマシンのホスト鍵を登録します。この例ではフロントエンドにmogami.example.org、ホストにhost001.example.orgを登録します。FQDNとショートネームの両方で登録しておくとホスト名絡みのトラブルを事前に防げるのでおすすめです。
SSH鍵ペアとauthorized_keys、known_hostsを.sshディレクトリごとホストにscpします。
UNIXアカウントoneadminがホストにノーパスフレーズのSSH公開鍵認証でログインできること、ホストからフロントエンドにもノーパスフレーズでログインできることを確認します。
以降は公開鍵認証でログインできるので、ホスト側のsshdのパスワード認証は無効にして構いません。
ホストをOpenNebula環境に登録
フロントエンドとホストでノーパスフレーズでのSSHが可能になったことで、ホストをOpenNebula環境に登録する準備が整いました。
バージョン4系列までのOpenNebulaは、フロントエンドとホスト間のイメージファイル受け渡し方法がデフォルトではNFSとなっていました。これに対し、バージョン5系列からはデフォルトのイメージファイル受け渡しがSSHに変更されました[7]。
SSHでのファイル転送(scp)によるイメージファイル受け渡しは、仮想マシンのデプロイ開始からインスタンス起動までに転送によるタイムラグが生じる、KVMのライブマイグレーションが利用できないといったデメリットはあるものの[8]、ホストのローカルファイルシステムからインスタンスを起動するためディスクI/Oスループットや信頼性が高く、フロントエンドの負荷も低い上に管理が容易です。
ホストを含む各種リソースのOpenNebulaへの登録は、SunstoneまたはCLIから行います。今回はターミナルからCLIで登録してみましょう。フロントエンドにログインし、UNIXアカウントoneadminにスイッチします。
onehost createコマンドでホストを登録します。ここではhost001をOpenNebula環境に登録します[9]。
-iオプションはインフォメーションドライバスクリプト、-vは仮想マシンドライバスクリプトの指定です。Linux環境では通常ハイパーバイザにKVMを使用するため、-i、-vオプションはどちらも"kvm"を指定します[10]。
onehost listコマンドで登録されたホストの一覧を表示します。STATがonになっていれば正常に登録されています。
STAT欄が「err」と表示された場合はトラブルシュートの時間です。フロントエンドの/var/log/one/oned.logに、ドライバスクリプト実行中にエラーとなったコマンドとその標準エラー出力メッセージが記録されているので、障害の原因の当たりが付けやすいと思います。
まとめ
今回はフロントエンドとホストのセットアップ、OpenNebula環境へのホストの登録までを辿りました。次回のRecipeではネットワークやイメージといったリソースをOpenNebula環境に登録し、仮想マシンインスタンスを起動してみる予定です。