Creare immagini BYOL Windows 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 le stesse procedure utilizzati da Google Cloud per creare le immagini pubbliche.

Per completare questa guida, devi disporre di:

  • Un file ISO contenente i media di 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 è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

Informazioni sulla processo di compilazione

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 ipervisori on-premise, Compute Engine non consente di avviare da un file ISO.

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

  1. Creazione di un nuovo disco.
  2. Estrazione dell'immagine di Windows (install.wim dal supporto di installazione) sul disco.
  3. Aggiunta dei driver necessari, configurazione della configurazione di Windows in modo che venga eseguita senza supervisione e creazione del disco di avvio.
  4. Avvio dal nuovo disco per eseguire la configurazione di Windows.
  5. Installazione di software aggiuntivo, incluso l'agente del sistema operativo guest.
  6. Creazione di un'immagine dal disco.

Anziché eseguire questi passaggi manualmente, questa guida descrive come utilizzare Cloud Build, lo strumento daisy e i flussi di lavoro di riferimento che sono disponibili su GitHub per automatizzare il processo.

daisy è uno strumento a riga di comando open source che consente di eseguire i flussi di lavoro. Workflows 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 flussi di lavoro Daisy sono quindi adatti per automatizzare i passaggi necessari per creare un'immagine Windows da zero.

I flussi di lavoro in catena 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 la configurazione di Windows ed esegue tutti i passaggi rimanenti.

Prepara il progetto per la creazione di immagini

Per impedire allo strumento daisy di interferire con le istanze VM o con l'infrastruttura 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 tu 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 del progetto Google 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 del progetto Google 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. Se archivi i file in un bucket Cloud Storage, assicurati che siano accessibili a daisy e alle 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. Concedi il ruolo Visualizzatore oggetti Storage 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 della gcloud CLI.

  7. Carica il file ISO contenente i dati 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 flusso di lavoro 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 flusso di lavoro in background.

  1. Sul computer locale, clona il repository Git contenente i daisyworkflow 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 flusso di lavoro di Daisy per le versioni di Windows più utilizzate:

    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 flusso di lavoro più simile alla versione di Windows che vuoi installare. Se necessario, modifica le impostazioni della versione di Windows (edition) e della codice licenza (product_key) nei file di flusso di lavoro in modo che corrispondano ai tuoi supporti di installazione.

    Se hai dubbi sul nome della versione corretta, apri un prompt di PowerShell con privilegi elevati ed esegui i seguenti comandi per elencare tutte le versioni supportate dal tuo supporto 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 flusso di lavoro corrispondente alla versione di Windows in uso.
  5. Invia la compilazione a Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    Il completamento della compilazione può richiedere fino a quattro ore. Puoi monitorare lo stato della compilazione 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 console Google Cloud in Compute Engine > Immagini.

Per distinguere più versioni della stessa immagine, il processo di compilazione 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 compilazione 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 flusso di lavoro corrispondente alla versione Windows del file ISO.
  • Esamina il log di compilazione in Cloud Build e controlla se sono presenti messaggi di errore.
  • Se la compilazione sembra bloccata, controlla l'output della porta seriale dell'istanza VM creata dalla compilazione e cerca messaggi di errore.

Passaggi successivi