Virtuelle Laufwerke in Google Distributed Cloud erstellen und verwalten

Dieses Dokument richtet sich an Anwendungsinhaber, die Google Distributed Cloud ausführen. In diesem Dokument erfahren Sie, wie Sie Laufwerkressourcen für virtuelle Maschinen (VMs) erstellen und verwalten, die VM Laufzeit on GDC verwenden.

Vorbereitung

Um dieses Dokument abzuschließen, benötigen Sie Zugriff auf die folgenden Ressourcen:

VM mit einem angehängten Laufwerk erstellen

Sie können beim Erstellen einer VM ein vorhandenes Start- oder Datenlaufwerk hinzufügen, ein Laufwerk aus einem Image erstellen (einschließlich des Bootlaufwerks) oder ein leeres Laufwerk erstellen.

Leeres Laufwerk

In diesem Szenario erstellen Sie ein leeres Laufwerk und hängen es an die VM an. In diesem Szenario können Sie ein Datenlaufwerk zum Speichern von Anwendungsdaten erstellen.

  1. Erstellen Sie im Editor Ihrer Wahl ein Manifest, das eine VirtualMachineDiskund VirtualMachine wie my-vm.yaml definiert:

    nano my-vm.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    Ersetzen Sie dabei Folgendes:

    • DISK_NAME: der Name des leeren Laufwerks, das Sie erstellen und an Ihre VM anhängen.

    • VM_NAME: der Name der VM, die Sie erstellen.

      In diesem Beispiel wird ein leeres 10Gi-Laufwerk (10 gibibyte) mit dem Namen DISK_NAME erstellt. Im Abschnitt spec.disks der VM müssen Sie auch ein Bootlaufwerk anhängen, z. B. von einem Image, wie im nächsten Abschnitt gezeigt.

  3. Speichern und schließen Sie die Manifestdatei in Ihrem Editor.

  4. Erstellen Sie die VM und das Laufwerk mit kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad zur Kubeconfig-Datei des Nutzerclusters.

Image

In diesem Szenario erstellen Sie ein Laufwerk aus einem Image und hängen es an die VM an. In diesem Szenario können Sie ein Bootlaufwerk erstellen, z. B. aus einem Image. Sie können auch Datenlaufwerke aus einem Image erstellen und anhängen.

Unterstützte Image-quellen

VM Runtime auf GDC unterstützt verschiedene Imageformate und drei Arten von Imagequellen, die in der VirtualMachineDisk-Spezifikation angegeben werden können. In den folgenden Beispielen wird jeweils ein Laufwerk mit 20 Gibibyte aus einer anderen unterstützten Imagequelle erstellt.

  • HyperText Transfer Protocol (HTTP)

    Das folgende VirtualMachineDisk-Beispiel zeigt die grundlegende Struktur für eine HTTP-Imagequelle. Für das Feld url ist entweder eine HTTP- oder eine HTTPS-URL erforderlich.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: my-disk
    spec:
      source:
        http:
          url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
      size: 20GiB
      storageClassName: local-shared
    
  • Cloud Storage

    Im folgenden Beispiel wird gezeigt, wie Sie ein Laufwerk aus einem Image in einem Cloud Storage-Bucket erstellen. Wenn die Standardanmeldedaten für Anwendungen auf dem Computer nicht ausreichen, um auf die Cloud Storage-URL zuzugreifen, müssen Sie Anmeldedaten angeben. Im folgenden Beispiel ist my-gcs ein Secret, das einen base64-codierten Dienstkontoschlüssel enthält.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: my-disk
    spec:
      source:
        gcs:
          url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2
          secretRef: my-gcs
      size: 20GiB
      storageClassName: local-shared
    

    Wenn Sie heruntergeladene Dienstkontoschlüssel zum Erstellen Ihres Clusters verwendet haben, können Sie den Artifact Registry-Dienstkontoschlüssel für den Cloud Storage-Zugriff verwenden. Wenn Sie ein separates Dienstkonto für den Zugriff auf Cloud Storage erstellen möchten, lesen Sie Dienstkonto konfigurieren, das auf einen Cloud Storage-Bucket zugreifen kann.

    Verwenden Sie den folgenden Befehl, um ein Kubernetes-Secret aus der heruntergeladenen Dienstkontoschlüsseldatei zu erstellen:

    kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \
        --kubeconfig KUBECONFIG
    

    Ersetzen Sie dabei Folgendes:

    • SECRET_NAME: Name für Ihr Secret.
    • KEY_FILE: Pfad zur heruntergeladenen JSON-Datei des Dienstkontoschlüssels. Beispiel: bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json.
    • KUBECONFIG: Pfad zur Kubeconfig-Datei des clusters

    Weitere Informationen zur Verwendung von Anmeldedaten für den Zugriff auf Cloud Storage finden Sie unter Anmeldedaten zum Importieren von Images aus Cloud Storage erstellen und verwenden.

  • Beispiel für Container Registry

    Containerregistries, die der Open Container Initiative (OCI) Distribution Specification entsprechen, werden unterstützt. Im folgenden Beispiel wird ein Laufwerk aus einem Image erstellt, das in einer Docker-Registry gespeichert ist.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: my-disk
    spec:
      source:
        registry:
          url: docker://kubevirt/fedora-cloud-registry-disk-demo
      size: 20GiB
      storageClassName: local-shared
    

