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
- Se vuoi utilizzare gli esempi a riga di comando in questa guida:
- Installa o aggiorna l'ultima versione di Google Cloud CLI.
- Imposta una regione e una zona predefinite.
- Se vuoi utilizzare gli esempi di API in questa guida, configura l'accesso API.
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:
- Creazione di un nuovo disco in corso...
- Estrazione dell'immagine Windows (
install.wim
dal supporto di installazione) sul disco. - Aggiunta dei driver necessari, configurazione della configurazione di Windows in modo che venga eseguita in automatico e rendere il disco avviabile.
- Avvio dal nuovo disco per l'esecuzione della configurazione di Windows.
- Installazione di software aggiuntivo, incluso l'agente sistema operativo guest.
- 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:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Abilita l'API Compute Engine, l'API Cloud Build e l'API Cloud Storage.
I passaggi successivi variano a seconda che tu utilizzi Windows o Linux sul computer locale:
Windows
- Apri una finestra di Windows PowerShell sul computer locale.
Inizializza una variabile:
$PROJECT_ID = "
PROJECT_ID
"dove
PROJECT_ID
è l'ID progetto del progetto Cloud che hai creato nella sezione precedente.Inizializza un'altra variabile in modo che contenga il numero del progetto:
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
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
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
- Apri una finestra del terminale sul computer locale.
Inizializza una variabile:
PROJECT_ID=
PROJECT_ID
dove
PROJECT_ID
è l'ID progetto del progetto Cloud che hai creato nella sezione precedente.Inizializza un'altra variabile in modo che contenga il numero del progetto:
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
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
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.
Sul computer locale, scarica i pacchetti di installazione richiesti:
Crea un nuovo bucket Cloud Storage per archiviare i file di installazione:
gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
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
Carica il pacchetto di installazione di PowerShell:
gsutil cp
POWERSHELL_PACKAGE
gs://$PROJECT_ID-media/PowerShell.msidove
POWERSHELL_PACKAGE
è il percorso del pacchetto di installazione di PowerShell.Carica il pacchetto di installazione di .NET Framework:
gsutil cp
DOTNET_PACKAGE
gs://$PROJECT_ID-media/dotnet-sdk.exedove
DOTNET_PACKAGE
è il percorso del pacchetto di installazione di NET Framework.Carica il pacchetto di installazione dell'interfaccia a riga di comando gcloud:
gsutil cp
CLOUDSDK_PACKAGE
gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exedove
CLOUDSDK_PACKAGE
è il percorso del pacchetto di installazione dell'interfaccia a riga di comando gcloud.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.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.
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
Passa alla directory
windows
:cd compute-image-tools/daisy_workflows/image_build/windows/
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-NullSostituisci
ISO
con il percorso locale dell'immagine ISO.Nella directory
windows
, crea un nuovo file denominatocloudbuild.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.
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.
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
- Scopri di più sullo strumento Margherita.
- Scopri di più sui flussi di lavoro daisy per la creazione di immagini.
- Scopri come aggiungere licenze esistenti a Compute Engine.
- Scopri le best practice per lavorare con le famiglie di immagini.