跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Enterprise Storage 7.1 文件 / 管理和操作指南 / 與虛擬化工具整合 / libvirt 和 Ceph
適用範圍 SUSE Enterprise Storage 7.1

26 libvirt 和 Ceph

libvirt 程式庫在監管程式介面與使用這些介面的軟體應用程式之間建立了一個虛擬機器抽象層。使用 libvirt,開發人員和系統管理員可將工作重心放在通用管理架構、通用 API、通用外圍程序介面 (virsh),以及諸多不同的監管程式 (包括 QEMU/KVM、Xen、LXC 或 VirtualBox) 上。

Ceph 區塊裝置支援 QEMU/KVM。您可以透過與 libvirt 連接的軟體來使用 Ceph 區塊裝置。雲端解決方案使用 libvirt 來與 QEMU/KVM 互動,而 QEMU/KVM 透過 librbd 來與 Ceph 區塊裝置互動。

若要建立使用 Ceph 區塊裝置的虛擬機器,請依以下各節所述的程序操作。在範例中,我們分別使用了 libvirt-poolclient.libvirtnew-libvirt-image 做為池名稱、使用者名稱和影像名稱。您可以根據個人喜好使用任何值,但在執行後續程序中的指令時,請務必取代這些值。

26.1 將 Ceph 設定為與 libvirt 配合使用

若要將 Ceph 設定為與 libvirt 搭配使用,請執行以下步驟:

  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 將使用 ID libvirt,而不是 Ceph 名稱 client.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 準備虛擬機器管理員

雖然您可以單獨使用 libvirt,而不藉助虛擬機器管理員,但您可能會發現,使用 virt-manager 來建立第一個網域會更簡單。

  1. 安裝虛擬機器管理員。

    # zypper in virt-manager
  2. 準備/下載要執行虛擬化的系統的 OS 影像。

  3. 啟動虛擬機器管理員。

    virt-manager

26.3 建立虛擬機器

若要使用 virt-manager 建立虛擬機器,請執行以下步驟:

  1. 從清單中選擇連接,在其上按一下滑鼠右鍵,然後選取新增

  2. 透過提供現有儲存的路徑來輸入現有的磁碟影像。指定 OS 類型和記憶體設定,並為虛擬機器命名,例如 libvirt-virtual-machine

  3. 完成組態並啟動虛擬機器。

  4. 使用 sudo virsh list 驗證新建立的網域是否存在。如果需要,請指定連接字串,例如

    virsh -c qemu+ssh://root@vm_host_hostname/system list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. 在將虛擬機器設定為與 Ceph 搭配使用前,登入虛擬機器並將其停止。

26.4 設定虛擬機器

本章重點介紹如何使用 virsh 設定虛擬機器,以與 Ceph 整合。virsh 指令通常需要 root 特權 (sudo),它不會傳回相應的結果,也不會告知您需要 root 特權。如需 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>

    以 OS 影像的路徑取代 /path/to/image/recent-linux.img

    重要
    重要

    請使用 sudo virsh edit,不要使用文字編輯器。如果使用文字編輯器編輯 /etc/qemu 下的組態檔案,libvirtlibvirt 可能無法辨識變更。如果 /etc/libvirt/qemu 下的 XML 檔案內容與 sudo virsh dumpxml vm-domain-name 傳回的結果有差異,則表示虛擬機器可能沒有正常運作。

  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 監控程式新增多個 <host> 項目。dev 屬性是邏輯裝置名稱,將顯示在虛擬機器的 /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

    此外,必須透過將以下 <auth> 項目新增至前面輸入的 <disk> 元素 (請以上述指令行範例的結果取代 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 節 「將 Ceph 設定為與 libvirt 配合使用」的步驟 2 中產生的 Ceph 名稱 client.libvirt。請務必使用所產生 Ceph 名稱的 ID 組成部分。如果您出於某個原因需要重新產生機密,則在再次執行 sudo virsh secret-set-value 之前,需要執行 sudo virsh secret-undefine uuid

26.5 摘要

設定要與 Ceph 搭配使用的虛擬機器之後,便可啟動該虛擬機器。若要驗證虛擬機器與 Ceph 是否可相互通訊,可執行以下程序。

  1. 檢查 Ceph 是否在執行:

    cephuser@adm > ceph health
  2. 檢查虛擬機器是否在執行:

    # virsh list
  3. 檢查虛擬機器是否在與 Ceph 通訊。以虛擬機器網域的名稱取代 vm-domain-name

    # virsh qemu-monitor-command --hmp vm-domain-name 'info block'
  4. 檢查 /dev/proc/partitions 下是否存在 &target dev='hdb' bus='ide'/> 中的裝置:

    > ls /dev
    > cat /proc/partitions