Crea immagini personalizzate

Puoi creare immagini personalizzate da dischi di origine esistenti e utilizzarle per creare e avviare macchine virtuali (VM). Le immagini personalizzate sono ideali per l'utilizzo quando hai creato e modificato un disco di avvio permanente in un determinato stato e devi salvare questo stato per creare VM. La creazione e il salvataggio di un'immagine personalizzata da utilizzare come nuova immagine VM nella creazione di VM future impedisce la duplicazione dei passaggi di configurazione in un secondo momento.

Prima di iniziare

Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato e configurato la CLI gdcloud. Tutti i comandi per l'appliance GDC air-gapped utilizzano la CLI gdcloud o kubectl e richiedono un ambiente Linux.

Recupera il percorso del file kubeconfig

Per eseguire comandi sul server API Management, assicurati di disporre delle seguenti risorse:

  1. Individua il nome del server dell'API Management o chiedi all'amministratore della piattaforma (PA) qual è il nome del server.

  2. Accedi e genera il file kubeconfig per il server API Management se non ne hai uno.

  3. Utilizza il percorso per sostituire MANAGEMENT_API_SERVER{"</var>"}} in queste istruzioni.

Richiedere autorizzazioni e accesso

Per creare un'immagine personalizzata, devi disporre dell'accesso alle immagini VM a livello di progetto. Segui i passaggi indicati per l'amministratore IAM del progetto per assegnarti il ruolo Amministratore immagini di macchine virtuali del progetto (project-vm-image-admin) nel namespace del progetto in cui si trova la VM. Se utilizzi la console GDC o gcloud CLI per creare un'immagine, devi disporre anche del ruolo Amministratore macchina virtuale progetto (project-vm-admin) e del ruolo Visualizzatore progetto (project-viewer).

Creare un'immagine personalizzata

Questa sezione descrive come creare un'immagine personalizzata su una VM Linux.

Preparare la VM per un'immagine

Puoi creare un'immagine da un disco mentre è collegato a una VM in esecuzione. Tuttavia, l'immagine è più affidabile se metti la VM in uno stato in cui l'immagine deve essere acquisita.

Ridurre al minimo la scrittura di dati sul disco permanente

Utilizza uno dei seguenti processi per ridurre le scritture su disco. Arresta la VM oppure riduci al minimo le scritture sul disco:

  • Arresta la VM in modo che possa essere arrestata e smettere di scrivere dati sul disco permanente.

Se non puoi arrestare la VM prima di creare l'immagine, riduci al minimo le scritture sul disco e sincronizza il file system. Per ridurre al minimo le scritture sul disco permanente, segui questi passaggi:

  1. Metti in pausa le app o i processi del sistema operativo che scrivono dati sul disco permanente. Se necessario, esegui lo svuotamento dell'app sul disco. Altre app potrebbero avere procedure simili.
  2. Impedisci alle tue app di scrivere sul disco permanente.
  3. Esegui sudo sync.

Crea l'immagine

Segui questi passaggi per creare immagini disco da un disco permanente, anche mentre il disco è collegato a una VM:

Console

  1. Seleziona un progetto.

  2. Nel menu di navigazione, fai clic su Macchine virtuali > Immagini.

  3. Fai clic su Crea immagine.

  4. Inserisci un nome univoco per l'immagine. Il nome non deve contenere più di 35 caratteri.

  5. Inserisci una versione da aggiungere al nome dell'immagine.

  6. Nel campo Disco di origine, seleziona un disco.

  7. Nel campo Dimensione minima disco, inserisci una dimensione del disco.

  8. Inserisci una descrizione dell'immagine.

  9. Fai clic su Crea.

L'immagine viene visualizzata nell'elenco delle immagini.

API

  1. Elenca tutti gli oggetti VirtualMachineDisk:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. Seleziona un oggetto VirtualMachineDisk da utilizzare come disco di origine per la nuova immagine.

  3. Verifica se il disco della VM è collegato a una VM:

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

    Output di esempio che mostra un disco collegato a una VM:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. Controlla lo stato di esecuzione della VM. Se lo stato non è Stopped, arresta la VM e procedi con la creazione di VirtualMachineImage.
  4. Ottieni il size di VirtualMachineDisk per creare l'immagine:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. Crea un oggetto VirtualMachineImageImport nel server dell'API Management:

    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. Verifica che l'importazione dell'immagine sia terminata e che lo stato sia Ready:

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

    Al termine dell'importazione, lo stato dovrebbe essere simile al seguente:

    {
      "conditions": [
        {
          "lastTransitionTime": "",
          "message": "",
          "observedGeneration": 1,
          "reason": "ImportJobComplete",
          "status": "True",
          "type": "Ready"
        }
      ],
      "imageName": IMAGE_NAME
    }
    
  7. Verifica che l'immagine sia stata creata:

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

    Sostituisci le variabili utilizzando le seguenti definizioni.

    VariabileDefinizione
    MANAGEMENT_API_SERVER Il file kubeconfig del server API Management.
    PROJECT Il progetto GDC in cui creare l'immagine.
    DISK_NAME Il nome del disco di origine, ad esempio vm1-boot-disk.
    VM_IMAGE_IMPORT_NAME Il nome dell'importazione dell'immagine VM. Il nome non deve contenere più di 35 caratteri.
    IMAGE_NAME Il nome dell'immagine creata, ad esempio custom-image.
    OS_NAME Il nome del sistema operativo dell'immagine deve essere uno di questi tre:
    ubuntu-2004, windows-2019 o rhel-8.
    MINIMUM_DISK_SIZE La dimensione minima del disco nell'importazione dell'immagine VM, ad esempio 20G:
    minimumDiskSize, deve sempre essere maggiore o uguale alla dimensione del disco di avvio di origine.
    CREATED_IMAGE_NAME Il nome dell'immagine creata. Il nome dell'immagine creata deve essere univoco e non può essere un nome di immagine già esistente nel progetto.