26 libvirt
e Ceph #
La libreria libvirt
consente di creare uno strato di astrazione della macchina virtuale tra le interfacce dell'Hypervisor e le applicazioni software che le utilizzano. Con libvirt
, sviluppatori e amministratori di sistema possono focalizzarsi su un framework di gestione, un'API e un'interfaccia shell (virsh
) comuni a Hypervisor diversi, tra cui QEMU/KVM, Xen, LXC o VirtualBox.
I dispositivi di blocco Ceph supportano QEMU/KVM. È possibile utilizzare i dispositivi di blocco Ceph con software che si interfaccia con libvirt
. Nella soluzione cloud si utilizza libvirt
per l'iterazione con QEMU/KVM e quest'ultimo esegue l'iterazione con i dispositivi di blocco Ceph tramite librbd
.
Per creare macchine virtuali in cui vengono utilizzati dispositivi di blocco Ceph, seguire le procedure riportate nelle sezioni seguenti. Negli esempi, sono stati utilizzati libvirt-pool
per il nome pool, client.libvirt
per il nome utente e new-libvirt-image
per il nome immagine. È possibile utilizzare qualsiasi valore desiderato, ma assicurarsi di sostituire tali valori quando si eseguono i comandi nelle procedure successive.
26.1 Configurazione di Ceph con libvirt
#
Per configurare Ceph per l'uso con libvirt
, eseguire i seguenti passaggi:
Creare un pool. Nell'esempio seguente viene utilizzato il nome pool
libvirt-pool
con 128 gruppi di posizionamento.cephuser@adm >
ceph osd pool create libvirt-pool 128 128Verificare l'esistenza del pool.
cephuser@adm >
ceph osd lspoolsCreare un utente Ceph. Nell'esempio seguente viene utilizzato il nome utente Ceph
client.libvirt
e si fa riferimento alibvirt-pool
.cephuser@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \ 'profile rbd pool=libvirt-pool'Verificare l'esistenza del nome.
cephuser@adm >
ceph auth listNota: nome utente o IDlibvirt
accederà a Ceph tramite l'IDlibvirt
, non il nome Cephclient.libvirt
. Per una spiegazione dettagliata della differenza tra ID e nome, vedere Sezione 30.2.1.1, «Utente» (in lingua inglese).Utilizzare QEMU per creare un'immagine nel pool RBD. Nell'esempio seguente viene utilizzato il nome immagine
new-libvirt-image
e si fa riferimento alibvirt-pool
.Suggerimento: ubicazione del file portachiaviLa chiave utente
libvirt
è memorizzata in un file portachiavi ubicato nella directory/etc/ceph
. Occorre assegnare al file portachiavi un nome appropriato in cui sia incluso il nome del cluster Ceph a cui appartiene. Per il nome del cluster di default "ceph", il nome del file portachiavi è/etc/ceph/ceph.client.libvirt.keyring
.Se il portachiavi non esiste, crearlo con:
cephuser@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyringroot #
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2GVerificare l'esistenza dell'immagine.
cephuser@adm >
rbd -p libvirt-pool ls
26.2 Preparazione del programma di gestione VM #
È possibile utilizzare libvirt
senza un programma di gestione VM, ma è più semplice creare prima il dominio con virt-manager
.
Installare un programma di gestione delle macchine virtuali.
root #
zypper in virt-managerPreparare/effettuare il download di un'immagine del sistema operativo che si desidera eseguire come virtualizzato.
Avviare il programma di gestione delle macchine virtuali.
virt-manager
26.3 Creazione di una macchina virtuale (VM) #
Per creare una VM con virt-manager
, eseguire i passaggi seguenti:
Scegliere la connessione dall'elenco, fare clic con il pulsante destro del mouse su di essa e selezionare
.libvirt-virtual-machine
.Completare la configurazione e avviare la VM.
Verificare l'esistenza del dominio appena creato con
sudo virsh list
. Se necessario, specificare la stringa di connessione, comevirsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine runningEseguire il login alla VM e interromperla prima di configurarla per l'uso con Ceph.
26.4 Configurazione della macchina virtuale (VM) #
Questo capitolo è incentrato sulla configurazione delle VM per l'integrazione con Ceph mediante l'uso di virsh
. Spesso per i comandi virsh
sono richiesti i privilegi radice (sudo
) e non verranno restituiti i risultati appropriati né notifiche in merito ai privilegi radice richiesti. Per informazioni sui comandi virsh
, fare riferimento a man 1 virsh
(deve essere installato il pacchetto libvirt-client).
Aprire il file di configurazione con
virsh edit
vm-domain-name.root #
virsh edit libvirt-virtual-machineIn <devices> deve essere presente una voce <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>
Sostituire
/path/to/image/recent-linux.img
con il percorso dell'immagine del sistema operativo.ImportanteUtilizzare
sudo virsh edit
al posto di un editor di testo. Se si modifica il file di configurazione in/etc/libvirt/qemu
con un editor di testo, è possibile chelibvirt
non riconosca la modifica. Se è presente una discrepanza tra i contenuti del file XML in/etc/libvirt/qemu
e il risultato disudo virsh dumpxml
vm-domain-name, la VM potrebbe non funzionare correttamente.Aggiungere l'immagine Ceph RBD creata precedentemente come voce <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>
Sostituire monitor-host con il nome host e sostituire il pool e/o il nome immagine secondo necessità. È possibile aggiungere più voci <host> per i Ceph Monitor. L'attributo
dev
è il nome dispositivo logico che verrà visualizzato nella directory/dev
della VM. L'attributo bus facoltativo indica il tipo di dispositivo disco da emulare. Le impostazioni valide sono specifiche per il driver (ad esempio ide, scsi, virtio, xen, usb o sata).salvataggio del file.
Se nel cluster Ceph è abilitata l'autenticazione (impostazione di default), è necessario generare un segreto. Aprire l'editor desiderato e creare un file denominato
secret.xml
con il contenuto seguente:<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
Definire il segreto.
root #
virsh secret-define --file secret.xml <uuid of secret is output here>Ottenere la chiave
client.libvirt
e salvare la stringa chiave in un file.cephuser@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.keyImpostare l'UUID del segreto.
root #
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlÈ inoltre necessario impostare manualmente il segreto aggiungendo la seguente voce
<auth>
all'elemento<disk>
immesso precedentemente (sostituendo il valore uuid con il risultato dell'esempio della riga di comando di cui sopra).root #
virsh edit libvirt-virtual-machineQuindi, aggiungere l'elemento
<auth></auth>
al file di configurazione del dominio:... </source> <auth username='libvirt'> <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/> </auth> <target ...
NotaL'ID di esempio è
libvirt
, non il nome Cephclient.libvirt
generato al passaggio 2 della Sezione 26.1, «Configurazione di Ceph conlibvirt
». Assicurarsi di utilizzare il componente ID del nome Ceph generato. Se per qualche motivo è necessario generare di nuovo il segreto, si dovrà eseguiresudo virsh secret-undefine
uuid prima di eseguire di nuovosudo virsh secret-set-value
.
26.5 Riepilogo #
Una volta configurata la VM per l'uso con Ceph, è possibile avviarla. Per verificare che la VM e Ceph comunichino tra loro, è possibile eseguire la procedura seguente.
Verificare che Ceph sia in esecuzione:
cephuser@adm >
ceph healthVerificare che la VM sia in esecuzione:
root #
virsh listVerificare che la VM stia comunicando con Ceph. Sostituire vm-domain-name con il nome di dominio della VM:
root #
virsh qemu-monitor-command --hmp vm-domain-name 'info block'Verificare che il dispositivo di
&target dev='hdb' bus='ide'/>
venga visualizzato in/dev
o in/proc/partitions
:tux >
ls /devtux >
cat /proc/partitions