Nichtflüchtigen Speicher zu Instanz hinzufügen

In diesem Dokument finden Sie eine Anleitung zum Anhängen eines nichtflüchtigen VM-Laufwerks an eine Instanz in Google Distributed Cloud (GDC) mit Air Gap.

Hängen Sie Nicht-Bootlaufwerke an Ihre VM an, um Ihre spezifischen Arbeitslastanforderungen zu erfüllen. Durch die Entkopplung des Speichers von der VM-Instanz bleiben Ihre kritischen Daten unabhängig vom VM-Lebenszyklus erhalten. Gleichzeitig werden Leistung und Kapazität automatisch an die Anforderungen Ihrer Arbeitslast angepasst.

Dieses Dokument richtet sich an Entwickler in Plattformadministrator- oder Anwendungsoperatorgruppen, die VM-Laufwerke in einer Distributed Cloud-Umgebung hinzufügen und konfigurieren. Weitere Informationen finden Sie unter Zielgruppen für die Dokumentation zu GDC mit Air Gap.

Hinweis

Wenn Sie gdcloud-Befehle der Befehlszeile (CLI) verwenden möchten, müssen Sie die gdcloud-Befehlszeile heruntergeladen, installiert und konfiguriert haben. Alle Befehle für Distributed Cloud verwenden die gdcloud- oder kubectl-Befehlszeile und erfordern eine Betriebssystemumgebung.

Pfad der kubeconfig-Datei abrufen

Wenn Sie Befehle auf dem Management API-Server ausführen möchten, benötigen Sie die folgenden Ressourcen:

  1. Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.

  2. Verwenden Sie den Pfad zur kubeconfig-Datei des Management API-Servers, um MANAGEMENT_API_SERVER in dieser Anleitung zu ersetzen.

IAM-Rollen anfordern

Bitten Sie Ihren IAM-Projektadministrator, Ihnen die folgenden Rollen für Ihr Projekt zuzuweisen:

  • Virtual Machine Project Admin (project-vm-admin): VMs im Projekt-Namespace erstellen, ändern, auflisten und löschen.

  • Project Viewer(project-viewer): Kann alle Ressourcen in den Projekt-Namespaces aufrufen.

Alle VM-Rollen müssen an den Namespace des Projekts gebunden sein, in dem sich die VM befindet. Folgen Sie der Anleitung, um Ihren Zugriff zu bestätigen.

Laufwerk an eine VM anhängen

Nicht-Bootlaufwerke erstellen und an die VM anhängen Für jedes zusätzliche Laufwerk kann ein benutzerdefiniertes Image oder ein leeres Laufwerk angegeben werden. Sie können einer VM mehrere Laufwerke gleichzeitig hinzufügen.

Console

  1. Klicken Sie im Navigationsmenü auf Virtuelle Maschinen > Instanzen.

  2. Klicken Sie in der Liste der VMs auf einen VM-Namen, um die Details aufzurufen.

  3. Klicken Sie auf Neues Laufwerk hinzufügen.

  4. Klicken Sie im Bestätigungsdialogfeld auf Beenden, um die VM zu beenden.

  5. Warten Sie einige Minuten, bis die VM beendet wurde.

  6. Klicken Sie auf Aktualisieren.

  7. Wenn die VM beendet ist, klicken Sie noch einmal auf Neues Laufwerk hinzufügen.

  8. Wählen Sie im Dialogfeld „Laufwerk hinzufügen“ ein neues oder ein vorhandenes Laufwerk aus.

    • Klicken Sie auf den Tab Neues Laufwerk, um ein neues Laufwerk bereitzustellen.

      1. Geben Sie im Feld Laufwerksname einen neuen Laufwerksnamen ein, der im Projekt eindeutig ist.
      2. Geben Sie im Feld Größe eine Laufwerksgröße zwischen 10 und 65.536 GiB ein. Beispiel: 10 GiB.
      3. Klicken Sie im Abschnitt Löschregel auf Laufwerk behalten oder Laufwerk löschen.
    • Wenn Sie ein vorhandenes Laufwerk auswählen möchten, klicken Sie auf den Tab Vorhandenes Laufwerk.

      1. Wählen Sie in der Liste Laufwerk ein Laufwerk aus.
      2. Klicken Sie im Abschnitt „Löschregel“ auf Laufwerk behalten oder Laufwerk löschen.
  9. Klicken Sie auf Speichern. Das Laufwerk wird in der Liste der Laufwerke für die VM angezeigt.

  10. Starten Sie die VM neu.

