GSP233

Panoramica
In Terraform, un provider è l'astrazione logica di un'API upstream. Questo lab mostra come configurare un cluster Kubernetes ed eseguire al suo interno il deployment del servizio NGINX come bilanciamento del carico.
Obiettivi
In questo lab, imparerai a:
- Eseguire il deployment di un cluster Kubernetes e di un servizio tramite Terraform
Prerequisiti
Per questo lab, devi possedere i seguenti requisiti:
- Dimestichezza con i servizi Kubernetes
- Dimestichezza con l'interfaccia a riga di comando
kubectl
.
Configurazione e requisiti
Prima di fare clic sul pulsante Avvia lab
Leggi le seguenti istruzioni. I lab sono a tempo e non possono essere messi in pausa. Il timer si avvia quando fai clic su Inizia il lab e ti mostra per quanto tempo avrai a disposizione le risorse Google Cloud.
Con questo lab pratico avrai la possibilità di completare le attività in un ambiente cloud reale e non di simulazione o demo. Riceverai delle nuove credenziali temporanee che potrai utilizzare per accedere a Google Cloud per la durata del lab.
Per completare il lab, avrai bisogno di:
- Accesso a un browser internet standard (Chrome è il browser consigliato).
Nota: per eseguire questo lab, utilizza una finestra del browser in modalità di navigazione in incognito (consigliata) o privata. Ciò evita conflitti tra il tuo account personale e l'account studente, che potrebbero causare addebiti aggiuntivi sul tuo account personale.
- È ora di completare il lab: ricorda che, una volta iniziato, non puoi metterlo in pausa.
Nota: utilizza solo l'account studente per questo lab. Se utilizzi un altro account Google Cloud, potrebbero essere addebitati costi su quell'account.
Come avviare il lab e accedere alla console Google Cloud
-
Fai clic sul pulsante Avvia lab. Se devi effettuare il pagamento per il lab, si aprirà una finestra di dialogo per permetterti di selezionare il metodo di pagamento.
A sinistra, trovi il riquadro Dettagli lab con le seguenti informazioni:
- Il pulsante Apri la console Google Cloud
- Tempo rimanente
- Credenziali temporanee da utilizzare per il lab
- Altre informazioni per seguire questo lab, se necessario
-
Fai clic su Apri console Google Cloud (o fai clic con il tasto destro del mouse e seleziona Apri link in finestra di navigazione in incognito se utilizzi il browser Chrome).
Il lab avvia le risorse e apre un'altra scheda con la pagina di accesso.
Suggerimento: disponi le schede in finestre separate posizionate fianco a fianco.
Nota: se visualizzi la finestra di dialogo Scegli un account, fai clic su Usa un altro account.
-
Se necessario, copia il Nome utente di seguito e incollalo nella finestra di dialogo di accesso.
{{{user_0.username | "Username"}}}
Puoi trovare il Nome utente anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
-
Copia la Password di seguito e incollala nella finestra di dialogo di benvenuto.
{{{user_0.password | "Password"}}}
Puoi trovare la Password anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
Importante: devi utilizzare le credenziali fornite dal lab. Non utilizzare le credenziali del tuo account Google Cloud.
Nota: utilizzare il tuo account Google Cloud per questo lab potrebbe comportare addebiti aggiuntivi.
-
Fai clic nelle pagine successive:
- Accetta i termini e le condizioni.
- Non inserire opzioni di recupero o l'autenticazione a due fattori, perché si tratta di un account temporaneo.
- Non registrarti per le prove gratuite.
Dopo qualche istante, la console Google Cloud si apre in questa scheda.
Nota: per accedere ai prodotti e ai servizi Google Cloud, fai clic sul menu di navigazione o digita il nome del servizio o del prodotto nel campo Cerca.
Attiva Cloud Shell
Cloud Shell è una macchina virtuale in cui sono caricati strumenti per sviluppatori. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud. Cloud Shell fornisce l'accesso da riga di comando alle risorse Google Cloud.
-
Fai clic su Attiva Cloud Shell
nella parte superiore della console Google Cloud.
-
Fai clic nelle seguenti finestre:
- Continua nella finestra delle informazioni di Cloud Shell.
- Autorizza Cloud Shell a utilizzare le tue credenziali per effettuare chiamate API Google Cloud.
Quando la connessione è attiva, l'autenticazione è già avvenuta e il progetto è impostato sul tuo Project_ID, . L'output contiene una riga che dichiara il Project_ID per questa sessione:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
è lo strumento a riga di comando di Google Cloud. È preinstallato su Cloud Shell e supporta il completamento tramite tasto Tab.
- (Facoltativo) Puoi visualizzare il nome dell'account attivo con questo comando:
gcloud auth list
- Fai clic su Autorizza.
Output:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (Facoltativo) Puoi elencare l'ID progetto con questo comando:
gcloud config list project
Output:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Nota: per la documentazione completa di gcloud
, in Google Cloud, fai riferimento alla guida Panoramica dell'interfaccia a riga di comando gcloud.
Servizi Kubernetes
Un servizio è un gruppo di pod in esecuzione sul cluster. I servizi sono "economici" e puoi averne molti nello stesso cluster. I servizi Kubernetes sono in grado di alimentare in maniera efficiente un'architettura di microservizi.
I servizi forniscono importanti funzionalità standardizzate in tutto il cluster: bilanciamento del carico, Service Discovery tra applicazioni e funzionalità che supportano i deployment delle applicazioni senza tempi di inattività.
Ogni servizio ha una query sulle etichette dei pod che indica quali pod elaboreranno i dati per il servizio. Questa si associa spesso a pod creati da uno o più controller di replicazione. Per avere scenari di routing ottimali, devi aggiornare la query sulle etichette del servizio tramite API Kubernetes con il software di deployment.
Perché Terraform?
Anche se puoi usare kubectl
o strumenti simili basati su interfaccia a riga di comando mappati alle chiamate API per gestire tutte le risorse di Kubernetes descritte nei file YAML, l'orchestrazione con Terraform presenta alcuni vantaggi:
-
Un solo linguaggio: puoi usare lo stesso linguaggio di configurazione per eseguire il provisioning dell'infrastruttura Kubernetes e il deployment delle applicazioni al suo interno.
-
Rilevamento delle deviazioni:
terraform plan
mostrerà sempre la differenza tra la realtà in un dato momento e la configurazione che intendi applicare.
-
Gestione dell'intero ciclo di vita: Terraform non crea solo le risorse all'inizio, ma offre anche un solo comando per creare, aggiornare ed eliminare le risorse tracciate senza dover ispezionare l'API per identificarle.
-
Feedback sincrono: anche se il comportamento asincrono è spesso utile, a volte può essere controproducente perché il compito di identificare i risultati delle operazioni (errori o dettagli della risorsa creata) viene lasciato all'utente. Ad esempio, non puoi conoscere il nome host o l'indirizzo IP del bilanciatore del carico finché questo non avrà terminato il provisioning, quindi non potrai creare alcun record DNS che vi faccia riferimento.
-
Grafico delle relazioni: Terraform comprende le relazioni tra le risorse, il che può essere utile nella pianificazione. Ad esempio, Terraform non cercherà di creare un servizio in un cluster Kubernetes finché il cluster esiste.
Attività 1: clona il codice campione
- In Cloud Shell, inizia clonando il codice campione:
gsutil -m cp -r gs://spls/gsp233/* .
- Vai alla directory
tf-gke-k8s-service-lb
:
cd tf-gke-k8s-service-lb
Attività 2: comprendi il codice
- Esamina i contenuti del file
main.tf
:
cat main.tf
Output di esempio:
...
variable "region" {
type = string
description = "Region for the resource."
}
variable "location" {
type = string
description = "Location represents region/zone for the resource."
}
variable "network_name" {
default = "tf-gke-k8s"
}
provider "google" {
region = var.region
}
resource "google_compute_network" "default" {
name = var.network_name
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "default" {
name = var.network_name
ip_cidr_range = "10.127.0.0/20"
network = google_compute_network.default.self_link
region = var.region
private_ip_google_access = true
}
...
- Le variabili sono definite per
region
, zone
e network_name
. Verranno usate per creare il cluster Kubernetes.
- II provider Google Cloud ci permetterà di creare le risorse per questo progetto.
- Sono state definite diverse risorse per creare la rete e il cluster appropriati.
- Al termine, potrai vedere alcuni output dopo aver eseguito
terraform apply
.
- Esamina i contenuti del file
k8s.tf
:
cat k8s.tf
Output di esempio:
provider "kubernetes" {
version = "~> 1.10.0"
host = google_container_cluster.default.endpoint
token = data.google_client_config.current.access_token
client_certificate = base64decode(
google_container_cluster.default.master_auth[0].client_certificate,
)
client_key = base64decode(google_container_cluster.default.master_auth[0].client_key)
cluster_ca_certificate = base64decode(
google_container_cluster.default.master_auth[0].cluster_ca_certificate,
)
}
resource "kubernetes_namespace" "staging" {
metadata {
name = "staging"
}
}
resource "google_compute_address" "default" {
name = var.network_name
region = var.region
}
resource "kubernetes_service" "nginx" {
metadata {
namespace = kubernetes_namespace.staging.metadata[0].name
name = "nginx"
}
spec {
selector = {
run = "nginx"
}
session_affinity = "ClientIP"
port {
protocol = "TCP"
port = 80
target_port = 80
}
type = "LoadBalancer"
load_balancer_ip = google_compute_address.default.address
}
}
resource "kubernetes_replication_controller" "nginx" {
metadata {
name = "nginx"
namespace = kubernetes_namespace.staging.metadata[0].name
labels = {
run = "nginx"
}
}
spec {
selector = {
run = "nginx"
}
template {
container {
image = "nginx:latest"
name = "nginx"
resources {
limits {
cpu = "0.5"
memory = "512Mi"
}
requests {
cpu = "250m"
memory = "50Mi"
}
}
}
}
}
}
output "load-balancer-ip" {
value = google_compute_address.default.address
}
- Lo script configura un provider Kubernetes con Terraform e crea il servizio, lo spazio dei nomi e una risorsa replication_controller.
- Lo script restituisce un IP del servizio
nginx
come output.
Attività 3: inizializza e installa le dipendenze
Il comando terraform init
viene utilizzato per inizializzare una directory di lavoro contenente i file di configurazione di Terraform.
Questo comando esegue diversi step di inizializzazione per preparare una directory di lavoro all'uso ed è sempre meglio eseguirlo più volte per aggiornare la directory di lavoro in base alle modifiche nella configurazione:
- Esegui
terraform init
:
terraform init
Output di esempio:
...
* provider.google: version = "~> 3.8.0"
* provider.kubernetes: version = "~> 1.10.0"
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running `terraform plan` to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
- Esegui il comando
terraform apply
per applicare le modifiche necessarie al fine di ottenere lo stato desiderato della configurazione:
terraform apply -var="region={{{ project_0.default_region | "Region to be allocated" }}}" -var="location={{{ project_0.default_zone | "Zone to be allocated" }}}"
-
Rivedi le azioni di Terraform ed esamina le risorse che verranno create.
-
Quando è tutto pronto, digita yes per avviare le azioni di Terraform.
Una volta completato, dovresti vedere un output simile:
Output di esempio:
Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
Outputs:
cluster_name = tf-gke-k8s
cluster_region = "{{{project_0.default_region|REGION}}}"
cluster_zone = "{{{project_0.default_region|ZONE}}}"
load-balancer-ip = 35.233.177.223
network = https://www.googleapis.com/compute/beta/projects/qwiklabs-gcp-5438ad3a5e852e4a/global/networks/tf-gke-k8s
subnetwork_name = tf-gke-k8s
Verifica le risorse create da Terraform
- Nella console, vai a Menu di navigazione > Kubernetes Engine.
- Fai clic sul cluster
tf-gke-k8s
e verifica la sua configurazione.
- Nel riquadro a sinistra, fai clic su Gateway, servizi e Ingress e verifica lo stato del servizio
nginx
.
- Fai clic sugli indirizzi IP degli Endpoint per aprire la pagina
Welcome to nginx!
in una nuova scheda del browser.

Fai clic su Controlla i miei progressi per verificare l'attività eseguita. Se il deployment dell'infrastruttura è stato eseguito correttamente con Terraform, potrai visualizzare il punteggio del test.
Distribuisci l'infrastruttura con Terraform
Complimenti!
In questo lab, hai utilizzato Terraform per inizializzare, pianificare ed eseguire il deployment di un cluster Kubernetes con un servizio.
Completa la Quest
Questo self-paced lab fa parte delle Quest Managing Cloud Infrastructure with Terraform e DevOps Essentials. Una Quest è una serie di lab correlati che formano un percorso di apprendimento. Il completamento di una Quest ti permette di ottenere un badge come riconoscimento dell'obiettivo raggiunto. Puoi rendere pubblici i tuoi badge inserendone i link nel tuo CV online o sui social media. Iscriviti a una delle Quest contenenti il lab e ricevi un riconoscimento subito dopo averlo completato. Per vedere tutte le Quest disponibili, consulta il catalogo di Google Cloud Skills Boost.
Segui il prossimo lab
Continua la tua Quest con Bilanciatore del carico basato sui contenuti HTTPS con Terraform oppure dai un'occhiata a questi suggerimenti:
Prossimi passi/Scopri di più
Scopri come gli altri usano Terraform nella Community.
Formazione e certificazione Google Cloud
… per utilizzare al meglio le tecnologie Google Cloud. I nostri corsi ti consentono di sviluppare competenze tecniche e best practice per aiutarti a metterti subito al passo e avanzare nel tuo percorso di apprendimento. Offriamo vari livelli di formazione, dal livello base a quello avanzato, con opzioni di corsi on demand, dal vivo e virtuali, in modo da poter scegliere il più adatto in base ai tuoi impegni. Le certificazioni ti permettono di confermare e dimostrare le tue abilità e competenze relative alle tecnologie Google Cloud.
Ultimo aggiornamento del manuale: 1° aprile 2024
Ultimo test del lab: 1° aprile 2024
Copyright 2025 Google LLC. Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.