Ubuntu Weekly Recipe

第483回 UbuntuとOpenNebulaでもういちどクラウド環境を構築してみよう

この記事を読むのに必要な時間:およそ 5.5 分

ノーパスフレーズSSH公開鍵認証設定

OpenNebulaはフロントエンドとホスト間のやりとりをUNIXアカウントのoneadmin権限のSSHで行います。フロントエンド上の各種ドライバスクリプトのホストへの配布や,仮想マシンの起動・停止等の操作,デフォルトのイメージファイル転送もSSHです。

フロントエンドでOpenNebulaをインストールしたタイミングで,/var/lib/one/.sshにノーパスフレーズのSSH鍵ペアが作成され,authorized_keysに公開鍵が登録されています。これらを何らかの方法ですべてのホストに配布します。今回はホスト上で一時的にパスワード認証を有効にしてscpで配布する方法を採ります※6)⁠

※6
OpenNebulaのドキュメントでは鍵の配布に構成管理ツールの使用を推奨しています。筆者はAnsibleで配布しています。

ホスト側設定

ホスト側の/etc/ssh/sshd_configでパスワード認証を有効にします。

PasswordAuthentication yes

sshdを再起動します。

$ sudo systemctl restart ssh.service

UNIXアカウントoneadminにパスワードを設定します。

$ sudo passwd oneadmin
Enter new UNIX password:  (パスワード文字列を入力)
Retype new UNIX password: (もう一度パスワード文字列を入力)
passwd: password updated successfully

フロントエンド側設定

ssh-keyscanコマンドでUNIXアカウントoneadminのknown_hostsにフロントエンドと全ホストマシンのホスト鍵を登録します。この例ではフロントエンドにmogami.example.org,ホストにhost001.example.orgを登録します。FQDNとショートネームの両方で登録しておくとホスト名絡みのトラブルを事前に防げるのでおすすめです。

$ ssh-keyscan mogami mogami.example.org host001 host001.example.org  >> /var/lib/one/.ssh/known_hosts

SSH鍵ペアとauthorized_keys,known_hostsを.sshディレクトリごとホストにscpします。

$ scp -rp /var/lib/one/.ssh host001:/var/lib/one
oneadmin@host001's password: (ホスト上のoneadminアカウントのパスワードを入力)

UNIXアカウントoneadminがホストにノーパスフレーズのSSH公開鍵認証でログインできること,ホストからフロントエンドにもノーパスフレーズでログインできることを確認します。

oneadmin@mogami:~$ ssh host001
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-87-generic x86_64)
(略)
oneadmin@host001:~$ ssh mogami
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-87-generic x86_64)
(略)

以降は公開鍵認証でログインできるので,ホスト側のsshdのパスワード認証は無効にして構いません。

ホストをOpenNebula環境に登録

フロントエンドとホストでノーパスフレーズでのSSHが可能になったことで,ホストをOpenNebula環境に登録する準備が整いました。

バージョン4系列までのOpenNebulaは,フロントエンドとホスト間のイメージファイル受け渡し方法がデフォルトではNFSとなっていました。これに対し,バージョン5系列からはデフォルトのイメージファイル受け渡しがSSHに変更されました※7)⁠

※7
5系列でもNFSでのイメージファイル受け渡しを利用することができますが,今回は省略します。

SSHでのファイル転送(scp)によるイメージファイル受け渡しは,仮想マシンのデプロイ開始からインスタンス起動までに転送によるタイムラグが生じる,KVMのライブマイグレーションが利用できないといったデメリットはあるものの※8)⁠ホストのローカルファイルシステムからインスタンスを起動するためディスクI/Oスループットや信頼性が高く,フロントエンドの負荷も低い上に管理が容易です。

※8
ライブマイグレーションではなく,仮想マシンの一時的な停止を伴うコールドなマイグレーションはSSH転送でもサポートしています。

ホストを含む各種リソースのOpenNebulaへの登録は,SunstoneまたはCLIから行います。今回はターミナルからCLIで登録してみましょう。フロントエンドにログインし,UNIXアカウントoneadminにスイッチします。

$ sudo -i -u oneadmin

onehost createコマンドでホストを登録します。ここではhost001をOpenNebula環境に登録します※9)⁠

※9
ホスト名は名前解決できる必要があります。DNSサーバーを立てて参照するか,全マシンの/etc/hostsにフロントエンドとホストを登録するなどしておきましょう。
$ onehost create host001 -i kvm -v kvm
ID: 0

-iオプションはインフォメーションドライバスクリプト,-vは仮想マシンドライバスクリプトの指定です。Linux環境では通常ハイパーバイザにKVMを使用するため,-i,-vオプションはどちらも"kvm"を指定します※10)⁠

※10
OpenNebulaではホスト単位でハイパーバイザを指定します。一つのホストに複数のハイパーバイザを指定することはできません。

onehost listコマンドで登録されたホストの一覧を表示します。STATがonになっていれば正常に登録されています。

$ onehost list
  ID NAME            CLUSTER   RVM      ALLOCATED_CPU      ALLOCATED_MEM STAT
   0 host001         default     0       0 / 200 (0%)     0K / 7.7G (0%) on

STAT欄が「err」と表示された場合はトラブルシュートの時間です。フロントエンドの/var/log/one/oned.logに,ドライバスクリプト実行中にエラーとなったコマンドとその標準エラー出力メッセージが記録されているので,障害の原因の当たりが付けやすいと思います。

まとめ

今回はフロントエンドとホストのセットアップ,OpenNebula環境へのホストの登録までを辿りました。次回のRecipeではネットワークやイメージといったリソースをOpenNebula環境に登録し,仮想マシンインスタンスを起動してみる予定です。

著者プロフィール

大田晃彦(おおたあきひこ)

株式会社 創夢 所属。UbuntuとGentooでアニメを録画したりしながら暮らしています。全体的に浅いです。

コメント

コメントの記入