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.
- 
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.
Nota: per visualizzare un menu con un elenco di prodotti e servizi Google Cloud, fai clic sul menu di navigazione in alto a sinistra oppure digita il nome del servizio o del prodotto nel campo di ricerca.
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:
 
gcloud auth list
Output:
Credentialed accounts:
 - @.com (active)
Output di esempio:
Credentialed accounts:
 - google1623327_student@qwiklabs.net
 
- Puoi elencare l'ID progetto con questo comando:
 
gcloud config list project
Output:
[core]
project = 
Output di esempio:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Nota: 
  la documentazione completa di gcloud è disponibile nella guida
  
    Panoramica dell'interfaccia a riga di comando gcloud
  .
Attività 1: crea manifest di deployment ed esegui il deployment nel cluster
In quest'attività, creerai un manifest di deployment per un pod all'interno del cluster.
Connettiti al cluster GKE del lab
- In Cloud Shell, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster:
 
export my_region={{{ project_0.default_region | REGION }}}
export my_cluster=dev-cluster
- Configura il completamento della scheda kubectl in Cloud Shell:
 
source <(kubectl completion bash)
- In Cloud Shell, configura l'accesso al tuo cluster per lo strumento a riga di comando kubectl, utilizzando questo comando:
 
gcloud container clusters get-credentials $my_cluster --region $my_region
Crea un manifest di deployment
Creerai un deployment mediante il manifest di deployment di esempio denominato nginx-deployment.yaml. Questo deployment è configurato per eseguire tre repliche di pod con un singolo container nginx in ogni pod in ascolto sulla porta TCP 80.
- Crea e apri un file denominato 
nginx-deployment.yaml con nano utilizzando questo comando: 
nano nginx-deployment.yaml
- Una volta aperto nano, incolla il seguente codice nel file 
nginx-deployment.yaml: 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27.0
        ports:
        - containerPort: 80
- 
Premi Ctrl+O e poi Invio per salvare il file modificato.
 
- 
Premi Ctrl+X per uscire dall'editor di testo nano.
 
- 
Per eseguire il deployment del 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 minuto 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 > Workload. 
- 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:
 
kubectl scale --replicas=3 deployment nginx-deployment
- 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 template del pod del deployment (ossia .spec.template) viene modificato, ad esempio se vengono aggiornate le etichette o le immagini container del template. 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.28.0 
In questo modo, l'immagine container del tuo deployment viene aggiornata a nginx v1.28.0.
- Per annotare l'implementazione con i dettagli della modifica, esegui questo comando:
 
kubectl annotate deployment nginx-deployment kubernetes.io/change-cause="version change to 1.28.0" --overwrite=true
- 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.
Output:
deployments "nginx-deployment"
REVISION  CHANGE-CAUSE
1         
2         version change to 1.28.0
Attiva il rollback di un deployment
Per eseguire il rollback dell'implementazione di un oggetto, puoi utilizzare il comando kubectl rollout undo.
- Per eseguire il rollback alla versione precedente del deployment nginx, esegui questo comando:
 
kubectl rollout undo deployments nginx-deployment
- Visualizza la cronologia aggiornata 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.
Output:
deployments "nginx-deployment"
REVISION  CHANGE-CAUSE
2        version change to 1.28.0
3         
Nota: l'aggiornamento più recente non è specificato per CHANGE-CAUSE perché non abbiamo utilizzato il comando kubectl annotate.
- 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.27.0.
Output:
deployments "nginx-deployment" with revision #3
Pod Template:
  Labels:       app=nginx
        pod-template-hash=3123191453
  Containers:
   nginx:
    Image:      nginx:1.27.0
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:        
    Mounts:     
  Volumes:      
Attività 4: definisci il tipo di servizio nel manifest
In questa attività, creerai e verificherai un servizio che controlla il traffico in entrata verso un'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.
- Crea e apri un file denominato 
service-nginx.yaml con nano utilizzando questo comando: 
nano service-nginx.yaml
- Una volta aperto nano, incolla il seguente codice nel file 
service-nginx.yaml: 
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 60000
    targetPort: 80
- 
Premi Ctrl+O e poi Invio per salvare il file modificato.
 
- 
Premi Ctrl+X per uscire dall'editor di testo nano.
 
- 
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   Type          CLUSTER-IP   EXTERNAL-IP    PORT(S)           AGE
nginx  LoadBalancer  10.X.X.X     X.X.X.X        60000:31798/TCP   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.
In questa attività creerai un deployment canary per eseguire il deployment di un singolo pod che esegue una versione di nginx più nuova rispetto al tuo deployment principale.
- Crea e apri un file denominato 
nginx-canary.yaml con nano utilizzando questo comando: 
nano nginx-canary.yaml
- Una volta aperto nano, incolla il seguente codice nel file 
nginx-canary.yaml: 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-canary
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        track: canary
        Version: 1.28.0
    spec:
      containers:
      - name: nginx
        image: nginx:1.28.0
        ports:
        - containerPort: 80
- 
Premi Ctrl+O e poi Invio per salvare il file modificato.
 
- 
Premi Ctrl+X per uscire dall'editor di testo nano.
 
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 i deployment nginx e nginx-canary siano presenti:
 
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:
 
kubectl scale --replicas=0 deployment nginx-deployment
- 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.
Ad esempio:
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer
  sessionAffinity: ClientIP
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 60000
    targetPort: 80
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.