Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Documentation de SUSE Enterprise Storage 7 / Guide d'opérations et d'administration / Intégration des outils de virtualisation / libvirt et Ceph
S'applique à SUSE Enterprise Storage 7

26 libvirt et Ceph

La bibliothèque libvirt crée une couche d'abstraction entre les interfaces d'hyperviseur et les applications logicielles qui les utilisent. Avec libvirt, les développeurs et administrateurs système peuvent se concentrer sur un cadre de gestion commun, une API commune et une interface shell commune (virsh) vers de nombreux hyperviseurs différents, notamment QEMU/KVM, Xen, LXC ou VirtualBox.

Les périphériques de bloc Ceph prennent en charge QEMU/KVM. Vous pouvez utiliser des périphériques de bloc Ceph avec un logiciel qui interagit avec libvirt. La solution cloud utilise libvirt pour interagir avec QEMU/KVM, lequel interagit avec les périphériques de bloc Ceph via librbd.

Pour créer des machines virtuelles qui utilisent des périphériques de bloc Ceph, utilisez les procédures décrites dans les sections suivantes. Dans ces exemples, nous avons utilisé libvirt-pool comme nom de réserve, client.libvirt comme nom d'utilisateur et new-libvirt-image comme nom d'image. Vous pouvez utiliser n'importe quelle valeur, mais assurez-vous de remplacer ces valeurs lors de l'exécution des commandes dans les procédures suivantes.

26.1 Configuration de Ceph avec libvirt

Pour configurer Ceph en vue de son utilisation avec libvirt, procédez comme suit :

  1. Créez une réserve. L'exemple suivant utilise le nom de réserve libvirt-pool avec 128 groupes de placement.

    cephuser@adm > ceph osd pool create libvirt-pool 128 128

    Vérifiez que la réserve existe.

    cephuser@adm > ceph osd lspools
  2. Créez un utilisateur Ceph. L'exemple suivant utilise le nom d'utilisateur Ceph client.libvirt et fait référence à libvirt-pool.

    cephuser@adm > ceph auth get-or-create client.libvirt mon 'profile rbd' osd \
     'profile rbd pool=libvirt-pool'

    Vérifiez que le nom existe.

    cephuser@adm > ceph auth list
    Note
    Note : nom d'utilisateur ou ID

    libvirt accédera à Ceph en utilisant l'identifiant libvirt et non pas le nom Ceph client.libvirt. La Section 30.2.1.1, « Utilisateur » fournit une explication détaillée de la différence entre l'ID et le nom.

  3. Utilisez QEMU pour créer une image dans votre réserve RBD. L'exemple suivant utilise le nom d'image new-libvirt-image et fait référence à libvirt-pool.

    Astuce
    Astuce : emplacement du fichier de trousseau de clés

    La clé utilisateur libvirt est stockée dans un fichier de trousseau de clés placé dans le répertoire /etc/ceph. Ce fichier doit avoir un nom approprié qui inclut le nom de la grappe Ceph à laquelle il appartient. Pour le nom de grappe par défaut « ceph », le nom de fichier de trousseau de clés est /etc/ceph/ceph.client.libvirt.keyring.

    Si le trousseau de clés n'existe pas, créez-le avec :

    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

    Vérifiez que l'image existe.

    cephuser@adm > rbd -p libvirt-pool ls

26.2 Préparation du gestionnaire de machines virtuelles

Vous pouvez utiliser libvirt sans gestionnaire de machines virtuelles, mais il est généralement plus simple de créer le premier domaine à l'aide de virt-manager.

  1. Installez un gestionnaire de machines virtuelles.

    root # zypper in virt-manager
  2. Préparez/téléchargez une image du système d'exploitation que vous souhaitez virtualiser.

  3. Lancez le gestionnaire de machines virtuelles.

    virt-manager

26.3 Création d'une machine virtuelle

Pour créer une machine virtuelle avec virt-manager, procédez comme suit :

  1. Choisissez la connexion dans la liste, cliquez avec le bouton droit dessus, puis sélectionnez New (Nouvelle).

  2. Importez l'image disque existante en fournissant le chemin du stockage existant. Indiquez le type de système d'exploitation, les paramètres de mémoire et assignez le nom de la machine virtuelle, par exemple libvirt-virtual-machine.

  3. Terminez la configuration et démarrez la machine virtuelle.

  4. Vérifiez que le domaine nouvellement créé existe avec sudo virsh list. Si nécessaire, indiquez la chaîne de connexion, par exemple :

    virsh -c qemu+ssh://root@vm_host_hostname/system list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. Connectez-vous à la machine virtuelle et arrêtez-la avant de la configurer en vue de son utilisation avec Ceph.

