Saltar al contenutoSaltar alla navigazione delle pagine: pagina precedente [chiave d’accesso p]/pagina successiva [chiave d’accesso n]
Si applica a SUSE Enterprise Storage 5

16 Utilizzo di libvirt con 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.

16.1 Configurazione di Ceph

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.

    ceph osd pool create libvirt-pool 128 128

    Verificare l'esistenza del pool.

    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.

    ceph auth get-or-create client.libvirt mon 'allow r' osd \
     'allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool'

    Verificare l'esistenza del nome.

    ceph auth list
    Nota
    Nota

    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 http://docs.ceph.com/docs/master/rados/operations/user-management/#user (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

    Assicurarsi che il percorso del portachiavi utente "libvirt" sia specificato in /etc/ceph/ceph.conf, ad esempio:

    keyring = /etc/ceph/client.libvirt.keyring

    Se il portachiavi non esiste, crearlo con:

    root # ceph auth get client.libvirt > /etc/ceph/client.libvirt.keyring
    qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2G

    Verificare l'esistenza dell'immagine.

    rbd -p libvirt-pool ls

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

    sudo 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

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

16.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 Virsh Command Reference (in lingua inglese).

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

    sudo virsh edit libvirt-virtual-machine
  2. In <devices> deve essere presente una voce <disk>.

    <devices>
        <emulator>/usr/bin/qemu-system-x86_64</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). Per informazioni dettagliate sull'elemento <disk> e i rispettivi elementi e attributi secondari, vedere Disks(in lingua inglese).

  4. Salvare il 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.

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

    ceph auth get-key client.libvirt | sudo tee client.libvirt.key
  8. Impostare l'UUID del segreto.

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

    sudo 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 16.1, «Configurazione di Ceph». 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.

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

    ceph health
  2. Verificare che la VM sia in esecuzione:

    sudo virsh list
  3. Verificare che la VM stia comunicando con Ceph. Sostituire vm-domain-name con il nome di dominio della VM:

    sudo 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:

    ls /dev
    cat /proc/partitions