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-pool
、client.libvirt
和 new-libvirt-image
做為池名稱、使用者名稱和影像名稱。您可以根據個人喜好使用任何值,但在執行後續程序中的指令時,請務必取代這些值。
26.1 將 Ceph 設定為與 libvirt
配合使用 #
若要將 Ceph 設定為與 libvirt
搭配使用,請執行以下步驟:
建立池。下面的範例使用池名稱
libvirt-pool
和 128 個放置群組。cephuser@adm >
ceph osd pool create libvirt-pool 128 128驗證該池是否存在。
cephuser@adm >
ceph osd lspools建立 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注意:使用者名稱或 IDlibvirt
將使用 IDlibvirt
,而不是 Ceph 名稱client.libvirt
來存取 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 準備虛擬機器管理員 #
雖然您可以單獨使用 libvirt
,而不藉助虛擬機器管理員,但您可能會發現,使用 virt-manager
來建立第一個網域會更簡單。
安裝虛擬機器管理員。
#
zypper in virt-manager準備/下載要執行虛擬化的系統的 OS 影像。
啟動虛擬機器管理員。
virt-manager
26.3 建立虛擬機器 #
若要使用 virt-manager
建立虛擬機器,請執行以下步驟:
從清單中選擇連接,在其上按一下滑鼠右鍵,然後選取
。透過提供現有儲存的路徑來
。指定 OS 類型和記憶體設定,並為虛擬機器 ,例如libvirt-virtual-machine
。完成組態並啟動虛擬機器。
使用
sudo virsh list
驗證新建立的網域是否存在。如果需要,請指定連接字串,例如virsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine running在將虛擬機器設定為與 Ceph 搭配使用前,登入虛擬機器並將其停止。
26.4 設定虛擬機器 #
本章重點介紹如何使用 virsh
設定虛擬機器,以與 Ceph 整合。virsh
指令通常需要 root 特權 (sudo
),它不會傳回相應的結果,也不會告知您需要 root 特權。如需 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>
以 OS 影像的路徑取代
/path/to/image/recent-linux.img
。重要請使用
sudo virsh edit
,不要使用文字編輯器。如果使用文字編輯器編輯/etc/qemu
下的組態檔案,libvirt
libvirt 可能無法辨識變更。如果/etc/libvirt/qemu
下的 XML 檔案內容與sudo virsh dumpxml
vm-domain-name 傳回的結果有差異,則表示虛擬機器可能沒有正常運作。將先前建立的 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)。儲存檔案。
如果 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此外,必須透過將以下
<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 是否可相互通訊,可執行以下程序。
檢查 Ceph 是否在執行:
cephuser@adm >
ceph health檢查虛擬機器是否在執行:
#
virsh list檢查虛擬機器是否在與 Ceph 通訊。以虛擬機器網域的名稱取代 vm-domain-name:
#
virsh qemu-monitor-command --hmp vm-domain-name 'info block'檢查
/dev
或/proc/partitions
下是否存在&target dev='hdb' bus='ide'/>
中的裝置:>
ls /dev>
cat /proc/partitions