In qualità di Cloud Engineer, ti viene affidato il compito di gestire un'applicazione critica che aggiunge frequentemente funzionalità. Devi implementare nuove funzionalità e aggiornamenti riducendo al minimo l'impatto sugli utenti e i tempi di inattività dell'applicazione. L'applicazione è containerizzata ed è stato eseguito il deployment in Kubernetes. A volte, devi fare lo scale up e lo scale down in risposta ai cambiamenti della domanda degli utenti. Vuoi anche controllare il traffico all'applicazione da internet. Quando gestisci e aggiorni l'applicazione, tieni presente quanto segue:
Come si crea un manifest di deployment per il cluster?
Come puoi scalare manualmente il numero di pod nel tuo deployment?
Come puoi creare un servizio che controlli il traffico in entrata alla tua applicazione?
Come puoi implementare gli aggiornamenti con interruzioni minime per gli utenti?
Come si possono eseguire deployment canary per testare nuove funzionalità prima di portare a termine un'implementazione completa?
In qualità di professionista del cloud che ha familiarità con l'uso di Azure Kubernetes Service (AKS), probabilmente hai utilizzato file manifest YAML per eseguire deployment Kubernetes su AKS. Probabilmente hai utilizzato le pipeline DevOps per rendere il codice dell'applicazione e i container disponibili per i tuoi cluster Kubernetes.
Per scalare il numero di pod in risposta alla domanda, puoi modificare manualmente il file manifest o utilizzare i comandi kubectl. Per controllare il traffico in entrata verso la tua applicazione, devi creare il piano per il deployment del bilanciatore del carico nella pipeline DevOps ed eseguirlo. Quando devi aggiornare l'immagine container, devi eseguire la pipeline DevOps per rendere disponibile l'immagine container e poi utilizzare i comandi kubectl per attivare l'implementazione di un deployment.
Per eseguire un aggiornamento canary, devi installare Prometheus, configurare la pipeline, aggiungere il file manifest ed eseguire la pipeline di deployment.
Tenendo conto di questo, ora vedrai come creare manifest di deployment per Google Kubernetes Engine (GKE) per creare, scalare e aggiornare i deployment.
Panoramica
In questo lab esplorerai le nozioni di base sull'utilizzo dei manifest di deployment. I manifest sono file contenenti le configurazioni necessarie per un deployment che possono essere utilizzati in diversi pod. I manifest sono facili da modificare.
Obiettivi
In questo lab imparerai a:
Creare manifest di deployment, eseguire il deployment nel cluster e verificare la ripianificazione dei pod quando i nodi sono disabilitati
Attivare lo scale up e lo scale down manuale dei pod nei deployment
Attivare l'implementazione (aggiornamento in sequenza a una nuova versione) e i rollback dei deployment
Eseguire un deployment canary
Configurazione del lab
Accedi al lab
Per ciascun lab, riceverai un nuovo progetto Google Cloud e un insieme di risorse per un periodo di tempo limitato senza alcun costo aggiuntivo.
Accedi a Qwiklabs utilizzando una finestra di navigazione in incognito.
Tieni presente la durata dell'accesso al lab (ad esempio, 1:15:00) e assicurati di finire entro quell'intervallo di tempo.
Non è disponibile una funzionalità di pausa. Se necessario, puoi riavviare il lab ma dovrai ricominciare dall'inizio.
Quando è tutto pronto, fai clic su Inizia lab.
Annota le tue credenziali del lab (Nome utente e Password). Le userai per accedere a Google Cloud Console.
Fai clic su Apri console Google.
Fai clic su Utilizza un altro account e copia/incolla le credenziali per questo lab nei prompt.
Se utilizzi altre credenziali, compariranno errori oppure ti verranno addebitati dei costi.
Accetta i termini e salta la pagina di ripristino delle risorse.
Una volta completati i passaggi di accesso iniziali, viene visualizzata la dashboard del progetto.
Attiva Google Cloud Shell
Google 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.
Google Cloud Shell fornisce l'accesso da riga di comando alle risorse Google Cloud.
Nella barra degli strumenti in alto a destra della console Cloud, fai clic sul pulsante Apri Cloud Shell.
Fai clic su Continua.
Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Quando la connessione è attiva, l'autenticazione è già avvenuta e il progetto è impostato sul tuo PROJECT_ID. Ad esempio:
gcloud è lo strumento a riga di comando di Google Cloud. È preinstallato su Cloud Shell e supporta il completamento.
Puoi visualizzare il nome dell'account attivo con questo comando:
Passa alla directory che contiene i file di esempio per questo lab:
cd ~/ak8s/Deployments/
Crea un manifest di deployment
Creerai un deployment mediante il manifest di deployment di esempio denominato nginx-deployment.yaml che ti è stato fornito. Questo deployment è configurato per eseguire tre repliche di pod con un singolo container nginx in ogni pod in ascolto sulla porta TCP 80:
Per sottoporre a deployment il manifest, esegui questo comando:
kubectl apply -f ./nginx-deployment.yaml
Per visualizzare un elenco di deployment, esegui questo comando:
kubectl get deployments
L'output dovrebbe essere simile all'esempio seguente.
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 3 0 3s
Attendi qualche secondo e ripeti il comando finché il numero dei deployment CORRENTI riportato dal comando non corrisponde al numero di deployment DESIDERATI.
L'output finale dovrebbe essere simile all'esempio seguente.
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 42s
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Crea e sottoponi a deployment il manifest del deployment nginx
Attività 2: fai lo scale up e lo scale down manuale del numero di pod nei deployment
A volte, hai la necessità di chiudere un'istanza pod. Altre volte, vuoi che siano in esecuzione dieci pod. In Kubernetes, puoi scalare un determinato pod fino al numero di istanze che preferisci. Per chiuderle, devi semplicemente scalarle fino a zero.
In questa attività, farai lo scale up e lo scale down dei pod nella console Google Cloud e in Cloud Shell.
Fai lo scale up e lo scale down dei pod nella console
Passa alla scheda della console Google Cloud.
Nel menu di navigazione (), fai clic su Kubernetes Engine > Carichi di lavoro.
Fai clic su nginx-deployment (il tuo deployment) per aprire la pagina Dettagli deployment.
In alto, fai clic su AZIONI > Scala> Modifica repliche.
Digita 1 e fai clic su SCALA.
Viene fatto lo scale down del tuo cluster. Dovresti visualizzare lo stato di aggiornamento del pod in Pod gestiti. Potrebbe essere necessario fare clic su Aggiorna.
Fai lo scale up e lo scale down dei pod nella shell
Torna alla scheda del browser di Cloud Shell.
In Cloud Shell, per visualizzare un elenco dei pod nei deployment, esegui questo comando:
kubectl get deployments
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 3m
Per ripristinare lo scale up dei pod a tre repliche, esegui questo comando:
Per visualizzare un elenco dei pod nei deployment, esegui questo comando:
kubectl get deployments
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 4m
Attività 3: attiva l'implementazione e il rollback di un deployment
L'implementazione di un deployment viene attivata solo nel caso in cui il modello di pod del deployment (ossia .spec.template) viene modificato, ad esempio se vengono aggiornate le etichette o le immagini container del modello. Altri aggiornamenti, ad esempio lo scale up o lo scale down del deployment, non attivano l'implementazione.
In questa attività, ti occuperai di attivare l'implementazione e poi il rollback del deployment.
Attiva l'implementazione di un deployment
Per aggiornare la versione di nginx nel deployment, esegui questo comando:
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record
In questo modo, l'immagine container del tuo deployment viene aggiornata a nginx v1.9.1.
Per visualizzare lo stato dell'implementazione, esegui questo comando:
kubectl rollout status deployment.v1.apps/nginx-deployment
L'output dovrebbe essere simile all'esempio seguente.
Output:
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 1 old replicas pending termination...
Waiting for rollout to finish: 1 old replicas pending termination...
deployment "nginx-deployment" successfully rolled out
Per verificare la modifica, recupera l'elenco dei deployment:
kubectl get deployments
L'output dovrebbe essere simile all'esempio seguente.
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 6m
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Aggiorna la versione di nginx nel deployment
Visualizza la cronologia dell'implementazione del deployment:
kubectl rollout history deployment nginx-deployment
L'output dovrebbe essere simile all'esempio seguente, ma potrebbe non corrispondere in modo esatto.
Visualizza i dettagli dell'ultima revisione del deployment:
kubectl rollout history deployment/nginx-deployment --revision=3
L'output dovrebbe essere simile all'esempio seguente. Potrebbe non corrispondere in modo esatto, ma mostrerà che è stato eseguito il rollback della revisione corrente a nginx:1.7.9.
Attività 4: definisci il tipo di servizio nel manifest
In questa attività, creerai e verificherai un servizio che controlla il traffico in entrata verso la tua applicazione. I servizi possono essere configurati come tipi ClusterIP, NodePort o LoadBalancer. In questo lab, configurerai un servizio LoadBalancer.
Definisci i tipi di servizi nel manifest
Ti è stato fornito un file manifest denominato service-nginx.yaml che esegue il deployment di un tipo di servizio LoadBalancer. Questo servizio è configurato per distribuire il traffico in entrata dalla porta TCP 60000 alla porta 80 in tutti i container che hanno l'etichetta app: nginx.
In Cloud Shell, per eseguire il deployment del manifest, esegui questo comando:
kubectl apply -f ./service-nginx.yaml
Questo manifest definisce un servizio e lo applica ai pod che corrispondono al selettore. In questo caso, il manifest viene applicato al container nginx di cui è stato eseguito il deployment nell'attività 1. Questo servizio viene anche applicato a qualsiasi altro pod con l'etichetta app: nginx, compresi quelli creati dopo il servizio.
Verifica la creazione del servizio LoadBalancer
Per visualizzare i dettagli del servizio nginx, esegui questo comando:
kubectl get service nginx
L'output dovrebbe essere simile all'esempio seguente.
Output:
NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE
nginx 10.X.X.X X.X.X.X 60000/TCP run=nginx 1m
Quando compare l'IP esterno, apri http://[EXTERNAL_IP]:60000/ in una nuova scheda del browser per visualizzare il server fornito mediante il bilanciamento del carico di rete.
Nota: potrebbero volerci alcuni secondi prima che il campo ExternalIP venga completato per il tuo servizio. È normale. Esegui nuovamente il comando kubectl get services nginx a intervalli regolari di alcuni secondi fino a quando il campo non viene completato.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Esegui il deployment del file manifest che esegue il deployment del tipo di servizio LoadBalancer
Attività 5: esegui un deployment canary
Un deployment canary è un deployment separato, utilizzato per testare una nuova versione dell'applicazione. Un singolo servizio ha come destinazione sia i deployment canary che quelli normali. E può indirizzare un sottoinsieme di utenti alla versione canary per ridurre il rischio per le nuove release.
Il file manifest nginx-canary.yaml fornito sottopone a deployment un unico pod che esegue una versione di nginx più nuova rispetto al tuo deployment principale. In questa attività, creerai un deployment canary utilizzando questo nuovo file di deployment:
Il manifest per il servizio nginx di cui hai eseguito il deployment nell'attività precedente utilizza un selettore etichetta per avere come destinazione i pod con l'etichetta app: nginx. Sia il deployment normale che questo nuovo deployment canary hanno l'etichetta app: nginx. Le connessioni in entrata verranno distribuite dal servizio ai pod del deployment canary e di quello normale. Il deployment canary ha meno repliche (pod) rispetto a quello normale, pertanto è disponibile per un numero inferiore di utenti rispetto a quest'ultimo.
Crea il deployment canary in base al file di configurazione:
kubectl apply -f nginx-canary.yaml
Una volta completato il deployment, verifica che siano presenti entrambi i deployment: nginx e nginx-canary:
kubectl get deployments
Torna alla scheda del browser collegata all'IP del servizio LoadBalancer esterno e aggiorna la pagina. Dovresti continuare a vedere la pagina Welcome to nginx standard.
Torna a Cloud Shell e fai lo scale down del deployment principale a 0 repliche:
Verifica che ora l'unica replica in esecuzione sia il deployment canary:
kubectl get deployments
Torna alla scheda del browser collegata all'IP del servizio LoadBalancer esterno e aggiorna la pagina. Dovresti continuare a vedere la pagina Welcome to nginx standard, che indica che il servizio esegue il bilanciamento automatico del traffico verso il deployment canary.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Crea un deployment canary
Affinità sessione
La configurazione del servizio utilizzata nel lab non garantisce che tutte le richieste provenienti da un unico client si connettano sempre allo stesso pod. Ogni richiesta viene trattata separatamente e può connettersi al deployment nginx normale o al deployment nginx-canary.
Questa possibilità di passare da una versione all'altra può causare problemi in caso di modifiche significative alle funzionalità della versione canary. Per evitare questo problema, puoi impostare il campo sessionAffinity su ClientIP nella specifica del servizio qualora sia necessaria una prima richiesta da parte del client per determinare quale pod verrà utilizzato per tutte le connessioni successive.
In questo lab hai scoperto in che modo GKE utilizza il file manifest per eseguire il deployment, scalare ed eseguire un aggiornamento canary dell'applicazione. Ecco alcune delle principali analogie e differenze tra GKE e AKS.
Analogie:
GKE e AKS sono entrambi servizi Kubernetes gestiti che consentono agli sviluppatori di eseguire il deployment, gestire e scalare le applicazioni containerizzate.
La struttura e la sintassi di base dei file YAML per i deployment Kubernetes sono uguali per GKE e AKS.
AKS e GKE usano entrambi i comandi kubectl.
Differenze:
In GKE puoi specificare gli attributi di cluster, pod e gestione senza dover creare una pipeline DevOps, come faresti per i deployment AKS. Questo perché GKE dispone dell'infrastruttura di backend necessaria per eseguire le attività di provisioning utilizzando il file manifest.
Termina il lab
Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.
Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.
Il numero di stelle corrisponde alle seguenti valutazioni:
1 stella = molto insoddisfatto
2 stelle = insoddisfatto
3 stelle = esperienza neutra
4 stelle = soddisfatto
5 stelle = molto soddisfatto
Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.
Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.
Copyright 2020 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.
I lab creano un progetto e risorse Google Cloud per un periodo di tempo prestabilito
I lab hanno un limite di tempo e non possono essere messi in pausa. Se termini il lab, dovrai ricominciare dall'inizio.
In alto a sinistra dello schermo, fai clic su Inizia il lab per iniziare
Utilizza la navigazione privata
Copia il nome utente e la password forniti per il lab
Fai clic su Apri console in modalità privata
Accedi alla console
Accedi utilizzando le tue credenziali del lab. L'utilizzo di altre credenziali potrebbe causare errori oppure l'addebito di costi.
Accetta i termini e salta la pagina di ripristino delle risorse
Non fare clic su Termina lab a meno che tu non abbia terminato il lab o non voglia riavviarlo, perché il tuo lavoro verrà eliminato e il progetto verrà rimosso
Questi contenuti non sono al momento disponibili
Ti invieremo una notifica via email quando sarà disponibile
Bene.
Ti contatteremo via email non appena sarà disponibile
Un lab alla volta
Conferma per terminare tutti i lab esistenti e iniziare questo
Utilizza la navigazione privata per eseguire il lab
Utilizza una finestra del browser in incognito o privata per eseguire questo lab. In questo modo eviterai eventuali conflitti tra il tuo account personale e l'account Studente, che potrebbero causare addebiti aggiuntivi sul tuo account personale.
Architecting with Google Kubernetes Engine: Creazione di deployment Google Kubernetes Engine
Durata:
Configurazione in 11 m
·
Accesso da 60 m
·
Completamento in 60 m