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 :
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 128Vérifiez que la réserve existe.
cephuser@adm >
ceph osd lspoolsCré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 listNote : nom d'utilisateur ou IDlibvirt
accédera à Ceph en utilisant l'identifiantlibvirt
et non pas le nom Cephclient.libvirt
. La Section 30.2.1.1, « Utilisateur » fournit une explication détaillée de la différence entre l'ID et le nom.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 : emplacement du fichier de trousseau de clésLa 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.keyringroot #
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2GVé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
.
Installez un gestionnaire de machines virtuelles.
root #
zypper in virt-managerPréparez/téléchargez une image du système d'exploitation que vous souhaitez virtualiser.
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 :
Choisissez la connexion dans la liste, cliquez avec le bouton droit dessus, puis sélectionnez
(Nouvelle).libvirt-virtual-machine
.Terminez la configuration et démarrez la machine virtuelle.
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 runningConnectez-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).
Ouvrez le fichier de configuration avec
virsh edit
vm-domain-name.root #
virsh edit libvirt-virtual-machineUne 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.ImportantUtilisez
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 desudo virsh dumpxml
vm-domain-name, votre machine virtuelle risque de ne pas fonctionner correctement.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).Enregistrez le fichier.
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>
Définissez le secret.
root #
virsh secret-define --file secret.xml <uuid of secret is output here>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.keyDéfinissez l'UUID du secret.
root #
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlVous 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-machineAjoutez 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 ...
NoteL'ID à utiliser est
libvirt
, et non pas le nom Cephclient.libvirt
généré à l'étape 2 de la Section 26.1, « Configuration de Ceph aveclibvirt
». 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écutersudo virsh secret-undefine
uuid avant de relancersudo 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.
Vérifiez si Ceph est en cours d'exécution :
cephuser@adm >
ceph healthVérifiez si la machine virtuelle est en cours d'exécution :
root #
virsh listVé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'Vérifiez si le périphérique de
&target dev='hdb' bus='ide'/>
figure sous/dev
ou sous/proc/partitions
:tux >
ls /devtux >
cat /proc/partitions