Google Compute Engine

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.

ComputeEngine_128px.png

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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).

  1. Per attivare Cloud Shell dalla console Cloud, fai semplicemente clic su Attiva Cloud Shell b125d9eb26a46cc5.png (il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi minuti).

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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:

cc3895eeac80db2c.png

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>
  1. 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 esempio n1-highmem-4 o n1-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.

bfbc03997a41946e.png

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:

dcc4e56e82ba2603.png

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:

49b52b9354041f3b.png

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 :

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 :

Inviaci il tuo feedback

  • Dedica qualche istante a completare il nostro breve sondaggio