API

  1. Erstellen Sie ein VirtualMachineDisk:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: NON_BOOT_BLANK_DISK
    spec:
      size: NON_BOOT_BLANK_DISK_SIZE
    EOF
    
  2. Beenden Sie die VM.

  3. Fügen Sie die VirtualMachineDisk dem vorhandenen VirtualMachine spec.disks hinzu:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Bearbeiten Sie Folgendes in Ihrem Texteditor:

    # …
    disks:
    - virtualMachineDiskRef:
        name: VM_BOOT_DISK_NAME
      boot: true
    - virtualMachineDiskRef:
        name: NON_BOOT_BLANK_DISK
      autoDelete: false
    # …
    

    Ersetzen Sie die Variablen anhand der folgenden Definitionen.

    VariableDefinition
    MANAGEMENT_API_SERVER Die kubeconfig-Datei des Management API-Servers.
    PROJECT Das Google Distributed Cloud mit Air Gap-Projekt (GDC), in dem die VM erstellt werden soll.
    VM_NAMEDer Name der neuen VM.
    VM_BOOT_DISK_NAMEDer Name des neuen VM-Bootlaufwerks.
    NON_BOOT_BLANK_DISKDer Name des zusätzlichen Laufwerks.
    NON_BOOT_BLANK_DISK_SIZEDie Größe Ihrer zusätzlichen Laufwerke, z. B. 20G.
  4. Starten Sie die VM.

Nicht-Bootlaufwerk formatieren und bereitstellen

Nachdem Sie ein Laufwerk an die VM angehängt haben, führen Sie die folgenden Schritte aus, um es in der VM zugänglich zu machen.

Verbindung zur VM herstellen

Stellen Sie eine SSH-Verbindung zur VM her.

Laufwerk formatieren

  1. Listen Sie die Laufwerke, die an Ihre Instanz angehängt sind, nach Seriennummer auf und suchen Sie das Laufwerk, das Sie formatieren und bereitstellen möchten.

    ls -l /dev/disk/by-id/
    

    In dieser Beispielausgabe werden die Laufwerksnamen als Seriennummern angezeigt:

       total 0
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
    

    Die Informationen nach dem Pfeil -> in jeder Zeile geben den Namen des Laufwerks an. In scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb lautet die Seriennummer beispielsweise scsi-SQEMU_QEMU_HARDDISK_vm-disk-data und der Gerätename ist sdb.

  2. Suchen Sie in dieser Liste nach der Seriennummer Ihres Laufwerks.

    Wichtiges Verhalten von situationsabhängigen Funktionen, das sich auf die Liste der Seriennummern auswirken kann:

    • Wenn der virtualMachineDiskRef.name-Wert länger als 20 Zeichen ist, werden nur die ersten 20 Zeichen als Seriennummer verwendet.
    • Wenn zwei Laufwerke dieselben ersten 20 Zeichen haben, hat nur das erste Laufwerk eine Seriennummer.
  3. Formatieren Sie das Laufwerk:

   sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
  • Ersetzen Sie DISK_ID durch die Seriennummer des Laufwerks, das Sie gerade formatieren.
  • In diesem Beispiel formatieren Sie mit scsi-SQEMU_QEMU_HARDDISK_vm-disk-data das gesamte Laufwerk ohne Partitionstabelle.

Verwenden Sie die empfohlenen Formatierungsoptionen im Flag -E, um die Laufwerkleistung zu maximieren. Da Sie keinen Speicherplatz für das Root-Volume auf Ihrem sekundären Laufwerk reservieren müssen, geben Sie -m 0 an, um den gesamten verfügbaren Speicherplatz zu verwenden.

Laufwerk bereitstellen

  1. Erstellen Sie ein Verzeichnis als Bereitstellungspunkt für das neue Laufwerk. Sie können ein beliebiges Verzeichnis verwenden. Im folgenden Beispiel wird ein Verzeichnis in /mnt/disks/ erstellt:

    sudo mkdir -p /mnt/disks/MOUNT_DIR
    

    Ersetzen Sie MOUNT_DIR durch das Verzeichnis, in dem Sie das Laufwerk bereitstellen möchten.

  2. Stellen Sie das Laufwerk für die Instanz bereit und aktivieren Sie die Option „discard“:

    sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    

    Ersetzen Sie Folgendes:

    • DISK_ID durch die Seriennummer des bereitzustellenden Laufwerks.
    • MOUNT_DIR durch das Verzeichnis, in dem Sie das Laufwerk bereitstellen möchten.
  3. Optional: Konfigurieren Sie Lese- und Schreibberechtigungen auf dem Laufwerk. Mit dem folgenden Befehl wird allen Nutzern Schreibzugriff (a+w) auf das Laufwerk gewährt.

    sudo chmod a+w /mnt/disks/MOUNT_DIR
    
  4. Optional: Automatische Bereitstellung beim Neustart der VM konfigurieren – mit der UUID (Universally Unique Identifier) oder dem Startskript.

Automatische Bereitstellung beim Neustart der VM konfigurieren – Laufwerk-UUID

Fügen Sie das Laufwerk Ihrer /etc/fstab-Datei hinzu, damit das Laufwerk automatisch bereitgestellt wird, wenn die VM neu gestartet wird. In einem Betriebssystem ändert sich der Gerätename bei jedem Neustart, aber die Geräte-UUID verweist immer auf dasselbe Volume, auch wenn Sie Laufwerke zwischen Systemen verschieben. Verwenden Sie daher immer die Geräte-UUID, um die automatische Bereitstellung beim Neustart der VM zu konfigurieren.

  1. Erstellen Sie eine Sicherung Ihrer aktuellen /etc/fstab-Datei:

      sudo cp /etc/fstab /etc/fstab.backup
    
  2. Listen Sie die UUID für das Laufwerk auf:

      sudo blkid /dev/DEVICE_NAME
    

    In der Beispielausgabe wird die UUID accc19c5-d0d6-4157-9672-37d4e1d48eb5 für das Laufwerk angezeigt.

      /dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"
    

    DEVICE_NAME ist der Gerätename des Laufwerks, das Sie automatisch bereitstellen möchten. Wenn Sie eine Partitionstabelle auf dem Laufwerk erstellt haben, geben Sie die Partition, die Sie bereitstellen möchten, als Suffix des Gerätenamens an. Wenn sdb beispielsweise der Name des Laufwerks ist und Sie Partition 1 bereitstellen möchten, wird DEVICE_NAME zu sdb1.

  3. Öffnen Sie die Datei /etc/fstab in einem Texteditor und erstellen Sie einen Eintrag, der die UUID enthält:

      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

    Ersetzen Sie Folgendes:

    • UUID_VALUE durch das Laufwerk UUID, das in der Ausgabe des Befehls UUID auflisten aufgeführt ist.
    • MOUNT_DIR durch das Verzeichnis, in dem Sie das Laufwerk bereitgestellt haben.
    • MOUNT_OPTION durch den Wert MOUNT_OPTION für Ihr Betriebssystem, der angibt, was das Betriebssystem tut, wenn es das Laufwerk beim Booten nicht bereitstellen kann.
  4. Prüfen Sie, ob Ihre /etc/fstab-Einträge korrekt sind:

    Mit dem folgenden Befehl werden die /etc/fstab-Einträge mit den vorhandenen Laufwerken und Partitionen verglichen, die an die VM angehängt sind:

      findmnt --verify
    

    Das folgende Beispiel zeigt eine erfolgreiche Überprüfung. Sie können die erwartete Warnung ignorieren:

      [W] your fstab has been modified, but systemd still uses the old version;
      use 'systemctl daemon-reload' to reload
    
      0 parse errors, 0 errors, 1 warning
    

    Wenn Fehler auftreten, prüfen Sie, ob die fstab-Einträge gültig sind. Ein häufiges Problem ist, dass dem Eintrag ungültige nicht druckbare Zeichen hinzugefügt werden. Mit dem folgenden Befehl können Sie alle Sonderzeichen in der Datei /etc/fstab anzeigen lassen:

      cat --show-nonprinting /etc/fstab
    

    Im Folgenden finden Sie ein Beispiel für eine gültige Ausgabe:

      LABEL=cloudimg-rootfs /    ext4   defaults    0 1
      LABEL=UEFI    /boot/efi   vfat    umask=0077  0 1
      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

    Achten Sie darauf, dass keine unerwarteten Zeichen vorhanden sind, z. B. nicht druckbare Zeichen, die mit M- oder ^ beginnen.

Wenn Sie dieses Laufwerk trennen oder einen Snapshot von dem Bootlaufwerk für diese VM erstellen, bearbeiten Sie die Datei /etc/fstab und entfernen den Eintrag für dieses Laufwerk. Auch wenn MOUNT_OPTION auf nofail oder nobootwait gesetzt ist, halten Sie die Datei /etc/fstab mit den Geräten synchronisiert, die mit Ihrer VM verbunden sind. Entfernen Sie diese Einträge, bevor Sie den Snapshot des Bootlaufwerks erstellen oder das Laufwerk trennen.

Automatische Bereitstellung beim Neustart der VM konfigurieren – VM-Startskript

Sie können auch ein Startskript verwenden, um das Laufwerk bei jedem Neustart bereitzustellen. Fügen Sie dazu die Befehle aus Laufwerk bereitstellen einem Startskript hinzu. Bevor Sie das Skript zum Bereitstellen des Laufwerks hinzufügen, formatieren Sie das Laufwerk mit den Befehlen aus Laufwerk formatieren.

  1. Erstellen Sie das Secret für das Startskript.

    cat <<EOF >>mount-disk-script
    #!/bin/bash
    mkdir -p /mnt/disks/MOUNT_DIR
    mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    EOF
    
    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      create secret generic VM_NAME-mount-script \
      --from-file=script=mount-disk-script
    
    rm mount-disk-script
    
  2. Fügen Sie das Startskript der VM hinzu.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Bearbeiten Sie spec.startupScripts so, dass der Secret-Name enthalten ist.

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
     name: VM_NAME
     namespace: PROJECT
    spec:
    # …
    startupScripts:
    - name: mount-script
      scriptSecretRef:
        name: VM_NAME-mount-script
    

Weitere Informationen zum Konfigurieren von Startskripts finden Sie hier.