Esegui il deployment di un'app in un'immagine container su un cluster GKE
Questa pagina mostra come:
- Crea un'app Hello World.
- Creare un pacchetto con l'app in un'immagine container utilizzando Cloud Build.
- Crea un cluster in Google Kubernetes Engine (GKE).
- Eseguire il deployment dell'immagine container nel cluster.
L'esempio è disponibile in diverse lingue, ma puoi utilizzare altre lingue oltre a quelle mostrate.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Aiuto:
Prima di iniziare
- 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.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
kubectl
viene utilizzato per gestire Kubernetes, il sistema di orchestrazione dei cluster utilizzato da GKE. Puoi installarekubectl
utilizzandogcloud
:gcloud components install kubectl
Scrittura dell'app di esempio
Per istruzioni sulla creazione di un'app Hello World eseguita su GKE, fai clic sulla tua lingua:
Go
Crea una nuova directory denominata
helloworld-gke
e modifica la directory al suo interno:mkdir helloworld-gke cd helloworld-gke
Crea un nuovo modulo denominato
example.com/helloworld
:go mod init example.com/helloworld
Crea un nuovo file denominato
helloworld.go
e incolla il seguente codice al suo interno:Questo codice crea un server web in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completa e pronta per essere pacchettizzata in un container Docker, poi caricata su Artifact Registry.
Node.js
Crea una nuova directory denominata
helloworld-gke
e passa a questa directory:mkdir helloworld-gke cd helloworld-gke
Crea un file
package.json
con il seguente contenuto:Nella stessa directory, crea un file
index.js
e copia le seguenti righe in questo file:Questo codice crea un server web in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completa e pronta per essere pacchettizzata in un container Docker e caricata su Artifact Registry.
Python
Crea una nuova directory denominata
helloworld-gke
e passa a questa directory:mkdir helloworld-gke cd helloworld-gke
Crea un file denominato
app.py
e incolla il codice seguente in questo file:
Java
Creare un'app Spring Boot.
Installa Java SE 8 o versione successiva JDK e cURL. Java SE e cURL sono necessari solo per creare il nuovo progetto web nel passaggio successivo. Il Dockerfile, descritto in seguito, carica tutte le dipendenze nel container.
Dal terminale, crea un nuovo progetto web vuoto:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=1.8 \ -d type=maven-project \ -d bootVersion=2.6.6 \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld-gke \ -o helloworld-gke.zip unzip helloworld-gke.zip cd helloworld-gke
Ora hai un nuovo progetto Spring Boot in
helloworld-gke
.Nel file
src/main/java/com/example/helloworld/HelloworldApplication.java
, aggiorna la classeHelloworldApplication
aggiungendo@RestController
per gestire il mapping/
.Questo codice crea un server web in ascolto sulla porta definita dalla variabile di ambiente
PORT
.
La tua app è completa e pronta per essere pacchettizzata in un container Docker, poi caricata su Artifact Registry.
C#
Installa l'SDK.NET. L'SDK .NET è necessario solo per creare il nuovo progetto web nel passaggio successivo. L'elemento
Dockerfile
, descritto in seguito, carica tutte le dipendenze nel container.Dal terminale, crea un nuovo progetto web vuoto:
dotnet new web -o helloworld-gke
Cambia la directory in
helloworld-gke
.cd helloworld-gke
Aggiorna
Program.cs
per l'ascolto sulla porta8080
:
La tua app è completa e pronta per essere pacchettizzata in un container Docker, poi caricata su Artifact Registry.
PHP
Crea una nuova directory denominata
helloworld-gke
e passa a questa directory:mkdir helloworld-gke cd helloworld-gke
Crea un file denominato
index.php
e incolla il codice seguente in questo file:
La tua app è completa e pronta per essere pacchettizzata in un container Docker, poi caricata su Artifact Registry.
Containerizzazione di un'app con Cloud Build
Per containerizzare l'app di esempio, crea un nuovo file denominato
Dockerfile
nella stessa directory dei file di origine e copia il contenuto seguente:Go
Node.js
Aggiungi un altro file
.dockerignore
per assicurarti che i file locali non influiscano sul processo di compilazione del container:Python
Aggiungi un file
.dockerignore
per assicurarti che i file locali non influiscano sul processo di compilazione del container:Java
C#
Aggiungi un file
.dockerignore
per assicurarti che i file locali non influiscano sul processo di compilazione del container:PHP
Aggiungi un file
.dockerignore
per assicurarti che i file locali non influiscano sul processo di compilazione del container:Recupera il tuo ID progetto Google Cloud:
gcloud config get-value project
In questa guida rapida, archivierai il container in Artifact Registry e ne eseguirai il deployment nel tuo cluster dal registry. Esegui questo comando per creare un repository denominato
hello-repo
nella stessa località del cluster:gcloud artifacts repositories create hello-repo \ --project=PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Sostituisci i seguenti valori:
PROJECT_ID
è l'ID del tuo progetto Google Cloud
Crea la tua immagine container utilizzando Cloud Build, che è simile all'esecuzione di
docker build
edocker push
, ma la build avviene su Google Cloud:gcloud builds submit \ --tag us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke .
L'immagine è archiviata in Artifact Registry.
Crea un cluster GKE
Un cluster GKE è un insieme gestito di macchine virtuali di Compute Engine che operano come un singolo cluster GKE.
Crea il cluster.
gcloud container clusters create-auto helloworld-gke \ --location us-central1
Verifica di avere accesso al cluster. Il seguente comando elenca i nodi nel tuo cluster di container che sono in esecuzione e indica che hai accesso al cluster.
kubectl get nodes
Se riscontri errori, consulta la guida alla risoluzione dei problemi di Kubernetes.
Deployment in GKE
Per eseguire il deployment dell'app nel cluster GKE che hai creato, devi avere due oggetti Kubernetes.
- Un Deployment per definire l'app.
- Un Servizio per definire la modalità di accesso all'app.
Eseguire il deployment di un'app
L'app ha un server frontend che gestisce le richieste web. Puoi definire le risorse cluster necessarie per eseguire il frontend in un nuovo file denominato deployment.yaml
. Queste risorse sono descritte come un deployment. Puoi utilizzare i deployment per creare e aggiornare una ReplicaSet
e i pod associati.
Crea il file
deployment.yaml
nella stessa directory degli altri file e copia i seguenti contenuti. Sostituisci i seguenti valori nel file:$GCLOUD_PROJECT
è l'ID progetto Google Cloud:$LOCATION
è la località del repository, ad esempious-central1
.
Esegui il deployment della risorsa nel cluster:
kubectl apply -f deployment.yaml
Monitora lo stato delldeployment:
kubectl get deployments
Il deployment è completo quando tutti i deployment
AVAILABLE
sonoREADY
.NAME READY UP-TO-DATE AVAILABLE AGE helloworld-gke 1/1 1 1 20s
Se il deployment presenta un errore, esegui di nuovo
kubectl apply -f deployment.yaml
per aggiornarlo con eventuali modifiche.Una volta completato il deployment, puoi vedere i pod creati dal deployment:
kubectl get pods
Esegui il deployment di un servizio
I servizi forniscono un singolo punto di accesso a un insieme di pod. Sebbene sia possibile accedere a un singolo pod, i pod sono temporanei e sono accessibili in modo affidabile solo tramite un indirizzo di servizio. Nell'app Hello World, il servizio "hello" definisce un bilanciatore del carico per accedere ai pod hello-app
da un singolo indirizzo IP. Questo servizio è definito nel file service.yaml
.
Crea il file
service.yaml
nella stessa directory degli altri file di origine con i seguenti contenuti:I pod vengono definiti separatamente dal servizio che li utilizza. Kubernetes utilizza le etichette per selezionare i pod che un servizio gestisce. Con le etichette puoi avere un servizio che si rivolge ai pod di diversi set di repliche e avere più servizi che puntano a un singolo pod.
Crea il servizio Hello World:
kubectl apply -f service.yaml
Recupera l'indirizzo IP esterno del servizio:
kubectl get services
L'allocazione dell'indirizzo IP può richiedere fino a 60 secondi. L'indirizzo IP esterno è riportato nella colonna
EXTERNAL-IP
per il serviziohello
.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello LoadBalancer 10.22.222.222 35.111.111.11 80:32341/TCP 1m kubernetes ClusterIP 10.22.222.1 <none> 443/TCP 20m
Visualizzare un'app di cui è stato eseguito il deployment
Hai eseguito il deployment di tutte le risorse necessarie per eseguire l'app Hello World su GKE.
Utilizza l'indirizzo IP esterno del passaggio precedente per caricare l'app nel browser web e vedere l'app in esecuzione:
http://EXTERNAL_IP
In alternativa, puoi effettuare una chiamata curl
all'indirizzo IP esterno del servizio:
curl EXTERNAL_IP
L'output mostra quanto segue:
Hello World!
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi:
Ti vengono addebitati i costi per le istanze di Compute Engine in esecuzione nel cluster, nonché per l'immagine container in Artifact Registry.Elimina il progetto
L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno di quel 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.
Elimina cluster e container
Se vuoi conservare il progetto, ma eliminare solo le risorse utilizzate in questo tutorial, elimina il cluster e l'immagine.
Per eliminare un cluster utilizzando Google Cloud CLI, esegui questo comando per la modalità utilizzata:
gcloud container clusters delete helloworld-gke \
--location us-central1
Per eliminare un'immagine nel repository Artifact Registry, esegui questo comando:
gcloud artifacts docker images delete \
us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke
Passaggi successivi
Per maggiori informazioni su Kubernetes, consulta:
- Scopri di più sulla creazione dei cluster.
- Scopri di più su Kubernetes.
- Leggi la documentazione di riferimento di
kubectl
.
Per maggiori informazioni sul deployment in GKE, consulta:
- Scopri come pacchettizzare, ospitare ed eseguire il deployment di una semplice applicazione server web.
- Crea un'applicazione web multi-livello con Redis e PHP.
- Esegui il deployment di WordPress su GKE con dischi permanenti e Cloud SQL.
- Configurazione di Cloud Run su GKE.
Per ulteriori informazioni sulla creazione, lo sviluppo e l'esecuzione di applicazioni su GKE direttamente dal tuo IDE con Cloud Code, consulta quanto segue: