目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Enterprise Storage 7.1マニュアル / 運用と管理ガイド / 仮想化ツールとの統合 / libvirtとCeph
適用項目 SUSE Enterprise Storage 7.1

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を設定するには、次の手順を実行します。

  1. プールを作成します。次の例では、プール名libvirt-poolと128の配置グループを使用しています。

    cephuser@adm > ceph osd pool create libvirt-pool 128 128

    プールが存在することを確認します。

    cephuser@adm > ceph osd lspools
  2. Cephユーザを作成します。次の例では、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
    注記
    注記: ユーザ名またはID

    libvirtは、Cephユーザ名client.libvirtではなくID libvirtを使用してCephにアクセスします。IDと名前の違いの詳細については、30.2.1.1項 「ユーザ」を参照してください。

  3. 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で作成する方が簡単です。

  1. 仮想マシンマネージャをインストールします。

    # zypper in virt-manager
  2. 仮想化して実行するシステムのOSイメージを準備/ダウンロードします。

  3. 仮想マシンマネージャを起動します。

    virt-manager

26.3 VMの作成

virt-managerでVMを作成するには、次の手順を実行します。

  1. リストから接続を選択し、右クリックしてNew (新規作成)を選択します。

  2. Import existing disk image (既存のディスクイメージのインポート)を選択し、既存のストレージのパスを入力して、既存のディスクイメージをインポートします。OSタイプとメモリ設定を指定し、名前に仮想マシンの名前を入力します。たとえば、libvirt-virtual-machineです。

  3. 設定を完了してVMを起動します。

  4. sudo virsh listを使用して、新しく作成したドメインが存在することを確認します。必要に応じて、次のように接続文字列を指定します。

    virsh -c qemu+ssh://root@vm_host_hostname/system list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. VMにログインし、Cephで使用するために設定する前にVMを停止します。

26.4 VMの設定

この章では、virshを使用してCephとの統合用にVMを設定する方法に焦点を当てて説明します。多くの場合、virshコマンドにはルート特権(sudo)が必要で、ルート特権がないと適切な結果が返されません。また、ルート特権が必要なことは通知されません。virshコマンドのリファレンスについては、man 1 virshを参照してください(libvirt-clientパッケージのインストールが必要)。

  1. virsh edit vm-domain-nameを使用して、設定ファイルを開きます。

    # virsh edit libvirt-virtual-machine
  2. <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にある設定ファイルをテキストエディタで編集した場合、libvirtlibvirtが変更を認識しないことがあります。/etc/libvirt/qemuにあるXMLファイルの内容とsudo virsh dumpxml vm-domain-nameの結果に違いがある場合、VMが適切に動作しないことがあります。

  3. 前に作成した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など)。

  4. ファイルを保存します。

  5. Cephクラスタで認証が有効になっている場合(デフォルト)、秘密を生成する必要があります。好みのエディタを開き、次の内容でsecret.xmlという名前のファイルを作成します。

    <secret ephemeral='no' private='no'>
            <usage type='ceph'>
                    <name>client.libvirt secret</name>
            </usage>
    </secret>
  6. 秘密を定義します。

    # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. client.libvirtの鍵を取得して、鍵の文字列をファイルに保存します。

    cephuser@adm > ceph auth get-key client.libvirt | sudo tee client.libvirt.key
  8. 秘密の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が通信していることを確認するには、次の手順を実行できます。

  1. Cephが動作しているかどうかを確認します。

    cephuser@adm > ceph health
  2. VMが動作しているかどうかを確認します。

    # virsh list
  3. VMがCephと通信しているかどうかを確認します。vm-domain-nameはVMドメインの名前に置き換えてください。

    # virsh qemu-monitor-command --hmp vm-domain-name 'info block'
  4. &target dev='hdb' bus='ide'/>のデバイスが/devまたは/proc/partitionsに表示されるかどうかを確認します。

    > ls /dev
    > cat /proc/partitions