Benutzerdefinierte Images erstellen

In diesem Dokument wird beschrieben, wie Sie ein benutzerdefiniertes Image für die Verwendung mit VM-Instanzen (Virtual Machine) mit Air Gap in Google Distributed Cloud (GDC) erstellen.

Sie können benutzerdefinierte Images von vorhandenen Quelllaufwerken erstellen und damit VMs erstellen und starten . Benutzerdefinierte Images sind ideal, wenn Sie ein nichtflüchtiges Bootlaufwerk in einem bestimmten Zustand erstellen und ändern und diesen Zustand zum Erstellen von VMs speichern müssen. Wenn Sie ein benutzerdefiniertes Image erstellen und speichern, um es in Zukunft als neues VM-Image zu verwenden, vermeiden Sie, dass Sie die Einrichtungsschritte später wiederholen müssen.

Dieses Dokument richtet sich an Entwickler in Plattformadministrator- oder Anwendungsoperatorgruppen, die VMs erstellen und VM-Images in einer Google Distributed Cloud (GDC)-Umgebung mit Air Gap verwalten. Weitere Informationen finden Sie unter Dokumentation zu Zielgruppen für GDC mit Air Gap.

Hinweis

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

Pfad der kubeconfig-Datei abrufen

Wenn Sie Befehle für den 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. Ersetzen Sie in dieser Anleitung MANAGEMENT_API_SERVER durch den Pfad zur kubeconfig-Datei des Management API-Servers.

IAM-Rollen anfordern

Wenden Sie sich an Ihren Projekt-IAM-Administrator, um die folgenden Rollen für Ihr Projekt anzufordern:

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

  • Projektbetrachter(project-viewer): Alle Ressourcen in den Projekt-Namespaces ansehen.

  • Project Virtual Machine Image Admin (project-vm-image-admin): Benutzerdefinierte VM-Images im Projekt-Namespace erstellen, auflisten und löschen.

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 prüfen.

Benutzerdefiniertes Image erstellen

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

VM für ein Image vorbereiten

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

Schreiben von Daten auf den nichtflüchtigen Speicher beenden

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

Image erstellen

Führen Sie die folgenden Schritte aus, um Laufwerk-Images von einem nichtflüchtigen Speicher zu erstellen, auch wenn dieser mit einer VM verbunden ist:

Console

  1. Wählen Sie ein Projekt aus.

  2. Klicken Sie im Navigationsmenü auf Virtual Machines > Images.

  3. Klicken Sie auf Image erstellen.

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

  5. Geben Sie eine Version ein, die dem Image-Namen hinzugefügt werden soll.

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

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

  8. Geben Sie eine Beschreibung des Images ein.

  9. Klicken Sie auf Erstellen.

Das Image wird in der Liste der Images angezeigt.

API

  1. Listen Sie alle VirtualMachineDisk-Objekte auf:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      get virtualmachinedisks.virtualmachine.gdc.goog
    
  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 \
        -n PROJECT \
        get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \
        -o jsonpath='{.status.virtualMachineAttachments}'
    

    Die folgende Beispielausgabe zeigt ein Laufwerk, das an eine VM angehängt ist:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    • Wenn die Ausgabe einen Wert für "name" zurückgibt, ist das Laufwerk an eine VM angehängt, die durch das name Feld angegeben wird. In diesem Beispiel ist der Wert für name gleich vm1. Fahren Sie fort , den Ausführungsstatus der VM zu prüfen.
    • Wenn die Ausgabe leer ist, rufen Sie die get the size of the VirtualMachineDisk ab.
  4. 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.

  5. Rufen Sie die size des VirtualMachineDisk ab, um das Image zu erstellen:

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

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      apply -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
    
  7. Prüfen Sie, ob der Image-Import abgeschlossen ist und der Status Ready lautet:

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

    Wenn der Import abgeschlossen ist, sieht die Statusausgabe so ähnlich aus:

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

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

    Ersetzen Sie die Variablen anhand der folgenden Definitionen.

    VariableDefinition
    MANAGEMENT_API_SERVER Die kubeconfig-Datei 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 Images, z. B. custom-image.
    OS_NAME Der Name des Betriebssystems des Images. Er muss einer der folgenden Werte sein:
    ubuntu-2004, windows-2019 oder rhel-8.
    MINIMUM_DISK_SIZE Die minimale Laufwerkgröße im VM-Image-Import, z. B. 20G:
    minimumDiskSize muss immer größer oder gleich der Größe des Quell-Bootlaufwerks sein.
    CREATED_IMAGE_NAME Der Name des erstellten Images. Der Name des erstellten Images muss eindeutig sein. Sie können keinen Image-Namen verwenden, der bereits im Projekt vorhanden ist.

Terraform

  1. Listen Sie alle VirtualMachineDisk-Objekte auf:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      get virtualmachinedisks.virtualmachine.gdc.goog
    
  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 \
        -n PROJECT \
        get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \
        -o jsonpath='{.status.virtualMachineAttachments}'
    

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

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    • Wenn die Ausgabe einen Wert für "name" zurückgibt, ist das Laufwerk an eine VM angehängt, die durch das name Feld angegeben wird. In dieser Beispielausgabe ist der Wert für name gleich vm1. Fahren Sie fort , den Ausführungsstatus der VM zu prüfen.
    • Wenn die Ausgabe leer ist, rufen Sie die get the size of the VirtualMachineDisk ab.
  4. 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.

  5. Rufen Sie die size des VirtualMachineDisk ab, um das Image zu erstellen:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \
      -o jsonpath='{.spec.size}'
    
  6. Erstellen Sie eine Datei mit dem Namen main.tf und dem folgenden Inhalt:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "image_import" {
      manifest = {
        "apiVersion" = "virtualmachine.gdc.goog/v1"
        "kind" = "VirtualMachineImageImport"
        "metadata" = {
          "name" = "VM_IMAGE_IMPORT_NAME"
          "namespace" = "PROJECT"
        }
        "spec" = {
          "source" = {
            "diskRef" = {
              "name" = "DISK_NAME"
            }
          }
          "imageMetadata" = {
            "name" = "IMAGE_NAME"
            "operatingSystem" = "OS_NAME"
            "minimumDiskSize" = "MINIMUM_DISK_SIZE"
          }
        }
      }
    }
    
  7. Wenden Sie das VirtualMachineImageImport-Objekt mit Terraform an:

    terraform apply
    
  8. Prüfen Sie, ob der Image-Import abgeschlossen ist und der Status Ready lautet:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      get virtualmachineimageimports.virtualmachine.gdc.goog 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
    }
    
  9. Prüfen Sie, ob das Image erstellt wurde:

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

    Ersetzen Sie die Variablen anhand der folgenden Definitionen.

    VariableDefinition
    MANAGEMENT_API_SERVER Die kubeconfig-Datei 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 Images, z. B. custom-image.
    OS_NAME Der Name des Betriebssystems des Images. Er muss einer der folgenden Werte sein:
    ubuntu-2004, windows-2019 oder rhel-8.
    MINIMUM_DISK_SIZE Die minimale Laufwerkgröße im VM-Image-Import, z. B. 20G:
    minimumDiskSize muss immer größer oder gleich der Größe des Quell-Bootlaufwerks sein.
    CREATED_IMAGE_NAME Der Name des erstellten Images. Der Name des erstellten Images muss eindeutig sein. Sie können keinen Image-Namen verwenden, der bereits im Projekt vorhanden ist.

Nächste Schritte