Con le immagini multi-arch, puoi eseguire l'upgrade dei pool di nodi Windows Server di Google Kubernetes Engine (GKE) alla versione di Windows Server che preferisci senza ricompilare l'immagine e modificare le specifiche dei pod. Ad esempio:
- La versione 1.15 di GKE supporta Windows Server 1809
- La versione 1.16 di GKE supporta Windows Server 1909
Per eseguire automaticamente l'upgrade da una versione di GKE a una versione successiva, devi creare immagini multi-arch per i carichi di lavoro Windows. La creazione di un'immagine multi-arch prevede la creazione di un'immagine per ogni versione di Windows Server e poi la creazione di un manifest che fa riferimento a queste immagini per ogni versione di Windows Server. Puoi creare le immagini manualmente se vuoi avere il controllo completo sul processo di creazione e compilazione delle immagini. In alternativa, puoi utilizzare Cloud Build per creare automaticamente le immagini multi-arch di Windows Server.
Obiettivi
In questo tutorial imparerai a creare immagini multi-arch di Windows Server manualmente o utilizzando Cloud Build.Crea le immagini manualmente:
- Crea due immagini Docker con versioni o tipi diversi di Windows Server, ad esempio Long-Term Servicing Channel (LTSC) 2019 e LTSC 2022.
- Crea una VM Windows Server.
- Crea un manifest ed esegui il push nel registro.
Crea le immagini utilizzando Cloud Build:
- Prepara l'ambiente creando un progetto, abilitando le API e concedendo le autorizzazioni.
- Crea un'applicazione, i Dockerfile e i file di build.
- Esegui un comando per creare l'immagine.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:- Installa Google Cloud CLI per eseguire i comandi
gcloud. - Installa Docker per creare i container.
- Installa Go per creare i file binari di Windows Server.
- Questo tutorial utilizza Artifact Registry come repository. Assicurati di aver creato il repository Docker.
Creazione manuale di immagini multi-arch
La creazione manuale di immagini multi-arch ti offre la flessibilità di creare un'immagine che includa tutte le versioni di Windows Server di cui hai bisogno. Per creare manualmente un'immagine multi-arch:
- Crea un'immagine Docker a singola architettura LTSC 2019. Per maggiori dettagli
sulla creazione di immagini Docker, consulta
Eseguire il deployment di un'applicazione Windows Server.
Ad esempio,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2019. - Crea un'immagine Docker a singola architettura LTSC 2022. Ad esempio,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022 - Crea una VM Windows Server, ad esempio la versione 20H2. Consulta la Guida rapida all'utilizzo di una VM Windows Server.
- Utilizza RDP per connetterti alla VM.
- Apri una finestra di PowerShell per eseguire i comandi nei passaggi successivi.
Abilita la funzionalità sperimentale
docker manifest. Un manifest Docker è un elenco di immagini da eseguire il push in un registro:PS C:\> $env:DOCKER_CLI_EXPERIMENTAL = 'enabled'Crea il manifest multi-arch:
docker manifest create ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2019 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2022 `Esegui il push del manifest dell'immagine multi-arch appena creato nel repository Artifact Registry:
docker manifest push ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0Per assicurarti che l'immagine multi-arch sia stata creata ed eseguita correttamente, vai a
REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/fooe fai clic sull'immagine. Vedrai le tre immagini all'interno:foo:1.0-2019foo:1.0-2022foo:1.0-20h2foo:1.0
Ora puoi fare riferimento all'immagine multi-arch REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 nelle
specifiche dei pod. In questo modo puoi utilizzare in sicurezza l'upgrade automatico per i pool di nodi Windows di GKE.
Creazione di immagini multi-arch utilizzando gke-windows-builder di Cloud Build
Per semplificare i passaggi di creazione manuale, puoi utilizzare gke-windows-builder basato su gke-windows-builder OSS. Puoi utilizzare gke-windows-builder con Cloud Build per creare automaticamente le immagini multi-arch di Windows Server. GKE aggiorna il builder in modo da includere le nuove versioni LTSC di Windows supportate quando vengono rilasciate. Un altro vantaggio dell'utilizzo del builder è che non devi creare la tua VM Windows con PowerShell per creare le immagini. La VM Windows viene sostituita da un container Docker che esegue i comandi per te all'interno di Cloud Build.
Per aiutarti a capire come funziona il builder, segui questo esempio per creare un'immagine multi-arch "Hello World". Questi passaggi possono essere eseguiti su server Linux o Windows.
Preparazione dell'ambiente
Per preparare l'ambiente, completa i seguenti passaggi:
- Crea una directory di workspace sulla tua macchina di lavoro, ad esempio:
~/gke-windows-builder/hello-world. - Crea o seleziona un progetto per questo tutorial.
- Verifica che la fatturazione sia abilitata per il tuo progetto.
Abilita le API Compute Engine, Cloud Build e Artifact Registry per il tuo progetto. gke-windows-builder viene richiamato utilizzando Cloud Build e le immagini container multi-arch risultanti vengono sottoposte a push in Artifact Registry. Compute Engine è necessario per il builder per creare e gestire le VM Windows Server.
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \ artifactregistry.googleapis.com cloudbuild.googleapis.comConcedi i seguenti ruoli Identity and Access Management (IAM) al tuo account di servizio Cloud Build utilizzando Google Cloud CLI:
Imposta le variabili:
export PROJECT=$(gcloud info --format='value(config.project)') export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.comAssegna i ruoli. Questi ruoli sono necessari al builder per creare le VM Windows Server, copiare il workspace in un bucket Cloud Storage, configurare le reti per creare l'immagine Docker ed eseguire il push dell'immagine risultante in Artifact Registry:
gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.instanceAdmin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/iam.serviceAccountUser' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.networkViewer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/storage.admin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/artifactregistry.writer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/cloudbuild.builds.editor'
Aggiungi una regola firewall denominata
allow-winrm-ingressper consentire a WinRM di connettersi alle VM Windows Server per eseguire una build Docker:gcloud compute firewall-rules create allow-winrm-ingress --allow=tcp:5986 --direction=INGRESSCrea un repository Docker in Artifact Registry per il tuo progetto. Se non hai mai utilizzato i repository Docker in Artifact Registry, completa prima la Guida rapida per Docker. Esegui questo comando per creare il repository:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker --location=REGISTRY_REGION \ --description="Docker repository"Sostituisci quanto segue:
REPOSITORY: un nome comewindows-multi-arch-images.REGISTRY_REGION: una località Artifact Registry valida.
Creazione del file binario hello.exe nel workspace
Per questo tutorial, crea una semplice applicazione "Hello World" scritta in Go. Il codice dell'app di esempio è su GitHub.
Clona il repository contenente il codice campione per questo tutorial sulla tua macchina locale utilizzando i seguenti comandi:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/windows/windows-multi-archIl file
hello.gostampa le parole "Hello World":Genera il file binario
hello.exe:GOOS=windows go build hello.go
Vedrai il file binario hello.exe nel workspace.
Creazione di un Dockerfile e di file di build nel workspace
In questa sezione utilizzerai un Dockerfile per creare ogni immagine Windows Server a singola architettura e poi un file di build per attivare Cloud Build. La build combina le immagini a singola architettura in un'immagine multi-arch.
Dockerfileè un documento di testo che contiene le istruzioni per Docker per creare un'immagine. gke-windows-builder sostituisceWINDOWS_VERSIONcon una versione specifica di Windows Server per creare l'immagine. Ad esempio, il builder eseguiràdocker build -t multi-arch-helloworld:latest_20h2 --build-arg WINDOWS_VERSION=20H2 .su Windows Server 20H2.Nella stessa directory contenente il
Dockerfile, il filecloudbuild.yamlè il file di configurazione della build. Sostituisci <REPOSITORY> e <REGISTRY_REGION> con il nome e la regione del repository Artifact Registry che hai creato nel passaggio precedente. Al momento della build, Cloud Build sostituisce automaticamente$PROJECT_IDcon l'ID del tuo progetto.
Crea l'immagine
Ora puoi creare l'immagine e visualizzare i log per verificare che la build sia riuscita.
Per creare l'immagine, esegui il comando seguente:
gcloud builds submit --config=cloudbuild.yaml .Verranno visualizzati log simili all'esempio seguente. L'ultima riga del log mostra che la build è riuscita:
Creating temporary tarball archive of 2 file(s) totalling 492 bytes before compression. Uploading tarball of [.] to [gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz] Created [https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds/ec333452-1301-47e8-90e2-716aeb2f5650]. Logs are available at [https://console.cloud.google.com/cloud-build/builds/ec333452-1301-47e8-90e2-716aeb2f5650?project=840737568665]. ------------------------ REMOTE BUILD OUTPUT--------------------------------------- ... ... Created manifest list REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest sha256:3ecbbc9f5144f358f81f7c7f1a7e28f069c98423d59c40eaff72bf184af0be02 2020/09/14 11:34:25 Instance: 35.184.178.49 shut down successfully PUSH DONE ----------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS ec333452-1301-47e8-90e2-716aeb2f5650 2020-09-14T11:21:43+00:00 12M43S gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz - SUCCESS
Hai appena creato l'immagine utilizzando il file di configurazione della build e hai eseguito il push dell'
immagine in Artifact Registry all'indirizzo REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest.
Esegui il deployment dell'immagine
Per eseguire il deployment dell'immagine Windows multi-arch su un cluster, consulta Eseguire il deployment di un'applicazione Windows Server per scoprire come eseguire il deployment dell'immagine.
Utilizzo avanzato di gke-windows-builder
Puoi personalizzare il comportamento di gke-windows-builder aggiungendo flag alla sezione args del file di configurazione della build cloudbuild.yaml. In questa sezione vengono descritti alcuni flag per i comportamenti comuni, ma questo non è un elenco esaustivo. Per
visualizzare l'elenco completo dei flag supportati da gke-windows-builder, esegui il seguente
comando su un server Linux o in Cloud
Shell:
docker run -it us-docker.pkg.dev/gke-windows-tools/docker-repo/gke-windows-builder:latest --help
Per velocizzare le build, puoi utilizzare un tipo di macchina più grande per le istanze Windows:
- --machineType
- 'n1-standard-8'
Anziché creare l'immagine per tutte le versioni di Windows supportate da GKE, puoi scegliere versioni specifiche di Windows Server per la creazione utilizzando il flag --versions:
- --versions
- '20H2,ltsc2019'
Se il workspace contiene molti file, la creazione dell'immagine sarà più affidabile se configuri il builder in modo che copi il workspace tramite Cloud Storage anziché WinRM.
Crea un bucket nel tuo progetto, ad esempio
gs://{your project}_builder, quindi imposta il flag --workspace-bucket:
- --workspace-bucket
- '{your project}_builder'
Per eseguire le istanze del builder Windows in un progetto di servizio VPC condiviso, utilizza questi flag che controllano la configurazione di rete dell'istanza:
- --subnetwork-project
- 'shared-vpc-host-project'
- --subnetwork
- 'host-project-subnet-shared-with-service-project'
Libera spazio
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che non utilizzino più la quota generando addebiti. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.
Elimina l'immagine
Per eliminare le immagini multiarch-helloworld in Artifact Registry, consulta Eliminare le immagini.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
Esplora altri tutorial su Kubernetes Engine.
Esplora architetture, diagrammi e best practice di riferimento su Google Cloud. Consulta il nostro Cloud Architecture Center.