Creare immagini BYOL di Windows personalizzate


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

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

Per completare questa guida, hai bisogno di:

  • Un file ISO contenente il supporto 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

Comprendi il processo di compilazione

Per installare Windows da zero, un approccio comune consiste nell'avviare un computer da un file DVD o 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 seguire un approccio diverso che prevede i seguenti passaggi:

  1. Creazione di un nuovo disco in corso...
  2. Estrazione dell'immagine Windows (install.wim dal supporto di installazione) sul disco.
  3. Aggiunta dei driver necessari, configurazione della configurazione di Windows in modo che venga eseguita in automatico e rendere il disco avviabile.
  4. Avvio dal nuovo disco per l'esecuzione della configurazione di Windows.
  5. Installazione di software aggiuntivo, incluso l'agente sistema operativo guest.
  6. Creazione di un'immagine dal disco.

Invece di eseguire manualmente questi passaggi, questa guida descrive il modo in cui puoi utilizzare Cloud Build, lo strumento daisy e i flussi di lavoro di riferimento disponibili su GitHub per automatizzare il processo.

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

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

Prepara il progetto per la creazione delle immagini

Per impedire che lo strumento Margherita interferisca con le istanze o l'infrastruttura VM esistenti, crea un progetto dedicato per la creazione di immagini:

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita l'API Compute Engine, l'API Cloud Build e l'API Cloud Storage.

    Abilita le API

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

Windows

  1. Apri una finestra di Windows PowerShell sul computer locale.
  2. Inizializza una variabile:

    $PROJECT_ID = "PROJECT_ID"
    

    dove PROJECT_ID è l'ID progetto del progetto 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`)
    
  4. Disattiva le regole firewall predefinite per l'accesso RDP e SSH:

    gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled
    gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
    
  5. Concedi il ruolo Amministratore istanze Compute e Utente account di servizio a Cloud Build in modo che Cloud Build possa creare le istanze VM temporanee necessarie per creare immagini:

    gcloud projects add-iam-policy-binding $PROJECT_ID `
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com `
       --role roles/compute.instanceAdmin.v1
    gcloud projects add-iam-policy-binding $PROJECT_ID `
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com `
       --role roles/iam.serviceAccountUser
    

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 progetto 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\)`
    
  4. Disattiva le regole firewall predefinite per l'accesso RDP e SSH:

    gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled
    gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
    
  5. Concedi il ruolo Amministratore istanze Compute e Utente account di servizio a Cloud Build in modo che Cloud Build possa creare le istanze VM temporanee necessarie per creare immagini:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
       --role roles/compute.instanceAdmin.v1
    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    

Carica i file di installazione

Ora raccogli tutti i file di installazione richiesti per l'immagine personalizzata e li carichi in un bucket Cloud Storage. Se archivi i file in un bucket Cloud Storage, ti assicuri che siano accessibili da daisy e dalle istanze VM temporanee utilizzate da daisy 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:

    gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
    
  3. Concedi il ruolo Visualizzatore oggetti Storage a Cloud Build in modo che possa leggere i file di installazione:

    gsutil iam ch serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com:objectViewer  gs://$PROJECT_ID-media
    
  4. Carica il pacchetto di installazione di PowerShell:

    gsutil 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:

    gsutil 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 dell'interfaccia a riga di comando gcloud:

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

    dove CLOUDSDK_PACKAGE è il percorso del pacchetto di installazione dell'interfaccia a riga di comando gcloud.

  7. Carica il file ISO contenente il supporto di installazione di Windows:

    gsutil cp ISO gs://$PROJECT_ID-media/
    

    dove ISO è il nome del file ISO.

  8. Se vuoi, puoi caricare altri pacchetti di aggiornamento:

    gsutil 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. Invece di eseguire daisy in locale, ora puoi creare una configurazione di Cloud Build in modo da consentire a Cloud Build di eseguire il flusso di lavoro in background.

  1. Sul computer locale, clona il repository Git contenente i flussi di lavoro 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 trovi 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 Windows File del flusso di lavoro
    Windows Server 2019 (a 64 bit) windows-server-2019-dc-uefi-byol.wf.json
    Windows Server Core 2019 (a 64 bit) windows-server-2019-dc-core-uefi-byol.wf.json
    Windows Server 2016 (a 64 bit) windows-server-2016-dc-uefi-byol.wf.json
    Windows Server Core 2016 (a 64 bit) windows-server-2016-dc-core-uefi-byol.wf.json
    Windows 10 (a 64 bit) windows-10-20h2-ent-x64-uefi-byol.wf.json

    Apri il file del flusso di lavoro che più si avvicina alla versione di Windows che vuoi installare. Se necessario, modifica le impostazioni di Windows Edition (edition) e del codice licenza (product_key) nei file del flusso di lavoro in modo che corrispondano ai supporti di installazione.

    Se hai dubbi sul nome della versione corretta, apri una richiesta di PowerShell elevata ed esegui i comandi seguenti per elencare tutte le versioni supportate dal 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
      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: nome del file ISO su Cloud Storage.
    • WORKFLOW: nome del file del flusso di lavoro corrispondente alla versione di Windows che stai utilizzando.
  5. Invia la build a Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    Il completamento della build richiede circa quattro ore. Puoi monitorare lo stato della build in Google Cloud Console nella sezione Cloud Build > History.

    Cronologia di Cloud Build

Utilizzare l'immagine personalizzata

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

Per aiutare a distinguere tra 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.

Risolvere i problemi

Se sospetti che il processo di compilazione non sia riuscito o non sia in corso, 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 che corrisponda alla versione 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, esamina l'output della porta seriale dell'istanza VM creata dalla build e controlla se sono presenti messaggi di errore.

Passaggi successivi