Gültige Image-formate

Sie können eines der folgenden Image-Formate verwenden, wenn Sie ein Laufwerk aus einem Image erstellen:

  • GNU-Zip-Archiv (gzip) (.gz)
  • RAW (.raw, .img)
  • QEMU Copy-on-Write Version 2 (qcow2)-Laufwerk-Image (.qcow2)
  • XZ-komprimiertes Archiv (.xz)
  • Virtual Machine Disk-Datei (VMDK) (.vmdk)
  • VirtualBox Virtual Disk Image-Datei (VDI) (.vdi)
  • Imagedatei für Virtual Hard Disk (VHD) (.vdh)
  • Virtual Hard Disk Version 2-Datei (VDHX) (.vdhx)
  • ISO-Laufwerk-Image-Datei (.iso)

Beispiel für ein Laufwerk, das aus einem HTTP-Image erstellt wurde

Mit den folgenden Schritten wird ein Bootlaufwerk aus einem Ubuntu-Image erstellt:

  1. Erstellen Sie ein Manifest, das eine VirtualMachineDisk und VirtualMachine definiert, z. B. my-vm.yaml, in dem Editor Ihrer Wahl:

    nano my-vm.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_NAME-boot-dv
    spec:
      size: 20Gi
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
    

    In diesem Beispiel wird ein 20Gi-Laufwerk (20 gibibyte) namens VM_NAME-boot-dv mit einem öffentlichen Ubuntu-Image erstellt. Im Abschnitt spec.disks der VM wird das Laufwerk auf boot: true gesetzt.

  3. Speichern und schließen Sie das Manifest in Ihrem Editor.

  4. Erstellen Sie die VM und das Laufwerk mit kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad zur Kubeconfig-Datei des Nutzerclusters.

Vorhandenes Laufwerk

In diesem Szenario erstellen Sie ein leeres Laufwerk und hängen es an die VM an. In diesem Szenario können Sie ein Datenlaufwerk zum Speichern von Anwendungsdaten erstellen.

  1. Erstellen Sie in einem Editor Ihrer Wahl ein VirtualMachine-Manifest wie my-vm.yaml:

    nano my-vm.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: EXISTING_DISK_NAME
    

    In diesem Beispiel wird ein vorhandenes Laufwerk mit dem Namen EXISTING_DISK_NAME angehängt.

    Im Abschnitt spec.disks der VM müssen Sie auch ein Bootlaufwerk anhängen, z. B. von einem Image, wie im vorherigen Abschnitt gezeigt.

  3. Speichern und schließen Sie das VM-Manifest in Ihrem Editor.

  4. Erstellen Sie die VM mit kubectl:

    kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad zur Kubeconfig-Datei des Nutzerclusters.

Laufwerke suchen

Ab Google Distributed Cloud Version 1.13.0 verwendet VM Runtime on GDC beim Erstellen einer VM die in der VM-Ressource angegebenen Laufwerknamen, um Seriennummern für Laufwerke festzulegen. Insbesondere werden die Namen, die Sie mit spec.disks.virtualMachineDiskName in der benutzerdefinierten VirtualMachine-Ressource angeben, in der Seriennummer für die Laufwerke verwendet. Mit dieser Funktion können Sie Ihre Laufwerke einfacher in der VM finden, wenn Sie Laufwerkoperationen wie Formatieren oder Einbinden ausführen müssen.

Wenn Sie beispielsweise eine VM erstellt und ein Bootlaufwerk mit dem Namen sample-boot-dv angegeben haben, sieht Ihre benutzerdefinierte VirtualMachine-Ressource in etwa so aus:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  name: sample-vm
spec:
  osType: Linux
  compute:
    cpu:
      vcpus: 2
    memory:
      capacity: 4Gi
  interfaces:
    - name: eth0
      networkName: pod-network
      default: true
  disks:
    - boot: true
      virtualMachineDiskName: sample-vm-boot-dv
    - virtualMachineDiskName: attached-disk

Wenn Sie sich bei Linux-VMs in Ihrer VM anmelden, können Sie mit dem folgenden Befehl Laufwerke nach ihrer Seriennummer auflisten:

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

Die Antwort sollte in etwa so aussehen. Die Laufwerknamen werden als Seriennummern angezeigt:

