
第3回 libvirt探訪(基礎編)
レッドハット株式会社
佐藤 暁
2010/11/4
| この連載では、オープンソースの仮想化ソフトウェア、Linux KVM(Kernel-based Virtual Machine)とそれを支える技術の最新開発動向を紹介していきます。(編集部) |
今回は、仮想マシンや関連するリソースの運用管理を支援するライブラリ、libvirtについて探っていきましょう。
「libvirt」とは?
libvirtはlib[rary] + virt[ualization]という名前のとおり、仮想マシン(Virtual Machine、以下VM)を仮想マシンモニタ(Virtual Machine Monitor、以下VMM)によらず管理可能にし、安定したC言語のAPIを提供するためのライブラリです。
libvirtはもともとXen(API)に対する安定したAPIを実現し、その上で各種管理ツールを実現するために開発されました。そのため、ソースコードの各所にXenに対する言及が残っています(注1)。
しかしいまではlibvirtは、Xen API向けの抽象化ライブラリにとどまらず、次に挙げるように非常に多くのVMM(注2)をサポートするようになっています。
|
||||||||||||||||
| 表1 libvirtがサポートするVM |
そして、特にKVMの管理ツールに注目すると、KVMゲストの操作などに実際にはバックエンドとしてlibvirtを利用しているものが数多く存在していることが分かります。
| 【関連リンク】 KVMの管理ツールの一覧 http://www.linux-kvm.org/page/Management_Tools |
またlibvirtは、VMそのものの管理だけではなく、VMに提供するリソース、例えば仮想ネットワークやストレージなどの管理も可能となっています。
![]() |
| 図1 libvirt アーキテクチャ概要 |
このようにlibvirtは多くのVMMをサポートしつつ、KVMの管理用APIとしても広く支持されています。さらにはVMのリソース管理も可能とあって、仮想化管理基盤のなかば標準的なAPIとしての支持を得つつあるといえるでしょう。
| 注1:かつてはlibvirtのシェル(CUI)、virshのソースコードにもXenへの言及がありました。 注2:LXCやOpenVZ(仮想コンテナ基盤)やUML、QemuをVMMと呼ぶことはあまりないかもしれませんが、ここではこれらも含めた便宜的な総称としてVMMという語を使います。 |
libvirtを構成するコンポーネント
libvirtは、lib-(ライブラリ)という名前のとおり、Cライブラリであると説明したばかりです。しかし実は、VMやVM用のリソース管理のためのC APIを提供する共有ライブラリだけでなく、リモート管理を可能にする窓口となるデーモンや、対話的またはバッチ処理を可能にするシェル(CUI)なども含んだ、さまざまなコンポーネントから構成されています。
ここではlibvirtのこれらのコンポーネントについて、ソースコード配置などとともに簡単に紹介します。なおソースコードは、執筆時(2010年10月)におけるlibvirtの最新gitツリーを参照しています。
■libvirt APIライブラリ
libvirtの中核は、さまざまなVMMの差異を吸収し、VMの管理操作のために抽象化されたC言語のAPIを提供するlibvirtライブラリです。
libvirtライブラリのVMM非依存のAPIの裏側には、VMMごとにドライバモジュールという形で、libvirt APIをVMM固有の処理に置き換えるバックエンド実装があります。
|
||||||||||||||||
| 表2 libvirtの各種VMM対応バックエンド |
libvirtはまた、VM向けのリソースの管理APIを提供するために、それぞれのリソースについて、こちらもドライバモジュールという形でバックエンド実装を持っています。
|
||||||||||
| 表3 VM向けリソースの管理用バックエンド実装 |
■libvirtdデーモン
libvirtdはシステムサービスとして実行されるデーモンであり、libvirt APIを介してVMを制御するための窓口となります。libvirtdはローカルだけではなくリモートからのアクセスも可能にします。libvirtdによってリモートからVMを管理することもできるようになっています。
| ソースコード: | |
| daemon/ | |
libvirtdはlibvirt APIを利用するクライアントアプリケーションの種類によらず、必須のサービスです。
■virsh
virshはもともとはlibvirt APIの利用方法の参照実装でした。vir+sh(shell)と名前にあるように、VMの管理操作用のシェル機能(CUI)を提供します。
| ソースコード: | |
| tools/ | |
VMの管理操作を行う場合は、libvirt APIを利用したVM管理アプリケーションである「virt-manager」など、GUIによる方法が一般的かと思われます。しかし筆者はvirshを使う場合が多いですし、こちらにある程度習熟しておくことをお勧めします。なぜならvirshは、GUIツールではできないことも含めて、libvirt APIで可能なほとんどの管理操作をサポートしているからです。
virshを使ってみよう
libvirtのインストールなどについてはほかにいろいろ記事もあることですし、ここでは割愛します。必要なパッケージ(libvirtなど)がインストールされていて(注3)、libvirtdサービスが起動していることを確認しておいてください。
以下の実行例はFedora 13 i386/x86_64環境におけるもので、VMMとしてKVM/Qemuを利用しています。
| 注3:FedoraもしくはRed Hat Enterprise Linuxの場合は“yum groupinstall Virtualization”でOKです。ほかのディストリビューションについては、適宜そのディストリビューションの仮想化関連の文書などを参照してください。 |
■VMの準備
virshを試そうにも、VMがないことには始まりません。Intel VTもしくはAMD-Vが有効でKVMが使える(注4)LinuxマシンにFedoraゲストを入れてみましょう。
VMのインストールはCUI(virt-install)で行います。Fedoraであればpython-virtinstパッケージをインストールしておきます。インストールの方法については本題から外れてしまうので詳細は割愛しますが、おおよそ次のような手順となります。
- Fedora-13-i386-netinst.isoを入手し(注5)、/var/lib/libvirt/imagesに配置
- virt-installでVMを作成し、Fedoraをインストール
|
|
| virt-install 実行例 |
| 注4:VT機能があったとしてもBIOS設定で無効にされていることも多いので、注意します。 注5:例えばftp://ftp.ring.gr.jp/pub/linux/fedora/linux/releases/13/Fedora/i386/iso/などから入手可能です。 |
■virshで簡単VM操作
まずlibvirt APIの参照実装かつ標準のCUIツール(注6)であるvirshを通して、libvirtに触れてみます。
libvirtではVMやVMのための各種リソース(仮想ネットワークやストレージなど)をそれぞれ専用のXMLによる定義でモデル化し、そのXML定義をベースとして管理しています(注7)。そして、それぞれのモデルのXML定義には、対応するRelax NGによるスキーマファイルも同梱されています。このため、xmllintなどによる検証(定義ファイルがスキーマに従っていて正しいことのチェック)が可能です。
|
|
| 仮想ネットワーク定義ファイルの検証 |
VMまたはVMのためのリソースの種類によって多少の違いはありますが、基本的な管理操作は同様のインターフェイスになっています。
|
||||||||||||||||||||||||||||||
| 表4 基本的な操作 |
| 注6:実はvirsh-likeなシェルの実装はほかにもあり、mlvirsh(http://libvirt.org/ocaml/)は、libvirtおよびlibguestfs開発者のRichard W.M. Jones氏が書いたvirshの代替実装です。mlvirshは「ml」と名前にあるように、OCaml(ML言語の方言)で書かれ、virshの機能のうち主要なコマンドを同様に実装しています。 注7:libvirtではVMやリソースの定義の表現などにXMLが多用されていますが、実はlibvirtプロジェクトを始めたDaniel Veillard氏は、XMLライブラリのデファクトスタンダード的な実装の1つであるlibxml2の作者でもあります。 |
|
1/2 |
|
||||
|
||||
TechTargetジャパン
- OSSライセンスの採用傾向に「変化」あり (2012/5/21)
OSS普及の一翼を担ってきたライセンス、GPLファミリー採用の割合が減少傾向にあるそうです。いったいどうして? - ここからFirefoxの反撃が始まる (2012/3/12)
2月のLinux SquareのランキングではFirefoxの記事がダントツのページビューを集め、トップに立ちました - CMakeでMySQLをビルドしてみる (2012/3/8)
ここまでの作業でCMakeを使う準備が整いました。今回はひとまずMySQLをビルドしてみます - MySQLのビルドに欠かせないCMakeを準備する (2012/3/2)
今回は、MySQLをビルドするために欠かせないツール「CMake」をインストールし、使う準備をします
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

