Questo tutorial mostra come gestire la complessità del controllo delle versioni durante la creazione di immagini che hanno come target più versioni di Windows Server. I container Windows Server hanno requisiti di compatibilità della versione che ne impediscono l'esecuzione su più versioni host di Windows Server. Tuttavia, Docker su Windows Server supporta immagini di container multi-arch (o multipiattaforma) che possono essere eseguite su più versioni di Windows Server.
Con le immagini multi-arch, puoi eseguire l'upgrade dei pool di nodi di Google Kubernetes Engine (GKE)
Windows Server alla versione di Windows Server che preferisci
senza ricreare l'immagine e modificare le specifiche dei pod. Ad esempio:
- GKE versione 1.15 supporta Windows Server 1809
- GKE versione 1.16 supporta Windows Server 1909
Per eseguire automaticamente l'upgrade da una versione di GKE a una versione successiva, devi creare immagini multi-archetto per i tuoi carichi di lavoro Windows. La creazione di un'immagine multi-arch richiede la creazione di un'immagine per ogni versione di Windows Server e la creazione di un manifest che faccia riferimento a queste immagini per ogni versione di Windows Server. Puoi creare le immagini manualmente se vuoi il controllo completo sul processo di creazione e compilazione delle immagini. In alternativa, puoi usare Cloud Build per creare automaticamente le immagini multi-archetto di Windows Server.
Obiettivi
In questo tutorial imparerai a creare immagini multi-arch 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) e SAC (Canale semestrale).
- Creare una VM Windows Server.
- Crea un manifest ed eseguine il push al registro.
Crea le immagini utilizzando Cloud Build:
- Prepara il tuo ambiente creando un progetto, abilitando le API e concedendo le autorizzazioni.
- Creare un'applicazione, Dockerfile e 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.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina 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 file binari di Windows Server.
- Questo tutorial utilizza Artifact Registry come repository. Assicurati di aver creato il repository Docker.
Creazione manuale di immagini multi-arcate
La creazione manuale di immagini multi-archetto offre la flessibilità di creare un'immagine che includa tutte le versioni di Windows Server necessarie. Per creare manualmente un'immagine multi-arcata:
- Crea un'immagine Docker LTSC 2019 ad arco singolo. Per informazioni dettagliate 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 LTSC 2022 ad arco singolo. Ad esempio,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022
- Crea un'immagine Docker SAC 20H2 ad arco singolo. Ad esempio,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-20h2
. - Creare una VM Windows Server, ad esempio la versione 20H2. Consulta la Guida rapida all'utilizzo di una VM Windows Server.
- Utilizza RDP per la connessione alla VM.
- Apri una finestra di PowerShell per eseguire i comandi nei passaggi successivi.
Attiva la funzionalità sperimentale
docker manifest
. Un manifest Docker è un elenco di immagini di cui eseguire il push a 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 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-20h2
Esegui il push del manifest dell'immagine multi-arch appena creato nel tuo repository Artifact Registry:
docker manifest push ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0
Per assicurarti che l'immagine multi-arch sia stata creata e ne sia stata eseguita il push, vai a
REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo
e fai clic sull'immagine. All'interno vedrai le 3 immagini:foo:1.0-2019
foo:1.0-2022
foo:1.0-20h2
foo:1.0
Ora puoi fare riferimento all'immagine multi-arcata REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0
nelle specifiche del pod. In questo modo, potrai utilizzare in modo sicuro l'upgrade automatico per i tuoi pool di nodi Windows GKE.
Creazione di immagini multi-arch con gke-windows-builder di Cloud Build
Per semplificare i passaggi di creazione manuali, puoi utilizzare gke-windows-builder basato su gke-windows-builder del sistema operativo Android. Puoi utilizzare gke-windows-builder con Cloud Build per creare automaticamente le immagini multi-arch Windows Server. GKE aggiorna il builder per includere le nuove versioni SAC e 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 è sostituita da un container Docker che esegue i comandi per te all'interno di Cloud Build.
Per capire meglio come funziona il builder, segui questo esempio per creare un'immagine multi-arcata "Hello World". Questi passaggi possono essere eseguiti su server Linux o Windows.
Preparazione dell'ambiente
Per preparare l'ambiente, segui questi passaggi:
- Crea una directory dell'area di lavoro sulla tua macchina di lavoro, ad esempio:
~/gke-windows-builder/hello-world
. - Crea o seleziona un progetto per questo tutorial.
- Assicurati 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 risultanti immagini container multi-arch vengono inviate tramite push ad Artifact Registry. Compute Engine è necessario per consentire al builder di creare e gestire le VM Windows Server.
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \ artifactregistry.googleapis.com cloudbuild.googleapis.com
Concedi i seguenti ruoli IAM (Identity and Access Management) al tuo account di servizio Cloud Build utilizzando Google Cloud CLI:
Imposta variabili:
export PROJECT=$(gcloud info --format='value(config.project)') export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com
Assegna i ruoli. Questi ruoli sono necessari al builder per creare le VM Windows Server, copiare l'area di lavoro 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'
Aggiungi una regola firewall denominata
allow-winrm-ingress
per 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=INGRESS
Crea 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à di Artifact Registry valida.
Creazione del programma binario hello.exe nell'area di lavoro
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-arch
Il file
hello.go
visualizza le parole "Hello World":Genera il programma binario
hello.exe
:GOOS=windows go build hello.go
Vedrai il programma binario hello.exe
nell'area di lavoro.
Creazione di un Dockerfile e di file nell'area di lavoro
In questa sezione userai un Dockerfile
per creare ogni immagine del server Windows
a singola arco, quindi utilizzerai un file di build per attivare Cloud Build. La build combina le immagini ad arco singola in un'immagine multi-arcata.
Dockerfile
è un documento di testo che contiene istruzioni per consentire a Docker di creare un'immagine. gke-windows-builder sostituisceWINDOWS_VERSION
con una versione specifica di Windows Server per cui 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 che contiene
Dockerfile
, il filecloudbuild.yaml
è il file di configurazione della build. Sostituisci <REPOSITORY> e <REGISTRY_REGION> con il nome e la regione del repository di Artifact Registry che hai creato nel passaggio precedente. In fase di creazione, Cloud Build sostituisce automaticamente$PROJECT_ID
con l'ID progetto.
Creazione dell'immagine in corso...
Ora puoi creare l'immagine e visualizzare i log per verificare una build riuscita.
Per creare l'immagine, esegui questo comando:
gcloud builds submit --config=cloudbuild.yaml .
Vedrai log come nell'esempio seguente. L'ultima riga del log indica 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 ne hai eseguito il push
ad Artifact Registry all'indirizzo REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest
.
Deployment dell'immagine
Per eseguire il deployment dell'immagine Windows multi-archetto su un cluster, consulta la pagina relativa al 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 sono descritti alcuni flag per comportamenti comuni, ma non si tratta di un elenco esaustivo. Per vedere l'elenco completo dei flag supportati da gke-windows-builder, esegui questo 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 le quali creare la build utilizzando il flag --versions
:
- --versions
- '20H2,ltsc2019'
Se l'area di lavoro ha molti file, la build dell'immagine sarà più affidabile se configuri il builder in modo che copi l'area di lavoro tramite Cloud Storage anziché tramite 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 di Windows Builder in un progetto di servizio VPC condiviso, utilizza questi flag che controllano la configurazione della rete dell'istanza:
- --subnetwork-project
- 'shared-vpc-host-project'
- --subnetwork
- 'host-project-subnet-shared-with-service-project'
Esegui la pulizia
Al termine del tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che smettano di utilizzare la quota e smettano di essere addebitati. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Eliminazione dell'immagine in corso...
Per eliminare le immagini multiarch-helloworld
su Artifact Registry, consulta Eliminazione delle immagini.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud, 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 del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
Esplora altri tutorial su Kubernetes Engine.
Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.