26.4 Configuration de la machine virtuelle

Dans ce chapitre, nous nous concentrons sur la configuration des machines virtuelles en vue de leur intégration avec Ceph à l'aide de virsh. Les commandes virsh nécessitent souvent des privilèges root (sudo) ; si vous ne possédez pas ces privilèges, elles ne vous renverront pas les résultats appropriés et ne vous informeront pas que vous devez posséder ces privilèges root. Pour une référence sur les commandes virsh, reportez-vous à la page man 1 virsh (nécessite l'installation du paquetage libvirt-client).

  1. Ouvrez le fichier de configuration avec virsh edit vm-domain-name.

    root # virsh edit libvirt-virtual-machine
  2. Une entrée <disk> doit figurer sous <devices>.

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

    Remplacez /path/to/image/recent-linux.img par le chemin d'accès à l'image du système d'exploitation.

    Important
    Important

    Utilisez sudo virsh edit au lieu d'un éditeur de texte. Si vous modifiez le fichier de configuration sous /etc/libvirt/qemu avec un éditeur de texte, libvirt risque de ne pas reconnaître la modification. En cas de divergence entre le contenu du fichier XML sous /etc/libvirt/qemu et le résultat de sudo virsh dumpxml vm-domain-name, votre machine virtuelle risque de ne pas fonctionner correctement.

  3. Ajoutez l'image Ceph RBD que vous avez précédemment créée en tant qu'entrée <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>

    Remplacez monitor-host par le nom de votre hôte et remplacez le nom de réserve et/ou d'image, si nécessaire. Vous pouvez ajouter plusieurs entrées <host> pour vos moniteurs Ceph. L'attribut dev est le nom du périphérique logique qui apparaît sous le répertoire /dev de votre machine virtuelle. L'attribut de bus facultatif indique le type de périphérique de disque à émuler. Les paramètres valides sont spécifiques au pilote (par exemple, ide, scsi, virtio, xen, usb ou sata).

  4. Enregistrez le fichier.

  5. Si l'authentification de votre grappe Ceph est activée (ce qui est le cas par défaut), vous devez générer un secret. Dans l'éditeur de votre choix, créez un fichier appelé secret.xml avec le contenu suivant :

    <secret ephemeral='no' private='no'>
            <usage type='ceph'>
                    <name>client.libvirt secret</name>
            </usage>
    </secret>
  6. Définissez le secret.

    root # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. Récupérez la clé client.libvirt et enregistrez la chaîne de clé dans un fichier.

    cephuser@adm > ceph auth get-key client.libvirt | sudo tee client.libvirt.key
  8. Définissez l'UUID du secret.

    root # virsh secret-set-value --secret uuid of secret \
    --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml

    Vous devez également définir le secret manuellement en ajoutant l'entrée <auth> à l'élément <disk> que vous avez saisi précédemment (en remplaçant la valeur uuid par le résultat de l'exemple de ligne de commande ci-dessus).

    root # virsh edit libvirt-virtual-machine

    Ajoutez ensuite l'élément <auth></auth> au fichier de configuration du domaine :

    ...
    </source>
    <auth username='libvirt'>
            <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/>
    </auth>
    <target ...
    Note
    Note

    L'ID à utiliser est libvirt, et non pas le nom Ceph client.libvirt généré à l'étape 2 de la Section 26.1, « Configuration de Ceph avec libvirt ». Assurez-vous d'utiliser le composant ID du nom Ceph que vous avez généré. Si, pour une raison quelconque, vous devez régénérer le secret, il vous faudra exécuter sudo virsh secret-undefine uuid avant de relancer sudo virsh secret-set-value.

26.5 Résumé

Une fois que vous avez configuré la VM pour l'utiliser avec Ceph, vous pouvez la démarrer. Pour vérifier que la machine virtuelle et Ceph communiquent, vous pouvez effectuer les procédures suivantes.

  1. Vérifiez si Ceph est en cours d'exécution :

    cephuser@adm > ceph health
  2. Vérifiez si la machine virtuelle est en cours d'exécution :

    root # virsh list
  3. Vérifiez si la machine virtuelle communique avec Ceph. Remplacez vm-domain-name par le nom du domaine de votre machine virtuelle :

    root # virsh qemu-monitor-command --hmp vm-domain-name 'info block'
  4. Vérifiez si le périphérique de &target dev='hdb' bus='ide'/> figure sous /dev ou sous /proc/partitions :

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