1. Introduzione
Ciao, grazie per essere venuto oggi. Vuoi scoprire di più su Google Compute Engine?
In questo codelab, esploreremo Compute Engine mediante un'applicazione Guestbook di esempio.
Creerai istanze di Compute Engine, eseguirai il deployment di nginx e, infine, metterai in primo piano un bilanciatore del carico di rete. Puoi creare un'istanza Compute Engine dalla console grafica o dalla riga di comando. Questo lab ti guiderà attraverso l'utilizzo della riga di comando.
Google Compute Engine offre macchine virtuali in esecuzione nei data center di Google collegate alla rete in fibra globale di Google. Gli strumenti e il flusso di lavoro offerti consentono la scalabilità da singole istanze al cloud computing globale con bilanciamento del carico.
Queste VM si avviano rapidamente, sono dotate di archiviazione su disco permanente e offrono prestazioni costanti. Le macchine sono disponibili in molte configurazioni, comprese dimensioni predefinite, e possono anche essere create con tipi di macchine personalizzate ottimizzati per le tue esigenze specifiche.
Infine, le macchine virtuali Compute Engine sono anche la tecnologia utilizzata da molti altri prodotti Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow e così via).
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come
PROJECT_ID
), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto. - C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Google Cloud Shell
Mentre Google Cloud e Compute Engine possono essere gestiti da remoto dal tuo laptop, in questo codelab utilizzeremo Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Ciò significa che per questo codelab è sufficiente un browser (sì, funziona su Chromebook).
- Per attivare Cloud Shell dalla console Cloud, fai semplicemente clic su Attiva Cloud Shell (il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi minuti).
Dopo la connessione a Cloud Shell, dovresti vedere che hai già eseguito l'autenticazione e che il progetto è già impostato su PROJECT_ID
.
gcloud auth list
Output comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
Se, per qualche motivo, il progetto non è impostato, invia semplicemente il seguente comando:
gcloud config set project <PROJECT_ID>
Stai cercando il tuo PROJECT_ID
? Controlla l'ID utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:
Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, cosa che può essere utile quando eseguirai comandi futuri.
echo $GOOGLE_CLOUD_PROJECT
Output comando
<PROJECT_ID>
- Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f
Puoi scegliere zone diverse. Per ulteriori informazioni, consulta Regioni e Zone.
3. Crea un'istanza di Compute Engine
Come discusso in precedenza, in questo codelab utilizzeremo la riga di comando gcloud
. Tutto ciò che fai qui può essere eseguito utilizzando la console (disponibile all'indirizzo console.cloud.google.com).
Innanzitutto, creiamo un'istanza con le impostazioni predefinite :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Prendi nota delle EXTERNAL_IP
, che sono importanti in seguito.
L'istanza viene creata utilizzando una serie di impostazioni predefinite :
- La zona che scegli. Tutte le istanze risiedono in una zona. Puoi selezionare una zona al momento della creazione dell'istanza utilizzando il flag
--zone
oppure puoi impostare una zona predefinita (come abbiamo fatto nella configurazione iniziale) e omettere il flag--zone
. - L'ultima immagine Debian GNU/Linux 9 (stretch). Se utilizzi la tua immagine personalizzata, specifica qui il nome dell'immagine. Ad esempio:
--image my-own-image
. - Il tipo di macchina
n1-standard-1
. Puoi selezionare un altro tipo di macchina, ad esempion1-highmem-4
on1-highcpu-6
. Se nessuno dei tipi di macchina predefinita soddisfa le tue esigenze, utilizza un tipo di macchina personalizzata. - Un disco permanente radice con lo stesso nome dell'istanza. Il disco viene automaticamente collegato all'istanza.
Esegui gcloud compute instances create --help
per visualizzare tutte le opzioni disponibili.
4. Abilita firewall per la porta 80
Per impostazione predefinita, Google Cloud consente solo pochi accessi alle porte. Poiché installeremo Nginx a breve, per prima cosa attiva la porta 80 nella configurazione del firewall.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
Verrà creata una regola firewall denominata allow-80
che ha un elenco predefinito di blocchi di indirizzi IP autorizzati a effettuare connessioni in entrata (--source-ranges
) impostati su 0.0.0.0/0
(Ovunque).
Esegui gcloud compute firewall-rules create --help
per visualizzare tutti i valori predefiniti e tutte le opzioni disponibili, inclusa la possibilità di applicare regole firewall basate su tag.
5. SSH all'istanza
Per accedere all'istanza tramite SSH dalla riga di comando (sempre da Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
È tutto. piuttosto facile. (In produzione, assicurati di inserire una passphrase :)
In alternativa, puoi anche accedere all'istanza tramite SSH direttamente dalla console ( console.cloud.google.com), accedendo a Compute Engine > Istanze VM e facendo clic su SSH.
6. Installa Nginx
Accedi a myinstance, l'istanza appena creata, e installa nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
Verifica che il server sia in esecuzione utilizzando curl
da myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
Per trovare l'IP esterno dell'istanza, elenca le istanze tramite la UI web:
Assicurati di uscire da SSH ed esegui questo comando da Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Poi vai a http://EXTERNAL_IP/
, dove EXTERNAL_IP
è l'IP pubblico di myinstance e dovresti essere in grado di visualizzare la pagina nginx:
7. Script di avvio
Anziché configurare l'istanza ogni volta, puoi utilizzare uno script di avvio per inizializzarla all'avvio.
Crea un file denominato startup.sh
con i seguenti contenuti (puoi utilizzare il tuo editor di testo preferito: vim
, nano
o emacs
):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
Per creare una nuova istanza VM con questo script di avvio, digita semplicemente :
$ gcloud compute instances create nginx \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Vai a http://EXTERNAL_IP/
. Dovresti vedere la home page aggiornata. Se la pagina non viene visualizzata immediatamente, riprova dopo un paio di secondi, è possibile che l'host stia ancora avviando nginx.
8. Crea un cluster di server
Per creare un cluster di server, devi prima creare un modello di istanza. Dopo aver creato un modello di istanza, puoi creare un gruppo di istanze per gestire il numero di istanze da creare.
Innanzitutto, crea un modello di istanza utilizzando lo script di avvio :
$ gcloud compute instance-templates create nginx-template \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
Quindi, creiamo un pool di destinazione. Un pool di destinazione ci consente di avere un unico punto di accesso a tutte le istanze di un gruppo ed è necessario per il bilanciamento del carico nei passaggi futuri.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
Infine, crea un gruppo di istanze utilizzando il modello:
$ gcloud compute instance-groups managed create nginx-group \ --base-instance-name nginx \ --size 2 \ --template nginx-template \ --target-pool nginx-pool Created [...]. NAME: nginx-group LOCATION: us-central1-f SCOPE: zone BASE_INSTANCE_NAME: nginx SIZE: 0 TARGET_SIZE: 2 INSTANCE_TEMPLATE: nginx-template AUTOSCALED: no
Verranno create due istanze VM aggiuntive con nomi che hanno il prefisso nginx-
.
Ora dovresti essere in grado di vedere tutte le istanze create.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. Crea un bilanciatore del carico di rete
Nella piattaforma Google Cloud esistono diversi tipi di bilanciatori del carico, tra cui :
Creiamo un bilanciatore del carico di rete a livello di regione che abbia come target il nostro gruppo di istanze:
$ gcloud compute forwarding-rules create nginx-lb \ --ports 80 \ --target-pool nginx-pool Created [...]. $ gcloud compute forwarding-rules list NAME: nginx-lb REGION: us-central1 IP_ADDRESS: X.X.X.X IP_PROTOCOL: TCP TARGET: us-central1/targetPools/nginx-pool
Puoi quindi visitare il bilanciatore del carico dal browser http://IP_ADDRESS/
, dove IP_ADDRESS
è l'indirizzo mostrato come risultato dell'esecuzione del comando precedente.
Per ora, non creeremo un bilanciatore del carico HTTP.
10. esegui la pulizia del cluster
Non dimenticare di arrestare il cluster, altrimenti continueranno a essere eseguiti e ad accumulare costi. I seguenti comandi eliminano le istanze, il gruppo di istanze, il gruppo di targeting e il bilanciatore del carico di Google Compute Engine.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
Ciascuno dei comandi precedenti dovrebbe chiederti di confermare l'eliminazione della risorsa.
11. Passaggi successivi
Complimenti, hai completato questo codelab su Compute Engine.
Altre funzionalità di Compute Engine
Google Compute Engine offre un ricco insieme di funzionalità. Ti consigliamo di approfondire alcuni di questi aspetti :
- VM prerilasciabili - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nodi single-tenant - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU e TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- Istanze Windows - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Risorse di etichettatura - https://cloud.google.com/compute/docs/labeling-resources
- Migrazione delle VM in Compute Engine: https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) è l'offerta Kubernetes in hosting e completamente gestita di Google Cloud. Sono disponibili diversi codelab per aiutarti a iniziare a utilizzare GKE. Ecco un buon inizio con questo :
- Codelab su Google Kubernetes Engine - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Inviaci il tuo feedback
- Dedica qualche istante a completare il nostro breve sondaggio