Benutzerdefinierte Images erstellen

Sie können benutzerdefinierte Images aus vorhandenen Quelllaufwerken erstellen und damit VMs erstellen und starten. Benutzerdefinierte Images sind ideal, wenn Sie ein nichtflüchtiges Bootlaufwerk in einem bestimmten Zustand erstellt und geändert haben und diesen Zustand zum Erstellen von VMs speichern müssen. Wenn Sie ein benutzerdefiniertes Image erstellen und speichern, das Sie in Zukunft als neues VM-Image verwenden können, müssen Sie die Einrichtungsschritte später nicht wiederholen.

Hinweise

Wenn Sie Befehle der gdcloud-Befehlszeile (Command-Line Interface, CLI) verwenden möchten, müssen Sie die gdcloud-CLI heruntergeladen, installiert und konfiguriert haben. Für alle Befehle für die GDC-Appliance ohne Internetverbindung wird die gdcloud- oder kubectl-Befehlszeile verwendet. Außerdem ist eine Linux-Umgebung erforderlich.

Pfad der kubeconfig-Datei abrufen

Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:

  1. Suchen Sie den Namen des Management API-Servers oder fragen Sie Ihren Plattformadministrator danach.

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

  3. Verwenden Sie den Pfad, um MANAGEMENT_API_SERVER{"</var>"}} in dieser Anleitung zu ersetzen.

Berechtigungen und Zugriff anfordern

Zum Erstellen eines benutzerdefinierten Images benötigen Sie Zugriff auf VM-Images auf Projektebene. Folgen Sie der Anleitung für Ihren Projekt-IAM-Administrator, um Ihnen die Rolle „Project VirtualMachine Image Admin“ (project-vm-image-admin) im Namespace des Projekts zuzuweisen, in dem sich die VM befindet. Wenn Sie die GDC-Konsole oder die gdcloud CLI zum Erstellen eines Images verwenden, benötigen Sie außerdem die Rolle „Project VirtualMachine Admin“ (project-vm-admin) und die Rolle „Project Viewer“ (project-viewer).

Benutzerdefiniertes Image erstellen

In diesem Abschnitt wird beschrieben, wie Sie ein benutzerdefiniertes Image auf einer Linux-VM erstellen.

VM für ein Image vorbereiten

Sie können ein Image von einem Laufwerk erstellen, während es an eine laufende VM angehängt ist. Das Image wird jedoch zuverlässiger, wenn Sie die VM in einen Zustand versetzen, den das Image leichter erfassen kann.

Schreiben von Daten in den nichtflüchtigen Speicher minimieren

Verwenden Sie eines der folgenden Verfahren, um die Schreibvorgänge auf dem Laufwerk zu reduzieren. Beenden Sie die VM oder minimieren Sie die Schreibvorgänge auf das Laufwerk:

  • Beenden Sie die VM, sodass sie herunterfahren und das Schreiben von Daten auf den nichtflüchtigen Speicher beenden kann.

Wenn Sie Ihre VM nicht beenden können, bevor Sie das Image erstellen, minimieren Sie die Schreibvorgänge auf das Laufwerk und synchronisieren Sie Ihr Dateisystem. So minimieren Sie das Schreiben in Ihren nichtflüchtigen Speicher:

  1. Pausieren Sie alle Anwendungen oder Betriebssystemprozesse, die Daten in den nichtflüchtigen Speicher schreiben. Leeren Sie die Anwendungsdaten auf das Laufwerk, falls erforderlich. Andere Anwendungen haben möglicherweise ähnliche Prozesse.
  2. Beenden Sie das Schreiben von Daten auf den nichtflüchtigen Speicher durch Anwendungen.
  3. Führen Sie sudo sync aus.

Image erstellen

So erstellen Sie Laufwerk-Images aus einem nichtflüchtigen Speicher, auch wenn dieser mit einer VM verbunden ist:

Console

  1. Wählen Sie ein Projekt aus.

  2. Klicken Sie im Navigationsmenü auf Virtuelle Maschinen > Images.

  3. Klicken Sie auf Image erstellen.

  4. Geben Sie einen eindeutigen Namen für das Bild ein. Der Name darf maximal 35 Zeichen lang sein.

  5. Geben Sie eine Version ein, die dem Bildnamen hinzugefügt werden soll.

  6. Wählen Sie im Feld Quelllaufwerk ein Laufwerk aus.

  7. Geben Sie im Feld Mindestlaufwerkgröße eine Laufwerkgröße ein.

  8. Geben Sie eine Beschreibung des Bildes ein.

  9. Klicken Sie auf Erstellen.

Das Bild wird in der Liste der Bilder angezeigt.

API

  1. Alle VirtualMachineDisk-Objekte auflisten:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. Wählen Sie ein VirtualMachineDisk-Objekt aus, das als Quelllaufwerk für das neue Image verwendet werden soll.

  3. Prüfen Sie, ob das VM-Laufwerk an eine VM angehängt ist:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
          get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
          DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'
    

    Beispielausgabe, die zeigt, dass ein Laufwerk an eine VM angehängt ist:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. Prüfen Sie den Ausführungsstatus der VM. Wenn der Status nicht Stopped ist, beenden Sie die VM und fahren Sie mit dem Erstellen des VirtualMachineImage fort.
  4. size von VirtualMachineDisk abrufen, um das Bild zu erstellen:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. Erstellen Sie ein VirtualMachineImageImport-Objekt auf dem Management API-Server:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: VM_IMAGE_IMPORT_NAME
    spec:
      source:
        diskRef:
          name: DISK_NAME
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: OS_NAME
        minimumDiskSize: MINIMUM_DISK_SIZE
    EOF
    
  6. Prüfen Sie, ob der Bildimport abgeschlossen ist und der Status Ready lautet:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \
        VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'
    

    Wenn der Import abgeschlossen ist, sollte der Status so aussehen:

    {
      "conditions": [
        {
          "lastTransitionTime": "",
          "message": "",
          "observedGeneration": 1,
          "reason": "ImportJobComplete",
          "status": "True",
          "type": "Ready"
        }
      ],
      "imageName": IMAGE_NAME
    }
    
  7. Prüfen Sie, ob das Image erstellt wurde:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \
        CREATED_IMAGE_NAME
    

    Ersetzen Sie die Variablen anhand der folgenden Definitionen.

    VariableDefinition
    MANAGEMENT_API_SERVER Die Datei kubeconfig des Management API-Servers.
    PROJECT Das GDC-Projekt, in dem das Image erstellt werden soll.
    DISK_NAME Der Name des Quelllaufwerks, z. B. vm1-boot-disk.
    VM_IMAGE_IMPORT_NAME Der Name des VM-Image-Imports. Der Name darf maximal 35 Zeichen lang sein.
    IMAGE_NAME Der Name des erstellten Bildes, z. B. custom-image.
    OS_NAME Der Name des Betriebssystems des Images muss einer der folgenden sein:
    ubuntu-2004, windows-2019 oder rhel-8.
    MINIMUM_DISK_SIZE Die Mindestlaufwerkgröße beim Importieren von VM-Images, z. B. 20G:
    minimumDiskSize, muss immer größer oder gleich der Größe des Quell-Bootlaufwerks sein.
    CREATED_IMAGE_NAME Der Name des erstellten Bildes. Der Name des erstellten Bildes muss eindeutig sein. Es darf sich nicht um einen Bildnamen handeln, der bereits im Projekt vorhanden ist.