26 libvirt
とCeph #
libvirt
ライブラリは、ハイパーバイザーインタフェースと、それらを使用するソフトウェアアプリケーションとの間に仮想マシン抽象化層を作成します。libvirt
を使用することにより、開発者やシステム管理者は、QEMU/KVM、Xen、LXC、VirtualBoxなど、さまざまなハイパーバイザーに対する共通管理フレームワーク、共通API、および共通シェルインタフェース(virsh
)に集中できます。
Ceph Block DeviceはQEMU/KVMをサポートします。libvirt
と連動するソフトウェアでCeph Block Deviceを使用できます。クラウドソリューションはlibvirt
を使用してQEMU/KVMと対話し、QEMU/KVMはlibrbd
を介してCeph Block Deviceと対話します。
Ceph Block Deviceを使用するVMを作成するには、以降のセクションの手順を使用します。これらの例では、プール名にlibvirt-pool
、ユーザ名にclient.libvirt
、イメージ名にnew-libvirt-image
をそれぞれ使用しています。好きな値を使用できますが、後続の手順でコマンドを実行する際に値を置き換えるようにしてください。
26.1 libvirt
で使用するためのCephの設定 #
libvirt
で使用するためにCephを設定するには、次の手順を実行します。
プールを作成します。次の例では、プール名
libvirt-pool
と128の配置グループを使用しています。cephuser@adm >
ceph osd pool create libvirt-pool 128 128プールが存在することを確認します。
cephuser@adm >
ceph osd lspoolsCephユーザを作成します。次の例では、Cephユーザ名
client.libvirt
を使用し、libvirt-pool
を参照しています。cephuser@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \ 'profile rbd pool=libvirt-pool'名前が存在することを確認します。
cephuser@adm >
ceph auth list注記: ユーザ名またはIDlibvirt
は、Cephユーザ名client.libvirt
ではなくIDlibvirt
を使用してCephにアクセスします。IDと名前の違いの詳細については、30.2.1.1項 「ユーザ」を参照してください。QEMUを使用してRBDプール内にイメージを作成します。次の例では、イメージ名
new-libvirt-image
を使用し、libvirt-pool
を参照しています。ヒント: キーリングファイルの場所libvirt
ユーザキーは、/etc/ceph
ディレクトリに配置されたキーリングファイルに保存されます。キーリングファイルには、それが属するCephクラスタの名前が含まれた適切な名前が付いている必要があります。デフォルトのクラスタ名「ceph」の場合、キーリングファイル名は/etc/ceph/ceph.client.libvirt.keyring
になります。キーリングが存在しない場合は、次のコマンドで作成します。
cephuser@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyring#
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2Gイメージが存在することを確認します。
cephuser@adm >
rbd -p libvirt-pool ls
26.2 VMマネージャの準備 #
libvirt
はVMマネージャなしでも使用できますが、最初のドメインはvirt-manager
で作成する方が簡単です。
仮想マシンマネージャをインストールします。
#
zypper in virt-manager仮想化して実行するシステムのOSイメージを準備/ダウンロードします。
仮想マシンマネージャを起動します。
virt-manager
26.3 VMの作成 #
virt-manager
でVMを作成するには、次の手順を実行します。
リストから接続を選択し、右クリックして
を選択します。libvirt-virtual-machine
です。設定を完了してVMを起動します。
sudo virsh list
を使用して、新しく作成したドメインが存在することを確認します。必要に応じて、次のように接続文字列を指定します。virsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine runningVMにログインし、Cephで使用するために設定する前にVMを停止します。
26.4 VMの設定 #
この章では、virsh
を使用してCephとの統合用にVMを設定する方法に焦点を当てて説明します。多くの場合、virsh
コマンドにはルート特権(sudo
)が必要で、ルート特権がないと適切な結果が返されません。また、ルート特権が必要なことは通知されません。virsh
コマンドのリファレンスについては、man 1 virsh
を参照してください(libvirt-clientパッケージのインストールが必要)。
virsh edit
vm-domain-nameを使用して、設定ファイルを開きます。#
virsh edit libvirt-virtual-machine<devices>の下位に<disk>エントリが存在する必要があります。
<devices> <emulator>/usr/bin/qemu-system-SYSTEM-ARCH</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/path/to/image/recent-linux.img'/> <target dev='vda' bus='virtio'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk>
/path/to/image/recent-linux.img
は、OSイメージのパスに置き換えてください。重要テキストエディタではなく、
sudo virsh edit
を使用してください。/etc/qemu
にある設定ファイルをテキストエディタで編集した場合、libvirt
libvirtが変更を認識しないことがあります。/etc/libvirt/qemu
にあるXMLファイルの内容とsudo virsh dumpxml
vm-domain-nameの結果に違いがある場合、VMが適切に動作しないことがあります。前に作成したCeph RBDイメージを<disk>エントリとして追加します。
<disk type='network' device='disk'> <source protocol='rbd' name='libvirt-pool/new-libvirt-image'> <host name='monitor-host' port='6789'/> </source> <target dev='vda' bus='virtio'/> </disk>
monitor-hostを実際のホスト名に置き換え、必要に応じてプールまたはイメージ、あるいはその両方の名前を置き換えてください。Ceph Monitor用に複数の<host>エントリを追加できます。
dev
属性は、VMの/dev
ディレクトリに表示される論理デバイス名です。オプションのbus属性は、エミュレートするディスクデバイスのタイプを示します。有効な設定はドライバ固有です(たとえば、ide、scsi、virtio、xen、usb、sataなど)。ファイルを保存します。
Cephクラスタで認証が有効になっている場合(デフォルト)、秘密を生成する必要があります。好みのエディタを開き、次の内容で
secret.xml
という名前のファイルを作成します。<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
秘密を定義します。
#
virsh secret-define --file secret.xml <uuid of secret is output here>client.libvirt
の鍵を取得して、鍵の文字列をファイルに保存します。cephuser@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.key秘密のUUIDを設定します。
#
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlさらに、前に入力した
<disk>
要素に次の<auth>
エントリを追加することにより、秘密を手動で設定する必要もあります(uuidの値は、上のコマンドライン例の結果に置き換えます)。#
virsh edit libvirt-virtual-machine続いて、ドメイン設定ファイルに
<auth></auth>
要素を追加します。... </source> <auth username='libvirt'> <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/> </auth> <target ...
注記この例で使用しているIDは
libvirt
で、26.1項 「libvirt
で使用するためのCephの設定」の手順2で生成したCephユーザ名client.libvirt
ではありません。生成したCephユーザ名のID部分を使用するようにしてください。何らかの理由で秘密を再生成する必要がある場合は、もう一度sudo virsh secret-set-value
を実行する前に、sudo virsh secret-undefine
uuidを実行する必要があります。
26.5 まとめ #
Cephで使用するためにVMを設定したら、VMを起動できます。VMとCephが通信していることを確認するには、次の手順を実行できます。
Cephが動作しているかどうかを確認します。
cephuser@adm >
ceph healthVMが動作しているかどうかを確認します。
#
virsh listVMがCephと通信しているかどうかを確認します。vm-domain-nameはVMドメインの名前に置き換えてください。
#
virsh qemu-monitor-command --hmp vm-domain-name 'info block'&target dev='hdb' bus='ide'/>
のデバイスが/dev
または/proc/partitions
に表示されるかどうかを確認します。>
ls /dev>
cat /proc/partitions