total 0
lrwxrwxrwx 1 root root  9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root  9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root  9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb

Achten Sie auf das folgende Situationsverhalten:

  • Wenn der Wert virtualMachineDiskName länger als 20 Zeichen ist, verwendet VM Runtime on GDC nur die ersten 20 Zeichen als Seriennummer.
  • Wenn zwei Laufwerke die gleichen ersten 20 Zeichen haben, hat nur das erste Laufwerk eine Seriennummer.

Laufwerke erstellen und an vorhandene VM anhängen

Wenn Sie bereits eine VM haben, können Sie Laufwerke erstellen und anhängen, um die Anwendungslebenszyklen zu unterstützen. Die VM muss deaktiviert sein, bevor Sie ein Laufwerk anhängen.

Leeres Laufwerk

In diesem Szenario erstellen Sie ein leeres Laufwerk und hängen es an die VM an. In diesem Szenario können Sie ein Datenlaufwerk zum Speichern von Anwendungsdaten erstellen.

  1. Verwenden Sie kubectl, um die VM bei Bedarf zu beenden:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Ersetzen Sie dabei Folgendes:

    • VM_NAME: der Name der VM, die Sie beenden möchten.
    • KUBECONFIG: der Pfad zur kubeconfig-Datei des clusters.
  2. Bearbeiten Sie Ihre vorhandene VM-Ressource, z. B. my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Aktualisieren Sie das YAML-Manifest VirtualMachine, um oben einen Abschnitt VirtualMachineDisk hinzuzufügen, und hängen Sie dann das Laufwerk am Ende des Abschnitts spec.disks der VM an:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    In diesem Beispiel wird ein leeres 10Gi-Laufwerk (10 gibibyte) mit dem Namen DISK_NAME erstellt.

  4. Speichern und schließen Sie das aktualisierte VM-Manifest in Ihrem Editor.

  5. Starten Sie die VM mit kubectl:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Image

In diesem Szenario erstellen Sie ein Laufwerk aus einem Quell-Image und hängen es an die VM an.

  1. Verwenden Sie kubectl, um die VM bei Bedarf zu beenden:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Ersetzen Sie dabei Folgendes:

    • VM_NAME: der Name der VM, die Sie beenden möchten.
    • KUBECONFIG: der Pfad zur kubeconfig-Datei des clusters.
  2. Bearbeiten Sie Ihre vorhandene VM-Ressource, z. B. my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Aktualisieren Sie das VirtualMachine-Manifest, um oben einen Abschnitt VirtualMachineDisk hinzuzufügen. Hängen Sie dann das Laufwerk am Ende des Abschnitts spec.disks der VM an:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
      source:
        http:
          url: http://example.com/my-disk-img.qcow2
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    In diesem Beispiel wird ein 10Gi-Laufwerk (10 gibibyte) namens DISK_NAME aus der HTTP-Quelle http://example.com/my-disk-img.qcow2 erstellt.

  4. Speichern und schließen Sie das aktualisierte VM-Manifest in Ihrem Editor.

  5. Starten Sie die VM mit kubectl:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Laufwerk erstellen

In diesem Szenario erstellen Sie die Laufwerkressourcen getrennt von den VM-Ressourcen. In diesem Szenario können Sie Laufwerke im Voraus erstellen und dann nach Bedarf an VMs anhängen.

Leeres Laufwerk

Führen Sie die folgenden Schritte aus, um ein leeres Laufwerk zu erstellen.

  1. Erstellen Sie in einem Editor Ihrer Wahl ein VirtualMachineDisk-Manifest wie z. B. my-disk.yaml:

    nano my-disk.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    

    In diesem Beispiel wird ein leeres 10Gi-Laufwerk (10 gibibyte) mit dem Namen DISK_NAME erstellt.

  3. Speichern und schließen Sie das Laufwerkmanifest in Ihrem Editor.

  4. Erstellen Sie das Laufwerk mit kubectl:

    kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad zur Kubeconfig-Datei des Nutzerclusters.

Image

Führen Sie die folgenden Schritte aus, um ein Laufwerk aus einem Image zu erstellen.

  1. Erstellen Sie in einem Editor Ihrer Wahl ein VirtualMachineDisk-Manifest wie my-disk.yaml.

    nano my-disk.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 20Gi
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    

    In diesem Beispiel wird ein 20Gi-Laufwerk (20 gibibyte) namens DISK_NAME mit einem öffentlichen Ubuntu-Image erstellt.

  3. Speichern und schließen Sie das Laufwerkmanifest in Ihrem Editor.

  4. Erstellen Sie das Laufwerk mit kubectl:

    kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
    

    Ersetzen Sie KUBECONFIG durch den Pfad zur Kubeconfig-Datei des Nutzerclusters.

Nächste Schritte