Crea immagini Windows BYOL personalizzate


Per creare una VM Windows su Google Cloud, devi utilizzare un'immagine VM con Windows o Windows Server preinstallato. Google Cloud fornisce immagini pubbliche per le versioni di Windows Server di uso comune, ma queste immagini sono adatte solo per le licenze on demand. Per utilizzare la tua licenza Windows (BYOL), devi importare un'immagine esistente o creare un'immagine personalizzata.

Questa guida descrive come creare un'immagine personalizzata utilizzando gli stessi strumenti e gli stessi processi utilizzati da Google Cloud per creare le immagini pubbliche.

Per completare questa guida, hai bisogno di:

  • Un file ISO contenente i supporti per l'installazione di Windows o Windows Server.
  • Facoltativamente, uno o più pacchetti di aggiornamento di Windows (in formato .msu) da applicare all'immagine.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API di Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.

Informazioni sul processo di creazione

Per installare Windows da zero, un approccio comune è avviare un computer da un DVD o un file ISO contenente i file di installazione di Windows. A differenza di alcuni hypervisor on-premise, Compute Engine non consente l'avvio da un file ISO.

Per installare Windows da zero devi quindi adottare un approccio diverso, che prevede i seguenti passaggi:

  1. Crea un nuovo disco.
  2. Estrai l'immagine di Windows (install.wim dal supporto di installazione) sul disco.
  3. Aggiungi i driver necessari, configura l'installazione di Windows in modo che venga eseguita senza supervisione e rendi il disco avviabile.
  4. Lancia l'avvio dal nuovo disco per eseguire l'installazione di Windows.
  5. Installa software aggiuntivo, incluso l'agente del sistema operativo guest.
  6. Crea un'immagine dal disco.

Anziché eseguire questi passaggi manualmente, seguendo questa guida puoi utilizzare Cloud Build, lo strumento daisy e i workflow di riferimento disponibili su GitHub per automatizzare il processo.

daisy è uno strumento a riga di comando open source che consente di eseguire i workflow. I workflow vengono creati come file JSON e contengono una sequenza di passaggi. Ogni passaggio descrive un'operazione di Compute Engine, ad esempio la creazione di un disco o l'arresto di un'istanza VM. I workflow daisy sono quindi adatti per automatizzare i passaggi necessari per creare un'immagine Windows da zero.

I workflow daisy per la creazione di immagini Windows personalizzate creano due istanze VM temporanee. La prima istanza VM (con prefisso bootstrap) esegue i passaggi necessari per creare un disco di avvio. La seconda istanza VM (con prefisso install) esegue l'installazione di Windows e tutti i passaggi rimanenti.

Prepara il progetto per la creazione di immagini

Per impedire allo strumento daisy di interferire con l'infrastruttura o le istanze VM esistenti, crea un progetto dedicato per la creazione delle immagini:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

I passaggi successivi variano a seconda che utilizzi Windows o Linux sul computer locale:

Windows

  1. Sul computer locale, apri una finestra di Windows PowerShell.
  2. Inizializza una variabile:

    $PROJECT_ID = "PROJECT_ID"
    

    dove PROJECT_ID è l'ID progetto del progettoGoogle Cloud che hai creato nella sezione precedente.

  3. Inizializza un'altra variabile in modo che contenga il numero del progetto:

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    

Linux

  1. Apri una finestra del terminale sul computer locale.
  2. Inizializza una variabile:

    PROJECT_ID=PROJECT_ID
    

    dove PROJECT_ID è l'ID progetto del progettoGoogle Cloud che hai creato nella sezione precedente.

  3. Inizializza un'altra variabile in modo che contenga il numero del progetto:

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    

Carica i file di installazione

