Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
Bezieht sich auf SUSE Enterprise Storage 5

16 Verwenden von libvirt mit 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.

16.1 Konfigurieren von Ceph

Führen Sie zum Konfigurieren von Ceph zur Verwendung mit libvirt die folgenden Schritte aus:

  1. Erstellen Sie einen Pool. Im folgenden Beispiel wird der Poolname libvirt-pool mit 128 Placement Groups verwendet.

    ceph osd pool create libvirt-pool 128 128

    Verifizieren Sie, dass der Pool vorhanden ist.

    ceph osd lspools
  2. Erstellen Sie einen Ceph-Benutzer. Das folgende Beispiel verwendet den Ceph-Benutzernamen client.libvirt und verweist auf 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'

    Verifizieren Sie, dass der Name vorhanden ist.

    ceph auth list
    Anmerkung
    Anmerkung

    libvirt greift auf Ceph mit der ID libvirt zu, nicht mit dem Ceph-Namen client.libvirt. Unter http://docs.ceph.com/docs/master/rados/operations/user-management/#user finden Sie eine detaillierte Erklärung zum Unterschied zwischen ID und Name.

  3. Erstellen Sie ein Image in Ihrem RBD-Pool mit QEMU. Das folgende Beispiel verwendet den Image-Namen new-libvirt-image und verweist auf libvirt-pool.

    Tipp
    Tipp: Speicherort der Schlüsselbunddatei

    Vergewissern Sie sich, dass der Pfad zum Schlüsselbund des "libvirt"-Benutzers in der Datei /etc/ceph/ceph.conf angegeben ist. Beispiel:

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

    Wenn der Schlüsselbund nicht vorhanden ist, erstellen Sie ihn mit:

    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

    Verifizieren Sie, dass das Image vorhanden ist.

    rbd -p libvirt-pool ls

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

  1. Installieren Sie einen Manager für virtuelle Maschinen.

    sudo zypper in virt-manager
  2. Bereiten Sie ein Betriebssystem-Image des Systems vor, das Sie virtualisiert ausführen möchten, oder laden Sie es herunter.

  3. Starten Sie den VM-Manager.

    virt-manager

16.3 Erstellen einer VM

Führen Sie zum Erstellen einer VM mit virt-manager die folgenden Schritte aus:

  1. Wählen Sie die Verbindung aus der Liste aus, klicken Sie mit der rechten Maustaste darauf und wählen Sie Neu aus.

  2. Importieren Sie das bestehende Festplatten-Image, indem Sie den Pfad zum bestehenden Speicher angeben. Geben Sie den Betriebssystemtyp, die Arbeitsspeichereinstellungen und den Namen der virtuellen Maschine an, beispielsweise libvirt-virtual-machine.

  3. Stellen Sie die Konfiguration fertig und starten Sie die VM.

  4. 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       running
  5. Melden Sie sich bei der VM an und stoppen Sie sie, bevor Sie sie zur Verwendung mit Ceph konfigurieren.

16.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. Eine Referenz zu virsh-Kommandos finden Sie unter Virsh Command Reference (Referenz zu Virsh-Kommandos).

  1. Öffnen Sie die Konfigurationsdatei mit virsh edit vm-domain-name.

    sudo virsh edit libvirt-virtual-machine
  2. Unter <devices> sollte ein <disk>-Eintrag vorhanden sein.

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

    Ersetzen Sie /path/to/image/recent-linux.img durch den Pfad zum Betriebssystem-Image.

    Wichtig
    Wichtig

    Verwenden Sie sudo virsh edit anstelle eines Texteditors. Wenn Sie die Konfigurationsdatei unter /etc/libvirt/qemu mit einem Texteditor ändern, erkennt libvirt die Änderung möglicherweise nicht. Wenn eine Diskrepanz zwischen dem Inhalt der XML-Datei unter /etc/libvirt/qemu und dem Ergebnis aus sudo virsh dumpxml vm-domain-name auftritt, funktioniert Ihre VM möglicherweise nicht ordnungsgemäß.

  3. 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). Unter Datenträger finden Sie detaillierte Informationen zum <disk>-Element sowie dessen untergeordnete Elemente und Attribute.

  4. Speichern Sie die Datei.

  5. 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>
  6. Definieren Sie das Geheimnis.

    sudo virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. Rufen Sie den client.libvirt-Schlüssel ab und speichern Sie die Schlüsselzeichenkette in eine Datei.

    ceph auth get-key client.libvirt | sudo tee client.libvirt.key
  8. Legen Sie die UUID für das Geheimnis fest.

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

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

    sudo virsh edit libvirt-virtual-machine

    Fü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 ...
    Anmerkung
    Anmerkung

    Die Beispiel-ID ist libvirt, nicht der Ceph-Name client.libvirt wie in Schritt 2 in Abschnitt 16.1, „Konfigurieren von Ceph“ 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 Sie sudo virsh secret-undefine uuid ausführen, bevor Sie sudo virsh secret-set-value erneut ausführen.

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

  1. Prüfen Sie, ob Ceph ausgeführt wird:

    ceph health
  2. Prüfen Sie, ob die VM ausgeführt wird:

    sudo virsh list
  3. Prüfen Sie, ob die VM mit Ceph kommuniziert: Ersetzen Sie vm-domain-name durch den Namen Ihrer VM-Domäne:

    sudo virsh qemu-monitor-command --hmp vm-domain-name 'info block'
  4. Ü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
Diese Seite drucken