Creare e gestire i dischi virtuali in Google Distributed Cloud

Questo documento è rivolto ai proprietari di applicazioni che eseguono Google Distributed Cloud. Questo documento illustra come creare e gestire le risorse disco per le macchine virtuali (VM) che utilizzano il runtime VM su GDC.

Prima di iniziare

Per completare questo documento, devi disporre dell'accesso alle seguenti risorse:

Creare una VM con un disco collegato

Quando crei una VM, puoi collegare un disco di avvio o di dati esistente, creare un disco da un'immagine (incluso per il disco di avvio) o creare un disco vuoto.

Disco vuoto

In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco di dati per archiviare i dati dell'applicazione.

  1. Crea un manifest che definisce un VirtualMachineDisk e un VirtualMachine, come my-vm.yaml, nell'editor che preferisci:

    nano my-vm.yaml
    
  2. Copia e incolla la seguente definizione YAML:

    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
    

    Sostituisci quanto segue:

    • DISK_NAME: il nome del disco vuoto che stai creando e collegando alla VM.

    • VM_NAME: il nome della VM che stai creando.

      Questo esempio crea un disco vuoto da 10Gi (10 gibibyte) denominato DISK_NAME. Nella sezione spec.disks della VM, devi anche collegare un disco di avvio, ad esempio da un'immagine come mostrato nella sezione successiva.

  3. Salva e chiudi il file manifest nell'editor.

  4. Crea la VM e il disco utilizzando kubectl:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster.

Da immagine

In questo scenario, crei un disco da un'immagine e lo colleghi alla VM. Questo scenario ti consente di creare un disco di avvio, ad esempio da un'immagine. Puoi anche creare e collegare dischi di dati da un'immagine.

Origini delle immagini supportate

Il runtime VM su GDC consente una varietà di formati di immagine e supporta tre tipi di origini immagine che possono essere specificati nella specifica VirtualMachineDisk. Ciascuno dei seguenti esempi crea 20 gibibyte di spazio su disco da un'origine immagine supportata diversa.

  • HyperText Transfer Protocol (HTTP)

    L'esempio VirtualMachineDisk seguente mostra la struttura di base di un'origine immagine HTTP. Il campo url prevede un URL HTTP o HTTPS.

    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

    L'esempio seguente mostra come creare un disco da un'immagine in un bucket Cloud Storage. Se le credenziali predefinite dell'applicazione sulla macchina non sono sufficienti per accedere all'URL di Cloud Storage, devi fornire le credenziali. Nell'esempio seguente, my-gcs è un segreto contenente una chiave dell'account di servizio codificata in base64.

    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
    

    Se hai utilizzato le chiavi degli account di servizio scaricate per creare il cluster, puoi utilizzare la chiave dell'account di servizio Container Registry per l'accesso a Cloud Storage. Se crei un account di servizio separato per accedere a Cloud Storage, consulta Configurare un account di servizio che può accedere a un bucket Cloud Storage.

    Utilizza il seguente comando per creare un Secret Kubernetes dal file della chiave del account di servizio scaricato:

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

    Sostituisci quanto segue:

    • SECRET_NAME: il nome del secret.
    • KEY_FILE: percorso del file JSON con la chiave dell'account di servizio scaricato. Ad esempio, bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json.
    • KUBECONFIG: percorso del file kubeconfig del cluster.

    Per ulteriori informazioni sull'utilizzo delle credenziali per accedere a Cloud Storage, consulta Creare e utilizzare le credenziali per importare le immagini da Cloud Storage.

  • Esempio di registry dei container

    Sono supportati i registry dei container conformi alla specifica di distribuzione di Open Container Initiative (OCI). L'esempio seguente crea un disco da un'immagine archiviata in un registro Docker.

    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
    

Formati di immagine validi

Quando crei un disco da un'immagine, puoi utilizzare uno dei seguenti formati di immagine:

  • Archivio GNU zip (gzip) (.gz)
  • RAW (.raw, .img)
  • Immagine disco QEMU copy on write versione 2 (qcow2) (.qcow2)
  • Archivio compresso con xz (.xz)
  • File del disco della macchina virtuale (VMDK) (.vmdk)
  • File immagine disco virtuale (VDI) di VirtualBox (.vdi)
  • File immagine del disco rigido virtuale (VHD) (.vdh)
  • File Virtual Hard Disk versione 2 (VDHX) (.vdhx)
  • File immagine disco ISO (.iso)

Esempio di un disco creato da un'immagine HTTP

I passaggi che seguono consentono di creare un disco di avvio da un'immagine Ubuntu:

  1. Crea un manifest che definisce un VirtualMachineDisk e un VirtualMachine, come my-vm.yaml,nell'editor che preferisci:

    nano my-vm.yaml
    
  2. Copia e incolla la seguente definizione YAML:

    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
    

    Questo esempio crea un disco da 20Gi (20 gibibyte) denominato VM_NAME-boot-dv utilizzando un'immagine Ubuntu pubblica. Nella sezione spec.disks della VM, il disco è impostato su boot: true.

  3. Salva e chiudi il manifest nell'editor.

  4. Crea la VM e il disco utilizzando kubectl:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster.

Disco esistente

