Permalink: 2014-05-20 20:50:00+09:00 by ruy@ainoniwa.net in technical tags: kvm libvirt webvirtmgr social:

さまり

GUIは入れたくないけど手軽に使えるKVM管理ツール的なものが欲しい(切実)。

この中(http://www.linux-kvm.org/page/Management_Tools)から、 UI TypeがWebかつLicenseがCommercialでないものを探しては、なんか違うなぁ、と思って生きてきた。

今回扱うWebVirtMgrは単にlibvirtを扱うWebUIで、機能はかなり絞られている。

最初にCLIで少し準備をして、起動と終了と画面転送だけ使う。といった具合に割り切る必要があるけど、 簡単なので使い方次第では丁度いいと思うんだ。

トポロジ

大体こういう感じ。一応、管理する側とされる側を分離してみる。まぁIPとかそういうのは適当でいいわ。

webvirtmgr_topology_001.png

いや、ほら、なんか...PCの画像がオサレだったから...意味も無く描いただけで...はい...。

WebVirtMgr(Frontend)のインストール

Ubuntu 14.04 server amd64を使います。このノードには、仮想化機能があってもなくても良いです。

インストール方法はここ(https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr)に書いてあります。

で、実はインストール方法をだばーっと書こうと思っていたんです。

が、つい先日Fabricを用いたDeploy方法がマージされたらしく、明らかにこっちの方が楽でしょという感じなので、これを使います。

https://github.com/retspen/webvirtmgr/tree/master/deploy/fabric

ではスタート(既にFabricをインストールした環境がある場合は、一部スキップできます):

$ sudo apt-get install -yq python-pip gcc python-dev git
$ git clone https://github.com/retspen/webvirtmgr.git
$ cd webvirtmgr/deploy/fabric
$ sudo pip install -r fab_requirements.txt
$ fab -H 127.0.0.1 -u username deploy_webvirt
  • ログインユーザはsudoersである必要があります
  • パスワードは必要な時に聞いてくれるので、fabコマンドと一緒に書く必要はありません(-p passwordみたいに)
  • HTTP/HTTPS proxyのことは知らん。sudo -Eしたり/etc/environmentに書いたりしろ

少し待つと、DB初期化について対話形式になるので、適当に答える。アカウントはadmin/adminとかにしておきましょうかね。:

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)

少し待てば完了。http://<frontend-ip>/にレッツアクセス。

webvirtmgr_webui_001.png

KVM(Hypervisor)のインストール

今度は、IP経由でlibvirtdに接続できるように設定。これもUbuntu 14.04 server amd64を例にします。

公式ドキュメント万歳

https://help.ubuntu.com/14.04/serverguide/virtualization.html

KVMインストール:

$ sudo apt-get install -yq qemu-kvm libvirt-bin

/etc/libvirt/libvirtd.conf:

listen_tls = 0
listen_tcp = 1
listen_addr = "0.0.0.0"
auth_tcp = "none"

/etc/default/libvirt-bin:

libvirtd_opts="-l -d"

TCP LISTENの確認(接続場所はどこからでも。今回はlocalhostでとりあえずチェック):

$ sudo service libvirt-bin restart
$ ps ax | grep [l]ibvirtd
9207 ?        Sl     0:01 /usr/sbin/libvirtd -l -d
$ sudo netstat -pantu | grep libvirtd
tcp        0      0 0.0.0.0:16509           0.0.0.0:*               LISTEN      9207/libvirtd
$ virsh -c qemu+tcp://127.0.0.1/system
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh # exit
$

WebVirtMgrで設定

アクセスするとログイン画面が出るので、インストール時に設定したアカウントでログインする。今回はadmin/adminで作ったのでそれで。

webvirtmgr_webui_002.png

[Add Host]から管理対象のハイパーバイザの登録。

webvirtmgr_webui_003.png webvirtmgr_webui_004.png webvirtmgr_webui_005.png

auth_tcp = "none"の場合でも、ユーザ名とパスワードには何か入れないといけない。ダミーで問題なし。

HDDっぽいアイコンをクリックして、ストレージ画面へ。

webvirtmgr_webui_006.png webvirtmgr_webui_007.png webvirtmgr_webui_008.png

ただ、WebVirtMgrには仮想HDDの作成機能はあるけどメディアのアップロード機能は無いらしい。

そこで、普通にsshしてイメージファイルを置くか、イメージファイル置き場をNFSマウントとかして登録するか...とか色々あるんだけど、 今回は普通にsshでログインして、メディアを置くことにする。:

$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/14.04/ubuntu-14.04-server-amd64.iso
$ sudo mv ubuntu-14.04-server-amd64.iso /var/lib/libvirt/images/

これで、画面を更新すると、ストレージの参照画面から見えるようになった。

webvirtmgr_webui_009.png

右上の[New Instance]から仮想マシンの作成(ここでは、適当なFlavorを選んでCreate)。

webvirtmgr_webui_010.png webvirtmgr_webui_011.png

できた。

webvirtmgr_webui_012.png

ではインストールをしてみよう。

まず、Settings->Mediaの[Connect]からCDを挿入する。

webvirtmgr_webui_013.png

画面転送にはNoVNCを使用するので、デフォルトのキーボードマップが日本語の人は、jpに変えておく方が良いでしょう。Access->VNC Keymapから[Set Keymap]。

webvirtmgr_webui_014.png

あとは電源を投入。

webvirtmgr_webui_015.png

起動状態になったら、Access->VNC Consoleの[Console]ボタンで画面が転送されてくる。

webvirtmgr_webui_016.png webvirtmgr_webui_017.png webvirtmgr_webui_018.png

もし転送されてこない場合は、NoVNCが正しく動作していないか、ファイアウォールで止まっていないか確認しましょう。

初回起動時は、 sudo service webvirtmgr-novnc start を自分で打っておかないとNoVNCが動作してない可能性があります。

あとは通常のOSインストール手順となるので割愛。まぁでも単にlibvirtの仲介してるだけなので、普通に動きます。

webvirtmgr_webui_019.png

ありがたいこと

  • 簡単
  • 軽い
  • FabricによるDeploy
  • ごく基本的な動作に限っては十分に機能する
  • NoVNCがちゃんと動く
  • Snapshotが使える
  • LiveMigrationが使える
  • Hypervisorの環境があんまり汚れない

あーだこーだ

  • (簡単に)CPUのFeature管理ができない
  • (簡単に)メモリの量を後から細かく変更できない
  • (簡単に)仮想マシンのNICを後から増やせない
  • (簡単に)Open vSwitchには対応していないらしい(⇒対応パッチ書いて投げたら取り込まれたので、一応ブリッジとして使う位は出来ます。 https://github.com/retspen/webvirtmgr/pull/318)
    • 「ポチポチすれば簡単にできる」わけではない、だけ
    • 仮想マシン管理ページのSettings->XMLを自分で編集すればできるので、Webから抜ける必要はない

openvswitchのポートをBRIDGEで作ってマシンを起動しようとすると、こんな感じで怒られます。

webvirtmgr_webui_020.png
  • BlockMigrationはできない
  • ストレージにファイルをアップロードできない
    • 自分で別途ファイルを置くか、ファイルが置いてあるストレージパスを登録するか、どちらにせよWeb以外の方法で実施
  • 追加できるストレージプールタイプが少ない
  • プロビジョニングツールとの連携は無い
    • 単なるlibvirtのWebフロントエンドと考えると妥当
  • SPICEは?
    • 今のところ無さそう