Ora raccogli tutti i file di installazione necessari per l'immagine personalizzata e caricali in un bucket Cloud Storage. Con l'archiviazione dei file in un bucket Cloud Storage, ti assicuri che i file siano accessibili per daisy e per le istanze VM temporanee che daisy utilizza per creare l'immagine.

  1. Sul computer locale, scarica i pacchetti di installazione richiesti:

  2. Crea un nuovo bucket Cloud Storage per archiviare i file di installazione:

    gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
    
  3. Assegna il ruolo Storage Object Viewer a Cloud Build in modo che possa leggere i file di installazione:

    gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role=roles/storage.objectViewer
    
  4. Carica il pacchetto di installazione di PowerShell:

    gcloud storage cp POWERSHELL_PACKAGE gs://$PROJECT_ID-media/PowerShell.msi
    

    dove POWERSHELL_PACKAGE è il percorso del pacchetto di installazione di PowerShell.

  5. Carica il pacchetto di installazione di .NET Framework:

    gcloud storage cp DOTNET_PACKAGE gs://$PROJECT_ID-media/dotnet-sdk.exe
    

    dove DOTNET_PACKAGE è il percorso del pacchetto di installazione di NET Framework.

  6. Carica il pacchetto di installazione di gcloud CLI:

    gcloud storage cp CLOUDSDK_PACKAGE gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
    

    dove CLOUDSDK_PACKAGE è il percorso del pacchetto di installazione di gcloud CLI.

  7. Carica il file ISO contenente i supporti di installazione di Windows:

    gcloud storage cp ISO gs://$PROJECT_ID-media/
    

    dove ISO è il nome del file ISO.

  8. Se vuoi, carica altri pacchetti di aggiornamento:

    gcloud storage cp UPDATE_DIR/*.msu gs://$PROJECT_ID-media/updates/
    

    dove UPDATE_DIR è la directory contenente i pacchetti di aggiornamento.

Ora puoi creare l'immagine personalizzata.

Crea l'immagine

L'esecuzione del workflow daisy per creare un'immagine personalizzata richiede fino a quattro ore. Anziché eseguire daisy localmente, ora crei una configurazione di Cloud Build per consentire a Cloud Build di eseguire il workflow in background.

  1. Sul computer locale, clona il repository Git contenente i workflow daisy per la creazione di immagini Windows:

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. Passa alla directory windows:

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. Nella directory windows, troverai una selezione di file con il suffisso .wf.json. Questi file contengono le definizioni del workflow daisy per le versioni di Windows di uso comune.

    Versione di Windows File di workflow
    Windows Server Core 2022 (64 bit) windows-server-2022-dc-core-uefi-byol.wf.json
    Windows Server 2019 (64 bit) windows-server-2019-dc-uefi-byol.wf.json
    Windows Server Core 2019 (64 bit) windows-server-2019-dc-core-uefi-byol.wf.json
    Windows Server 2016 (64 bit) windows-server-2016-dc-uefi-byol.wf.json
    Windows Server Core 2016 (64 bit) windows-server-2016-dc-core-uefi-byol.wf.json
    Windows 11 21H2 (64 bit) windows-11-21h2-ent-x64-uefi.wf.json
    Windows 11 22H2 (64 bit) windows-11-22h2-ent-x64-uefi.wf.json
    Windows 11 23H2 (64 bit) windows-11-23h2-ent-x64-uefi.wf.json
    Windows 10 21H2 (64 bit) windows-10-21h2-ent-x64-uefi.wf.json
    Windows 10 22H2 (64 bit) windows-10-22h2-ent-x64-uefi.wf.json

    Apri il file di workflow più simile alla versione di Windows che vuoi installare. Se necessario, modifica le impostazioni della versione di Windows (edition) e del codice licenza (product_key) nei file di workflow in modo che corrispondano ai supporti di installazione in uso.

    Se hai dubbi sul nome della versione corretta, apri un prompt di PowerShell elevato ed esegui i seguenti comandi per elencare tutte le versioni supportate dai tuoi supporti di installazione:

    $IsoFile = "ISO"
    
    $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile)
    
    $DriveLetter = ($Mount | Get-Volume).DriveLetter
    Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName
    
    Dismount-DiskImage -InputObject $Mount | Out-Null
    

    Sostituisci ISO con il percorso locale dell'immagine ISO.

  4. Nella directory windows, crea un nuovo file denominato cloudbuild.yaml e incolla il seguente codice:

    timeout: 14400s  # 4 hour timeout for entire build
    steps:
    - name: 'gcr.io/compute-image-tools/daisy'
      timeout: 14400s  # 4 hour timeout for build step
      waitFor: ['-']
      args:
        - -project=$PROJECT_ID
        - -zone=us-central1-a
        - -var:updates=gs://$PROJECT_ID-media/updates/
        - -var:pwsh=gs://$PROJECT_ID-media/PowerShell.msi
        - -var:dotnet48=gs://$PROJECT_ID-media/dotnet-sdk.exe
        - -var:cloudsdk=gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
        - -var:media=gs://$PROJECT_ID-media/ISO
        - WORKFLOW
    

    Sostituisci:

    • ISO: il nome del file ISO su Cloud Storage.
    • WORKFLOW: il nome del file di workflow corrispondente alla versione di Windows in uso.
    .
  5. Invia la build a Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    Il completamento della build può richiedere fino a quattro ore. Puoi monitorare lo stato della build nella console Google Cloud in Cloud Build > Cronologia.

    Cronologia di Cloud Build

Utilizza l'immagine personalizzata

Al termine della build, puoi trovare l'immagine BYOL personalizzata nella consoleGoogle Cloud in Compute Engine > Immagini.

Per differenziare più versioni della stessa immagine, il processo di build incorpora un timestamp nel nome dell'immagine, ad esempio windows-server-2019-dc-v1613488342. Inoltre, il processo associa l'immagine a una famiglia di immagini personalizzata, ad esempio windows-server-2019.

Per creare un'istanza VM che utilizza l'immagine BYOL personalizzata, devi eseguire il provisioning dell'istanza VM su un nodo single-tenant.

Risoluzione dei problemi

Se sospetti che il processo di build non sia riuscito o non stia procedendo, utilizza i seguenti approcci per diagnosticare la situazione:

  • Verifica di aver caricato i pacchetti di installazione e il file ISO corretti.
  • Verifica di aver selezionato un workflow corrispondente alla versione di Windows del file ISO.
  • Esamina il log di build in Cloud Build e controlla se sono presenti messaggi di errore.
  • Se la build sembra bloccata, controlla l'output della porta seriale dell'istanza VM creata dalla build e verifica la presenza di messaggi di errore.

Passaggi successivi