Vai al contenutoNaviga tra le pagine: pagina precedente [tasto di scelta p]/pagina successiva [tasto di scelta n]
documentation.suse.com / Documentazione di SUSE Enterprise Storage 7 / Guida alle operazioni e all'amministrazione / Integrazione con gli strumenti di virtualizzazione / libvirt e Ceph
Si applica a SUSE Enterprise Storage 7

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:

  1. 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 128

    Verificare l'esistenza del pool.

    cephuser@adm > ceph osd lspools
  2. Creare un utente Ceph. Nell'esempio seguente viene utilizzato il nome utente Ceph client.libvirt e si fa riferimento a libvirt-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 list
    Nota
    Nota: nome utente o ID

    libvirt accederà a Ceph tramite l'ID libvirt, non il nome Ceph client.libvirt. Per una spiegazione dettagliata della differenza tra ID e nome, vedere Sezione 30.2.1.1, «Utente» (in lingua inglese).

  3. Utilizzare QEMU per creare un'immagine nel pool RBD. Nell'esempio seguente viene utilizzato il nome immagine new-libvirt-image e si fa riferimento a libvirt-pool.

    Suggerimento
    Suggerimento: ubicazione del file portachiavi

    La 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.keyring
    root # qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2G

    Verificare 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.

  1. Installare un programma di gestione delle macchine virtuali.

    root # zypper in virt-manager
  2. Preparare/effettuare il download di un'immagine del sistema operativo che si desidera eseguire come virtualizzato.

  3. 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:

  1. Scegliere la connessione dall'elenco, fare clic con il pulsante destro del mouse su di essa e selezionare New (Nuovo).

  2. Importare l'immagine disco esistente specificando il percorso di memorizzazione esistente. Specificare il tipo di sistema operativo, le impostazioni della memoria e il nome della macchina virtuale, ad esempio libvirt-virtual-machine.

  3. Completare la configurazione e avviare la VM.

  4. Verificare l'esistenza del dominio appena creato con sudo virsh list. Se necessario, specificare la stringa di connessione, come

    virsh -c qemu+ssh://root@vm_host_hostname/system list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. Eseguire 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).

  1. Aprire il file di configurazione con virsh edit vm-domain-name.

    root # virsh edit libvirt-virtual-machine
  2. In <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.

    Importante
    Importante

    Utilizzare 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 che libvirt non riconosca la modifica. Se è presente una discrepanza tra i contenuti del file XML in /etc/libvirt/qemu e il risultato di sudo virsh dumpxml vm-domain-name, la VM potrebbe non funzionare correttamente.

  3. 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).

  4. salvataggio del file.

  5. 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>
  6. Definire il segreto.

    root # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. 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.key
  8. Impostare 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-machine

    Quindi, 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 ...
    Nota
    Nota

    L'ID di esempio è libvirt, non il nome Ceph client.libvirt generato al passaggio 2 della Sezione 26.1, «Configurazione di Ceph con libvirt». Assicurarsi di utilizzare il componente ID del nome Ceph generato. Se per qualche motivo è necessario generare di nuovo il segreto, si dovrà eseguire sudo virsh secret-undefine uuid prima di eseguire di nuovo sudo 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.

  1. Verificare che Ceph sia in esecuzione:

    cephuser@adm > ceph health
  2. Verificare che la VM sia in esecuzione:

    root # virsh list
  3. Verificare 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'
  4. Verificare che il dispositivo di &target dev='hdb' bus='ide'/> venga visualizzato in /dev o in /proc/partitions:

    tux > ls /dev
    tux > cat /proc/partitions