Crea un cluster ed esegui il deployment di un workload utilizzando Terraform
Un cluster Kubernetes fornisce risorse di calcolo, archiviazione, networking e altri servizi per le applicazioni, come un data center virtuale. Le app e i relativi servizi in esecuzione in Kubernetes sono chiamati workload.
Questo tutorial ti consente di visualizzare rapidamente un cluster Google Kubernetes Engine in esecuzione e un workload di esempio, il tutto configurato utilizzando Terraform. Puoi quindi esplorare il workload nella Google Cloud console prima di passare al nostro percorso di apprendimento più approfondito o iniziare a pianificare e creare il tuo cluster pronto per la produzione. Questo tutorial presuppone che tu abbia già dimestichezza con Terraform.
Se preferisci configurare il cluster e il workload di esempio nella Google Cloud console, consulta Creare un cluster nella Google Cloud console.
Prima di iniziare
Per abilitare l'API Kubernetes Engine, segui questi passaggi:
- Accedi al tuo Google Cloud account. 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.
Abilita l'API GKE:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), che contiene l'serviceusage.services.enableautorizzazione. Scopri come concedere i ruoli.gcloud services enable container.googleapis.com
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.
Abilita l'API GKE:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), che contiene l'serviceusage.services.enableautorizzazione. Scopri come concedere i ruoli.gcloud services enable container.googleapis.com
-
Concedi i ruoli al tuo account utente. Esegui il comando seguente una volta per ciascuno dei seguenti ruoli IAM:
roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio,myemail@example.com.ROLE: il ruolo IAM che concedi al tuo account utente.
Prepara l'ambiente
In questo tutorial utilizzerai Cloud Shell per gestire le risorse ospitate su
Google Cloud. Cloud Shell è preinstallato con il
software necessario per questo tutorial, tra cui Terraform,
kubectl, e il
il Google Cloud CLI.
Avvia una sessione di Cloud Shell dalla Google Cloud console facendo clic sull'icona di attivazione di Cloud Shell Attiva Cloud Shell
. Viene avviata una sessione nel riquadro inferiore della Google Cloud console.Le credenziali di servizio associate a questa macchina virtuale sono automatiche, quindi non devi configurare o scaricare una chiave del account di servizio.
Prima di eseguire i comandi, imposta il progetto predefinito in gcloud CLI utilizzando il comando seguente:
gcloud config set project PROJECT_IDSostituisci
PROJECT_IDcon l' ID progetto.Clona il repository GitHub:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branchPassa alla directory di lavoro:
cd terraform-docs-samples/gke/quickstart/autopilot
Esamina i file Terraform
Il Google Cloud provider è un plug-in che consente di gestire ed eseguire il provisioning delle Google Cloud risorse utilizzando Terraform. Funge da ponte tra le configurazioni Terraform e le API, consentendoti di definire in modo dichiarativo le risorse dell'infrastruttura, come macchine virtuali e reti. Google Cloud
Il cluster e l'app di esempio per questo tutorial sono specificati in due file Terraform che utilizzano i Google Cloud provider e Kubernetes.
Esamina il file
cluster.tf:cat cluster.tfL'output è simile al seguente
Questo file descrive le seguenti risorse:
google_compute_network: una rete VPC con IPv6 interno abilitato.google_compute_subnetwork: una subnet a doppio stack.google_container_cluster: un cluster in modalità Autopilot a doppio stack situato inus-central1. L'impostazionedeletion_protectioncontrolla se puoi utilizzare Terraform per eliminare questo cluster. Se imposti il valore nel campodeletion_protectionsufalse, Terraform può eliminare il cluster. Per maggiori dettagli, consulta ilgoogle_container_clusterriferimento.
Esamina il file
app.tf:cat app.tfL'output è simile al seguente:
Questo file descrive le seguenti risorse:
- Un deployment con un'immagine container di esempio.
- Un servizio di tipo LoadBalancer. Il servizio espone il deployment sulla porta 80.
(Facoltativo) Esporre l'applicazione su internet
I file Terraform per l'esempio descrivono un'applicazione con un indirizzo IP interno, a cui è possibile accedere solo dalla stessa rete VPC (Virtual Private Cloud) dell'app di esempio. Se vuoi accedere all'interfaccia web dell'app demo in esecuzione da internet (ad esempio dal tuo laptop), modifica i file Terraform per creare un indirizzo IP pubblico prima di creare il cluster. Puoi farlo utilizzando un editor di testo direttamente in Cloud Shell o utilizzando l'editor di Cloud Shell.
Per esporre l'applicazione demo su internet:
In
cluster.tf, modificaipv6_access_typedaINTERNALaEXTERNAL.ipv6_access_type = "EXTERNAL"In
app.tf, configura un bilanciatore del carico esterno rimuovendo l'networking.gke.io/load-balancer-typeannotazione.annotations = { "networking.gke.io/load-balancer-type" = "Internal" # Remove this line }
Crea un cluster ed esegui il deployment di un'applicazione
In Cloud Shell, esegui questo comando per verificare che Terraform sia disponibile:
terraformL'output dovrebbe essere simile al seguente:
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructureInizializza Terraform:
terraform initPianifica la configurazione Terraform:
terraform planApplica la configurazione Terraform
terraform applyQuando richiesto, inserisci
yesper confermare le azioni. Il completamento di questo comando potrebbe richiedere alcuni minuti. L'output è simile al seguente:Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Verifica il funzionamento del cluster
Per verificare che il cluster sia in esecuzione correttamente:
Vai alla pagina Workload nella Google Cloud console:
Fai clic sul workload
example-hello-app-deployment. Viene visualizzata la pagina dei dettagli del pod. Questa pagina mostra informazioni sul pod, come annotazioni, container in esecuzione sul pod, servizi che espongono il pod e metriche tra cui utilizzo di CPU, memoria e disco.Vai alla pagina Servizi e Ingress nella Google Cloud console:
Fai clic sul servizio LoadBalancer
example-hello-app-loadbalancer. Viene visualizzata la pagina dei dettagli del servizio. Questa pagina mostra informazioni sul servizio, come i pod associati al servizio e le porte utilizzate dai servizi.Nella sezione Endpoint esterni, fai clic sul link IPv4 o sul link IPv6 per visualizzare il servizio nel browser. L'output è simile al seguente:
Hello, world! Version: 2.0.0 Hostname: example-hello-app-deployment-5df979c4fb-kdwgr
Libera spazio
Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il Google Cloud progetto con le risorse.
Se prevedi di seguire altri tutorial o di esplorare ulteriormente l'esempio, attendi il completamento di questo passaggio di pulizia.
In Cloud Shell, esegui questo comando per eliminare le risorse Terraform:
terraform destroy --auto-approve
Risolvi gli errori di pulizia
Se visualizzi un messaggio di errore simile a The network resource 'projects/PROJECT_ID/global/networks/example-network' is already being used by 'projects/PROJECT_ID/global/firewalls/example-network-yqjlfql57iydmsuzd4ot6n5v',
procedi nel seguente modo:
Elimina le regole firewall:
gcloud compute firewall-rules list --filter="NETWORK:example-network" --format="table[no-heading](name)" | xargs gcloud --quiet compute firewall-rules deleteEsegui di nuovo il comando Terraform:
terraform destroy --auto-approve
Passaggi successivi
Esplora il cluster e il workload nella Google Cloud console per scoprire alcune delle impostazioni e delle risorse chiave del workload di cui hai eseguito il deployment.
Scopri di più sulla configurazione e sull'utilizzo di Terraform con GKE in Supporto di Terraform per GKE.
Prova il nostro percorso di apprendimento più approfondito: App scalabili.
Scopri come iniziare a utilizzare l'amministrazione dei cluster nella vita reale nella nostra Panoramica dell'amministrazione dei cluster.