In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco di dati per archiviare i dati dell'applicazione.

  1. Crea un file manifest VirtualMachine, ad esempio my-vm.yaml,nell'editor di tua scelta:

    nano my-vm.yaml
    
  2. Copia e incolla la seguente definizione YAML:

    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
    

    Questo esempio collega un disco esistente denominato EXISTING_DISK_NAME.

    Nella sezione spec.disks della VM, devi anche collegare un disco di avvio, ad esempio da un'immagine come mostrato nella sezione precedente.

  3. Salva e chiudi il file manifest della VM nell'editor.

  4. Crea la VM utilizzando kubectl:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster.

Individuare i dischi

A partire dalla versione 1.13.0 di Google Distributed Cloud, quando crei una VM, il runtime VM su GDC utilizza i nomi dei dischi specificati nella risorsa VM per impostare i numeri di serie dei dischi. Nello specifico, i nomi specificati con spec.disks.virtualMachineDiskName nella risorsa personalizzata VirtualMachine vengono utilizzati nel numero di serie dei dischi. Questa funzionalità semplifica la ricerca dei dischi nella VM quando devi eseguire operazioni sui dischi, come la formattazione o il montaggio.

Ad esempio, se hai creato una VM e hai specificato un disco di avvio denominato sample-boot-dv, la tua risorsa personalizzata VirtualMachine ha il seguente aspetto:

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

Per le VM Linux, quando accedi alla VM, puoi eseguire il seguente comando per elencare i dischi in base al numero di serie:

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

La risposta dovrebbe avere un aspetto simile a questo esempio di output, in cui i nomi dei dischi vengono visualizzati come numeri di serie:

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

Tieni presente il seguente comportamento della funzionalità in base alla situazione:

  • Se il valore virtualMachineDiskName è più lungo di 20 caratteri, il runtime VM su GDC utilizza solo i primi 20 caratteri come numero di serie.
  • Se sono presenti due dischi con gli stessi primi 20 caratteri, solo il primo avrà un numero di serie.

Crea e collega i dischi alla VM esistente

Se hai già una VM, puoi creare e collegare i dischi per supportare i cicli di vita delle applicazioni. La VM deve essere in stato di arresto prima di collegare un disco.

Disco vuoto

In questo scenario, crei un disco vuoto e lo colleghi alla VM. Questo scenario ti consente di creare un disco di dati per archiviare i dati dell'applicazione.

  1. Se necessario, utilizza kubectl per arrestare la VM:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM che vuoi arrestare.
    • KUBECONFIG: il percorso del file kubeconfig del cluster.
  2. Modifica la risorsa VM esistente, ad esempio my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Aggiorna il file manifest YAML VirtualMachine per aggiungere una sezione VirtualMachineDisk nella parte superiore, quindi collega il disco alla fine della sezione spec.disks della VM:

    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
    

    Questo esempio crea un disco vuoto da 10Gi (10 gibibyte) denominato DISK_NAME.

  4. Salva e chiudi il file manifest della VM aggiornato nell'editor.

  5. Usa kubectl per avviare la VM:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Da immagine

In questo scenario, crei un disco da un'immagine di origine e lo colleghi alla VM.

  1. Se necessario, utilizza kubectl per arrestare la VM:

    kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM che vuoi arrestare.
    • KUBECONFIG: il percorso del file kubeconfig del cluster.
  2. Modifica la risorsa VM esistente, ad esempio my-vm:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  3. Aggiorna il file manifest VirtualMachine per aggiungere una sezione VirtualMachineDisk in cima, quindi collega il disco alla fine della sezione spec.disks della VM:

    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
    

    Questo esempio crea un disco 10Gi (10 gibibyte) denominato DISK_NAME dall'origine HTTP http://example.com/my-disk-img.qcow2.

  4. Salva e chiudi il file manifest della VM aggiornato nell'editor.

  5. Usa kubectl per avviare la VM:

    kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
    

Crea un disco

In questo scenario, crei le risorse del disco separatamente dalle risorse della VM. Questo scenario ti consente di creare i dischi in anticipo e poi di collegarli alle VM in base alle esigenze.

Disco vuoto

Per creare un disco vuoto, completa i seguenti passaggi.

  1. Crea un file manifest VirtualMachineDisk, ad esempio my-disk.yaml,nell'editor scelto:

    nano my-disk.yaml
    
  2. Copia e incolla la seguente definizione YAML:

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

    Questo esempio crea un disco vuoto da 10Gi (10 gibibyte) denominato DISK_NAME.

  3. Salva e chiudi il manifest del disco nell'editor.

  4. Crea il disco utilizzando kubectl:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster.

Da immagine

Per creare un disco da un'immagine, completa i seguenti passaggi.

  1. Crea un file manifest VirtualMachineDisk, ad esempio my-disk.yaml, nell'editor che preferisci:

    nano my-disk.yaml
    
  2. Copia e incolla la seguente definizione YAML:

    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
    

    Questo esempio crea un disco da 20Gi (20 gibibyte) denominato DISK_NAME utilizzando un'immagine Ubuntu pubblica.

  3. Salva e chiudi il manifest del disco nell'editor.

  4. Crea il disco utilizzando kubectl:

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

    Sostituisci KUBECONFIG con il percorso del file kubeconfig del cluster.

Passaggi successivi