Checkpoint
Create a Kubernetes cluster and launch Nginx container
/ 25
Create Monolith pods and service
/ 25
Allow traffic to the monolith service on the exposed nodeport
/ 5
Adding Labels to Pods
/ 20
Creating Deployments (Auth, Hello and Frontend)
/ 25
Organizzare il cloud con Kubernetes
- GSP021
- Panoramica
- Obiettivi
- Configurazione e requisiti
- Attività 1: recupera il codice campione
- Attività 2: demo rapida di Kubernetes
- Attività 3: i pod
- Attività 4: crea i pod
- Attività 5: interagisci con i pod
- Attività 6: i servizi
- Attività 7: crea un servizio
- Attività 8: aggiungi etichette ai pod
- Attività 9: esegui il deployment delle applicazioni con Kubernetes
- Attività 10: crea i deployment
- Complimenti!
GSP021
Panoramica
Kubernetes è un progetto open source (disponibile su kubernetes.io) eseguibile su numerosi ambienti, dai laptop ai cluster multinodo ad alta disponibilità, dai cloud pubblici ai deployment on-premise, dalle macchine virtuali alle soluzioni bare metal.
Per questo lab, l'uso di un ambiente gestito come Kubernetes Engine ti permette di concentrarti sulla tua esperienza con Kubernetes anziché sulla configurazione dell'infrastruttura sottostante. Kubernetes Engine è un ambiente gestito per il deployment delle applicazioni containerizzate. Offre le più recenti innovazioni disponibili sul mercato apportando significativi vantaggi in termini di produttività degli sviluppatori, efficienza delle risorse, automazione delle operazioni e flessibilità dell'open source per accelerare il time to market.
Obiettivi
In questo lab imparerai a:
- Eseguire il provisioning di un cluster Kubernetes completo mediante Kubernetes Engine.
- Eseguire il deployment e gestire i container Docker mediante
kubectl
. - Suddividere un'applicazione in microservizi mediante deployment e Service di Kubernetes.
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 Avvia 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 prima persona, 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).
- È ora di completare il lab: ricorda che, una volta iniziato, non puoi metterlo in pausa.
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 apre una finestra popup per permetterti di selezionare il metodo di pagamento. A sinistra, trovi il riquadro Dettagli lab con le seguenti informazioni:
- Il pulsante Apri 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.
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.
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:
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:
-
Fai clic su Autorizza.
-
L'output dovrebbe avere ora il seguente aspetto:
Output:
- (Facoltativo) Puoi elencare l'ID progetto con questo comando:
Output:
Output di esempio:
gcloud
, in Google Cloud, fai riferimento alla Panoramica dell'interfaccia a riga di comando gcloud.
Google Kubernetes Engine
- Nell'ambiente Cloud Shell, digita il comando seguente per impostare la zona:
- Avvia un cluster da usare in questo lab:
gcloud container clusters get-credentials io
per ripetere l'autenticazione.
Attività 1: recupera il codice campione
- Copia il codice sorgente dalla riga di comando di Cloud Shell:
- Passa alla directory richiesta per questo lab:
- Elenca i file per vedere con quali elementi stai lavorando:
L'esempio ha il layout seguente:
Ora che hai il codice, è il momento di provare Kubernetes!
Attività 2: demo rapida di Kubernetes
Il modo più semplice per iniziare a utilizzare Kubernetes è l'uso del comando kubectl create
.
- Utilizzalo per avviare un'unica istanza del container nginx:
Kubernetes ha creato un deployment. Scoprirai maggiori informazioni sui deployment in seguito, per ora ti basterà sapere che i deployment mantengono i pod in esecuzione anche in caso di arresto dei nodi su cui vengono eseguiti.
In Kubernetes, tutti i container vengono eseguiti in pod.
- Usa il comando
kubectl get pods
per vedere il container nginx in esecuzione:
- Quando lo stato del container nginx è In esecuzione, puoi esporlo all'esterno di Kubernetes mediante il comando
kubectl expose
:
Riassumiamo quanto fatto finora. Dietro le quinte, Kubernetes ha creato un bilanciatore del carico esterno a cui è associato un indirizzo IP pubblico. Qualsiasi client che contatta questo indirizzo IP pubblico viene instradato ai pod da cui dipende il servizio. In questo caso, si tratta del pod nginx.
- Elenca i nostri servizi usando il comando
kubectl get services
:
ExternalIP
venga completato per il tuo servizio. Questo è normale: esegui nuovamente il comando kubectl get services
a intervalli regolari di alcuni secondi fino a quando il campo non viene completato.
- Aggiungi l'IP esterno a questo comando per contattare il container Nginx da remoto:
Ecco fatto! Kubernetes supporta un flusso di lavoro facile e pronto per l'uso con i comandi kubectl
run ed expose.
Verifica l'attività completata
Fai clic su Controlla i miei progressi qui sotto per verificare lo stato di avanzamento del lab. Se hai creato correttamente un cluster Kubernetes ed esegui il deployment di un container Nginx, visualizzerai un punteggio di valutazione.
Dopo questa rapida panoramica di Kubernetes, è il momento di concentrarsi su ognuno dei componenti e delle astrazioni.
Attività 3: i pod
Il pod è l'elemento fondamentale di Kubernetes.
I pod rappresentano e contengono una raccolta di uno o più container. In generale, se hai più container con una forte dipendenza l'uno dall'altro, li pacchettizzerai in un unico pod.
In questo esempio vediamo un pod che contiene i container monolite e nginx.
I pod, inoltre, sono dotati di volumi. I volumi sono dischi dati la cui durata corrisponde alla durata del pod e che possono essere utilizzati dai container all'interno del pod. I pod forniscono uno spazio dei nomi condiviso per i contenuti, di conseguenza i due container nel nostro pod di esempio comunicano tra loro e condividono anche i volumi collegati.
I pod condividono inoltre uno spazio dei nomi di rete. Di conseguenza, ogni pod ha un indirizzo IP.
Passiamo ora a uno sguardo più approfondito sui pod.
Attività 4: crea i pod
Puoi creare i pod utilizzando file di configurazione pod. Dedica un momento a esplorare il file di configurazione del pod monolite.
- Vai alla directory:
- Esegui questo comando:
L'output mostra il file di configurazione aperto:
Ci sono alcuni elementi da notare. Puoi vedere che:
- Il tuo pod è composto da un container (monolite).
- Passi alcuni argomenti al nostro container quando si avvia.
- Apri la porta 80 al traffico http.
- Crea il pod monolite utilizzando
kubectl
:
- Esamina i tuoi pod. Usa il comando
kubectl get pods
per elencare tutti i pod in esecuzione nello spazio dei nomi predefinito:
- Quando il pod è in esecuzione, usa il comando
kubectl describe
per ricevere maggiori informazioni sul pod monolite:
Vedrai molte informazioni sul pod monolite, tra cui l'indirizzo IP del pod e il log eventi. Queste informazioni saranno utili durante la risoluzione dei problemi.
Kubernetes facilita la creazione dei pod descrivendoli in file di configurazione e con informazioni facili da visualizzare durante l'esecuzione. A questo punto, puoi creare tutti i pod richiesti dal tuo deployment.
Attività 5: interagisci con i pod
Per impostazione predefinita, ai pod viene allocato un indirizzo IP privato, non raggiungibile dall'esterno del cluster. Usa il comando kubectl port-forward
per mappare una porta locale su una porta all'interno del pod monolite.
-
Apri un secondo terminale Cloud Shell. Ora hai due terminali; su uno eseguirai il comando
kubectl port-forward
sull'altro i comandicurl
. -
Nel secondo terminale, esegui questo comando per configurare il port forwarding:
- Ora nel primo terminale inizia a comunicare con il tuo pod utilizzando
curl
:
Ottimo! Il tuo container ti ha risposto con un amichevole "hello".
- Ora usa il comando
curl
per vedere cosa succede quando contatti un endpoint sicuro:
Oh oh.
- Prova ad accedere per ricevere un token di autenticazione dal monolite:
- Al prompt di accesso, usa la segretissima password
password
per accedere.
L'accesso ha provocato l'emissione di un token JWT.
- Poiché Cloud Shell non gestisce bene la copia di stringhe lunghe, crea una variabile di ambiente per il token.
-
Alla richiesta della password dell'host, inserisci di nuovo la segretissima password
password
. -
Usa questo comando per copiare, quindi usa il token per contattare l'endpoint sicuro con
curl
:
A questo punto, dovresti ottenere una risposta dalla nostra applicazione, che ci fa sapere che ora tutto va di nuovo per il verso giusto.
- Usa il comando
kubectl logs
per visualizzare i log del podmonolith
.
-
Apri un terzo terminale e usa il flag
-f
per ottenere un flusso dei log in tempo reale:
- Ora se usi
curl
nel primo terminale per interagire con il monolite, vedrai che i log vengono aggiornati (nel terzo terminale):
- Usa il comando
kubectl exec
per eseguire una shell interattiva all'interno del pod monolite. Questo può essere utile per risolvere i problemi dall'interno di un container:
- Ad esempio, una volta che hai una shell nel container monolite, puoi testare la connettività esterna con il comando
ping
:
- Assicurati di uscire quando hai finito di lavorare con questa shell interattiva.
Come puoi vedere, l'interazione con i pod si riassume nel comando kubectl
. Se devi contattare un container da remoto o aprire una shell di accesso, Kubernetes ti offre tutto ciò di cui hai bisogno per iniziare.
Attività 6: i servizi
I pod non sono pensati per essere permanenti. Possono essere arrestati o avviati per vari motivi, tra cui il mancato superamento di controlli di attività o idoneità, e questo crea un problema:
Cosa succede se vuoi comunicare con un insieme di pod? Quando vengono riavviati, potrebbero avere un indirizzo IP diverso.
È qui che entrano in gioco i servizi. I servizi offrono endpoint stabili per i pod.
Per determinare su quali pod operano, i servizi si basano su etichette. Se i pod hanno le etichette corrette, vengono rilevati ed esposti automaticamente dai nostri servizi.
Il livello di accesso fornito da un servizio a un insieme di pod dipende dal tipo di servizio. Attualmente, sono disponibili tre tipi:
-
ClusterIP
(interno): il tipo predefinito, significa che questo servizio è visibile solo all'interno del cluster. -
NodePort
: fornisce a ogni nodo nel cluster un IP accessibile dall'esterno. -
LoadBalancer
: aggiunge un bilanciatore del carico dal cloud provider che inoltra il traffico dal servizio ai nodi al suo interno.
Ora imparerai come:
- Creare un servizio
- Utilizzare i selettori di etichette per esporre all'esterno un insieme limitato di pod
Attività 7: crea un servizio
Prima di poter creare i servizi, crea un pod sicuro in grado di gestire il traffico https.
- Se hai cambiato directory, accertati di tornare in
~/orchestrate-with-kubernetes/kubernetes
:
- Esplora il file di configurazione del servizio monolite:
- Crea i pod secure-monolith e i dati delle relative configurazioni:
Ora che hai un pod sicuro, è il momento di esporre il pod secure-monolith all'esterno. Per farlo, crea un servizio Kubernetes.
- Esplora il file di configurazione del servizio monolite:
(Output):
* È presente un selettore, utilizzato per trovare ed esporre automaticamente tutti i pod con le etichette "app: monolith" e "secure: enabled".
* Ora devi esporre qui la porta del nodo, perché è così che inoltrerai il traffico esterno dalla porta 31000 a nginx (sulla porta 443).
- Usa il comando
kubectl create
per creare il servizio monolite dal file di configurazione del servizio monolite:
(Output):
Verifica l'attività completata
Fai clic su Controlla i miei progressi qui sotto per verificare lo stato di avanzamento del lab. Se hai creato correttamente i pod e il servizio monolite, visualizzerai un punteggio di valutazione.
Per esporre il servizio stai utilizzando una porta. Di conseguenza, sono possibili conflitti di porta se un'altra app tenta l'associazione alla porta 31000 su uno dei tuoi server.
Normalmente, l'assegnazione delle porte viene gestita da Kubernetes. In questo lab sei tu a scegliere una porta perché questo facilita la successiva configurazione dei controlli di integrità.
- Usa il comando
gcloud compute firewall-rules
per consentire il traffico al servizio monolite sulla porta del nodo esposta:
Verifica l'attività completata
Fai clic su Controlla i miei progressi qui sotto per verificare lo stato di avanzamento del lab. Se hai creato correttamente una regola firewall per autorizzare il traffico TCP sulla porta 31000, visualizzerai un punteggio di valutazione.
Ora che hai configurato tutto, dovresti poter contattare il servizio secure-monolith dall'esterno del cluster senza utilizzare il port forwarding.
- Per prima cosa, ricevi un indirizzo IP esterno per uno dei nodi.
- Ora prova a contattare il servizio secure-monolith utilizzando
curl
:
Oh oh. Ha raggiunto il timeout. Che sta succedendo?
Nota: è il momento per un rapido controllo delle conoscenze.
Usa i comandi seguenti per rispondere alle domande:kubectl get services monolith
kubectl describe services monolith
Domande:
Suggerimento: il problema ha a che fare con le etichette. Lo correggerai nella sezione successiva.
Attività 8: aggiungi etichette ai pod
Attualmente il servizio monolite non ha endpoint. Un modo per risolvere un problema di questo genere è utilizzare il comando kubectl get pods
con una query sulle etichette.
- Puoi osservare diversi pod in esecuzione con l'etichetta monolite.
- Cosa viene restituito per "app=monolith" e "secure=enabled"?
Nota che questa query sulle etichette non restituisce alcun risultato. Sembra che tu debba aggiungere l'etichetta "secure=enabled".
- Usa il comando
kubectl label
per aggiungere l'etichettasecure=enabled
mancante al pod secure-monolith. Dopodiché, potrai controllare e verificare che le etichette sono state aggiornate.
- Ora che i pod hanno le etichette corrette, visualizza l'elenco di endpoint sul servizio monolite:
Ce n'è uno!
- Provalo contattando di nuovo uno dei nostri nodi.
Evviva! Houston, abbiamo un contatto.
Verifica l'attività completata
Fai clic su Controlla i miei progressi qui sotto per verificare lo stato di avanzamento del lab. Se hai aggiunto correttamente le etichette ai pod monolite, visualizzerai un punteggio di valutazione.
Attività 9: esegui il deployment delle applicazioni con Kubernetes
L'obiettivo di questo lab è prepararti alla scalabilità e alla gestione dei container in produzione. È qui che entrano in gioco i deployment. I deployment sono un metodo dichiarativo per assicurare che il numero di pod in esecuzione corrisponda al numero di pod desiderato, specificato dall'utente.
Il principale vantaggio dei deployment è l'astrazione dei dettagli di basso livello nella gestione dei pod. Dietro le quinte, i deployment usano set di replica per gestire l'avvio e l'arresto dei pod. Se è necessario aggiornare o scalare i pod, è il deployment a occuparsene. Il deployment gestisce inoltre il riavvio dei pod che si arrestano per qualsiasi motivo.
Guarda un esempio rapido:
I pod sono collegati alla durata del nodo su cui vengono creati. Nell'esempio precedente, Node3 si è arrestato (e di conseguenza anche un pod). Anziché creare manualmente un nuovo pod e trovare un nodo in cui ospitarlo, il deployment ha creato un nuovo pod e lo ha avviato su Node2.
Non male!
È il momento di combinare tutto ciò che hai appreso su pod e servizi per suddividere l'applicazione monolitica in servizi più piccoli utilizzando i deployment.
Attività 10: crea i deployment
Suddividerai l'app monolitica in tre parti separate:
- auth - Genera token JWT per gli utenti autenticati.
- hello - Dà il benvenuto agli utenti autenticati.
- frontend - Indirizza il traffico ai servizi auth e hello.
Ora è tutto pronto per la creazione dei deployment, uno per ciascun servizio. Successivamente, definirai i servizi interni per i deployment auth e hello e il servizio esterno per il deployment del frontend. Al termine sarai in grado di interagire con i microservizi proprio come con il monolite, con la differenza che ora è possibile scalare ed eseguire il deployment di ogni porzione in modo indipendente.
- Per iniziare, esamina il file di configurazione del deployment auth.
(Output)
Il deployment crea 1 replica: stai utilizzando la versione 2.0.0 del container auth.
Quando esegui il comando kubectl create
per creare il deployment auth, viene creato un pod conforme ai dati nel manifest del deployment. Ciò significa che puoi scalare il numero di pod modificando il valore specificato nel campo Repliche.
- Procedi alla creazione del tuo oggetto deployment:
- Ora crea un servizio per il deployment auth. Usa il comando
kubectl create
per creare il servizio auth:
- Ora esegui la stessa operazione per creare ed esporre il deployment hello:
- Eseguila ancora una volta per creare ed esporre il deployment frontend.
- Interagisci con il frontend recuperando il suo IP esterno e condividendolo tramite comando curl:
EXTERNAL-IP
è pending.In questo modo ottieni una risposta da hello.
Verifica l'attività completata
Fai clic su Controlla i miei progressi qui sotto per verificare lo stato di avanzamento del lab. Se hai creato correttamente i deployment Auth, Hello e Frontend, visualizzerai un punteggio di valutazione.
Complimenti!
Complimenti! Hai sviluppato un'applicazione multiservizio utilizzando Kubernetes. Le competenze che hai acquisito ti permetteranno di eseguire il deployment di applicazioni complesse su Kubernetes sfruttando una raccolta di deployment e servizi.
Prossimi passi/Scopri di più
- Puoi seguire le novità di Kubernetes su X e sul blog della community.
- Ricorda che Kubernetes è un progetto open source (http://kubernetes.io/) ospitato su GitHub. Feedback e contributi sono sempre benvenuti.
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: 29 aprile 2024
Ultimo test del lab: 29 aprile 2024
Copyright 2024 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.