26 libvirt
und Ceph #
Die libvirt
-Bibliothek erstellt eine Abstraktionsschicht einer virtuellen Maschine zwischen den Hypervisor-Schnittstellen und den Softwareanwendungen, die sie verwenden. Mit libvirt
können sich Entwickler und Systemadministratoren auf ein gemeinsames Verwaltungs-Framework, eine gemeinsame API und die gemeinsame Shell-Schnittstelle (virsh
) zu vielen verschiedenen Hypervisoren konzentrieren, einschließlich QEMU/KVM, Xen, LXC oder VirtualBox.
Ceph-Blockgeräte unterstützen QEMU/KVM. Ceph-Blockgeräte können mit Software verwendet werden, die eine Schnittstelle zu libvirt
darstellen. Die Cloud-Lösung verwendet libvirt
zur Interaktion mit QEMU/KVM, das wiederum mit Ceph-Blockgeräten über librbd
interagiert.
Erstellen Sie VMs, die Ceph-Blockgeräte verwenden, anhand der folgenden Verfahren. In den Beispielen haben wir libvirt-pool
als Poolnamen, client.libvirt
als Benutzernamen und new-libvirt-image
als Image-Namen verwendet. Sie können jeden gewünschten Wert verwenden, doch ersetzen Sie auf jeden Fall diese Werte, wenn sie Kommandos in den folgenden Verfahren ausführen.
26.1 Konfigurieren von Ceph mit libvirt
#
Führen Sie zum Konfigurieren von Ceph zur Verwendung mit libvirt
die folgenden Schritte aus:
Erstellen Sie einen Pool. Im folgenden Beispiel wird der Poolname
libvirt-pool
mit 128 Placement Groups verwendet.cephuser@adm >
ceph osd pool create libvirt-pool 128 128Verifizieren Sie, dass der Pool vorhanden ist.
cephuser@adm >
ceph osd lspoolsErstellen Sie einen Ceph-Benutzer. Das folgende Beispiel verwendet den Ceph-Benutzernamen
client.libvirt
und verweist auflibvirt-pool
.cephuser@adm >
ceph auth get-or-create client.libvirt mon 'profile rbd' osd \ 'profile rbd pool=libvirt-pool'Verifizieren Sie, dass der Name vorhanden ist.
cephuser@adm >
ceph auth listAnmerkung: Benutzername oder IDlibvirt
greift auf Ceph mit der IDlibvirt
zu, nicht mit dem Ceph-Namenclient.libvirt
. Unter Abschnitt 30.2.1.1, „Benutzer“ finden Sie eine detaillierte Erklärung zum Unterschied zwischen ID und Name.Erstellen Sie ein Image in Ihrem RBD-Pool mit QEMU. Das folgende Beispiel verwendet den Image-Namen
new-libvirt-image
und verweist auflibvirt-pool
.Tipp: Speicherort der SchlüsselbunddateiDer Benutzerschlüssel
libvirt
ist in einer Schlüsselbunddatei im Verzeichnis/etc/ceph
gespeichert. Die Schlüsselbunddatei muss einen geeigneten Namen aufweisen, der den Namen des Ceph-Clusters enthält, zu dem sie gehört. Für den Standard-Cluster-Namen „ceph“ lautet der Name der Schlüsselbunddatei/etc/ceph/ceph.client.libvirt.keyring
.Wenn der Schlüsselbund nicht vorhanden ist, erstellen Sie ihn mit:
cephuser@adm >
ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyring#
qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2GVerifizieren Sie, dass das Image vorhanden ist.
cephuser@adm >
rbd -p libvirt-pool ls
26.2 Vorbereiten des VM-Managers #
libvirt
kann zwar ohne VM-Manager verwendet werden, doch es ist möglicherweise für Sie einfacher, wenn Sie Ihre erste Domäne mitvirt-manager
erstellen.
Installieren Sie einen Manager für virtuelle Maschinen.
#
zypper in virt-managerBereiten Sie ein Betriebssystem-Image des Systems vor, das Sie virtualisiert ausführen möchten, oder laden Sie es herunter.
Starten Sie den VM-Manager.
virt-manager
26.3 Erstellen einer VM #
Führen Sie zum Erstellen einer VM mit virt-manager
die folgenden Schritte aus:
Wählen Sie die Verbindung aus der Liste aus, klicken Sie mit der rechten Maustaste darauf und wählen Sie
aus.libvirt-virtual-machine
.Stellen Sie die Konfiguration fertig und starten Sie die VM.
Verifizieren Sie mit
sudo virsh list
, dass die neu erstellte Domäne vorhanden ist. Geben Sie die Verbindungszeichenkette wie folgt an, falls erforderlich:virsh -c qemu+ssh://root@vm_host_hostname/system list
Id Name State ----------------------------------------------- [...] 9 libvirt-virtual-machine runningMelden Sie sich bei der VM an und stoppen Sie sie, bevor Sie sie zur Verwendung mit Ceph konfigurieren.
26.4 Konfigurieren der VM #
In diesem Kapitel konzentrieren wir uns auf die Konfiguration von VMs zur Integration in Ceph über virsh
. Für virsh
-Kommandos werden oft Root-Berechtigungen (sudo
) benötigt. Sie geben außerdem nicht die entsprechenden Ergebnisse zurück und benachrichtigen Sie auch nicht, dass Root-Berechtigungen erforderlich sind. Weitere Informationen zu den virsh
-Kommandos finden Sie unter man 1 virsh
(das Paket libvirt-client muss installiert sein).
Öffnen Sie die Konfigurationsdatei mit
virsh edit
vm-domain-name.#
virsh edit libvirt-virtual-machineUnter <devices> sollte ein <disk>-Eintrag vorhanden sein.
<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>
Ersetzen Sie
/path/to/image/recent-linux.img
durch den Pfad zum Betriebssystem-Image.WichtigVerwenden Sie
sudo virsh edit
anstelle eines Texteditors. Wenn Sie die Konfigurationsdatei unter/etc/qemu
mit einem Texteditor ändern, erkenntlibvirt
libvirt die Änderung möglicherweise nicht. Wenn eine Diskrepanz zwischen dem Inhalt der XML-Datei unter/etc/libvirt/qemu
und dem Ergebnis aussudo virsh dumpxml
vm-domain-name auftritt, funktioniert Ihre VM möglicherweise nicht ordnungsgemäß.Fügen Sie das vorher erstellte Ceph RBD-Image als <disk>-Eintrag hinzu.
<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>
Ersetzen Sie monitor-host durch den Namen Ihres Hosts und ersetzen Sie den Pool und/oder den Image-Namen wie erforderlich. Sie haben die Möglichkeit, für Ihre Ceph Monitors mehrere <Host>-Einträge hinzuzufügen. Das
dev
-Attribut ist der logische Gerätename, der unter dem/dev
-Verzeichnis Ihrer VM angezeigt wird. Das optionale Busattribut gibt den Typ des zu emulierenden Datenträgergeräts an. Die gültigen Einstellungen sind treiberspezifisch (zum Beispiel ide, scsi, virtio, xen, usb oder sata).Datei speichern.
Wenn bei Ihrem Ceph-Cluster die Authentifizierung aktiviert ist (was standardmäßig der Fall ist), dann müssen Sie ein Geheimnis generieren. Öffnen Sie den Editor Ihrer Wahl und erstellen Sie eine Datei namens
secret.xml
mit folgendem Inhalt:<secret ephemeral='no' private='no'> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret>
Definieren Sie das Geheimnis.
#
virsh secret-define --file secret.xml <uuid of secret is output here>Rufen Sie den
client.libvirt
-Schlüssel ab und speichern Sie die Schlüsselzeichenkette in eine Datei.cephuser@adm >
ceph auth get-key client.libvirt | sudo tee client.libvirt.keyLegen Sie die UUID für das Geheimnis fest.
#
virsh secret-set-value --secret uuid of secret \ --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xmlSie müssen auch das Geheimnis manuell festlegen. Fügen Sie dazu den folgenden
<auth>
-Eintrag zum vorher eingegebenen<disk>
-Element hinzu (was den UUID-Wert durch das Ergebnis aus dem oben genannten Kommandozeilenbeispiel ersetzt).#
virsh edit libvirt-virtual-machineFügen Sie dann das
<auth></auth>
-Element zur Konfigurationsdatei der Domäne hinzu:... </source> <auth username='libvirt'> <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/> </auth> <target ...
AnmerkungDie Beispiel-ID ist
libvirt
, nicht der Ceph-Nameclient.libvirt
wie in Schritt 2 in Abschnitt 26.1, „Konfigurieren von Ceph mitlibvirt
“ generiert. Stellen Sie sicher, dass Sie die ID-Komponente des generierten Ceph-Namens verwenden. Wenn Sie aus irgendeinem Grund das Geheimnis neu generieren müssen, dann müssen Siesudo virsh secret-undefine
uuid ausführen, bevor Siesudo virsh secret-set-value
erneut ausführen.
26.5 Zusammenfassung #
Sie können die VM starten, sobald Sie die VM zur Verwendung mit Ceph konfiguriert haben. Führen Sie die folgenden Schritte aus, um zu verifizieren, dass die VM und Ceph miteinander kommunizieren.
Prüfen Sie, ob Ceph ausgeführt wird:
cephuser@adm >
ceph healthPrüfen Sie, ob die VM ausgeführt wird:
#
virsh listPrüfen Sie, ob die VM mit Ceph kommuniziert: Ersetzen Sie vm-domain-name durch den Namen Ihrer VM-Domäne:
#
virsh qemu-monitor-command --hmp vm-domain-name 'info block'Überprüfen Sie, ob das Gerät vom
&target dev='hdb' bus='ide'/>
unter/dev
oder unter/proc/partitions
erscheint:>
ls /dev>
cat /proc/partitions