Esegui il deployment, scala e aggiorna il tuo sito web con Google Kubernetes Engine (GKE)

1. Introduzione

Gestire siti web e applicazioni è tutt'altro che semplice:

si verificano errori inaspettati, i server subiscono arresti anomali, l'aumento delle richieste provoca un aumento delle risorse necessarie e apportare modifiche senza tempo di inattività è complicato e stressante.

Immagina uno strumento che ti aiuti a fare tutto questo e che ti consenta persino di automatizzare le attività. Con GKE, non solo è possibile, ma è facile. In questo codelab, assumerai il ruolo di uno sviluppatore che gestisce un sito web di e-commerce per un'azienda fittizia, Fancy Store. A causa di problemi di scalabilità e interruzioni del servizio, ti è stato affidato il compito di eseguire il deployment dell'applicazione su GKE.

L'ordine degli esercizi rispecchia l'esperienza di un Cloud Developer comune:

  1. Creare un cluster GKE.
  2. Crea un container Docker.
  3. Esegui il deployment del container in GKE.
  4. Esporre il container tramite un servizio.
  5. Configura la scalabilità del container su più repliche.
  6. Modifica il sito web.
  7. Implementa una nuova versione senza tempi di inattività.

Diagramma dell'architettura

ddba666bd2b02d0d.png

Obiettivi didattici

  • Come creare un cluster GKE
  • Creare un'immagine Docker
  • Eseguire il deployment delle immagini Docker su Kubernetes
  • Assicurare la scalabilità di un'applicazione su Kubernetes
  • Eseguire un aggiornamento in sequenza su Kubernetes

Prerequisiti

  • Un Account Google con accesso amministrativo per creare progetti o un progetto con ruolo di proprietario del progetto.
  • Conoscenza di base di Docker e Kubernetes (se non hai una conoscenza di base, rivedi Docker e Kubernetes ora).

2. Configurazione dell'ambiente

Configurazione dell'ambiente autonomo

Se non hai ancora un Account Google, devi crearne uno. Accedi a Google Cloud Console e crea un nuovo progetto.

53dad2cefdae71da.png

Screenshot from 2016-02-10 12:45:26.png

Ricorda che l'ID progetto è un nome univoco tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, ci dispiace). In seguito verrà chiamato PROJECT_ID.

Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse Google Cloud. I nuovi utenti di Google Cloud possono beneficiare di una prova senza costi di 300$. Se non sei un nuovo utente, non preoccuparti perché il codelab non dovrebbe costarti più di qualche euro. Tuttavia, il codelab potrebbe costarti di più se utilizzi più risorse o le lasci in esecuzione (vedi la sezione "Pulizia" alla fine). Per ulteriori informazioni, vedi Prezzi.

Cloud Shell

Anche se puoi gestire Google Cloud e GKE da remoto con il tuo laptop, per il codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Ciò significa che per questo codelab ti servirà solo un browser (sì, funziona su Chromebook).

  1. Per attivare Cloud Shell dalla console Cloud, fai clic su Attiva Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID.

gcloud auth list

Output comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

Se per qualche motivo il progetto non è impostato, esegui questo comando:

gcloud config set project <PROJECT_ID>

Stai cercando PROJECT_ID? Controlla l'ID che hai utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, che potrebbero essere utili quando esegui i comandi futuri.

echo $GOOGLE_CLOUD_PROJECT

Output comando

<PROJECT_ID>
  1. Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f

Puoi scegliere una serie di zone diverse. Per saperne di più, consulta Regioni e zone.

3. Crea un cluster GKE

Ora che il tuo ambiente di sviluppo è pronto, ti serve un cluster GKE in cui eseguire il deployment del sito web. Prima di creare un cluster, devi assicurarti che siano abilitate le API appropriate. Esegui il comando seguente per abilitare l'API Containers:

gcloud services enable container.googleapis.com

Ora puoi creare il cluster. Segui i passaggi riportati di seguito per creare un cluster denominato fancy-cluster con 3 nodi:

gcloud container clusters create fancy-cluster --num-nodes 3

La creazione del cluster potrebbe richiedere diversi minuti. Dopodiché, esegui questo comando e osserva le tre istanze di macchine virtuali (VM) worker del cluster:

gcloud compute instances list

Output:

NAME                                          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-fancy-cluster-default-pool-ad92506d-1ng3  us-east4-a  n1-standard-1               10.150.0.7   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4fvq  us-east4-a  n1-standard-1               10.150.0.5   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4zs3  us-east4-a  n1-standard-1               10.150.0.6   XX.XX.XX.XX    RUNNING

Puoi visualizzare il cluster e le relative informazioni anche nella console Cloud. Fai clic sul pulsante del menu nell'angolo in alto a sinistra, scorri verso il basso fino a Kubernetes Engine e fai clic su Cluster. Dovresti vedere il cluster denominato fancy-cluster.

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

Complimenti! Hai creato il tuo primo cluster.

4. clona il repository di codice sorgente

Poiché si tratta di un sito web esistente, devi solo clonare l'origine dal repository per concentrarti sulla creazione di immagini Docker e sul deployment su GKE.

Esegui i comandi seguenti per clonare il repository di origine nell'istanza di Cloud Shell e passare alla directory appropriata. Installerai anche le dipendenze Node.js in modo da poter testare l'applicazione prima del deployment.

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

In questo modo il repository viene clonato, la directory viene modificata e vengono installate le dipendenze necessarie per eseguire l'applicazione in locale. L'esecuzione dello script potrebbe richiedere alcuni minuti.

Esegui la due diligence e testa l'applicazione. Esegui questo comando per avviare il server web:

cd ~/monolith-to-microservices/monolith
npm start

Output:

Monolith listening on port 8080!

Puoi visualizzare l'anteprima dell'applicazione facendo clic sull'icona dell'anteprima web nel menu Cloud Shell e selezionando Anteprima sulla porta 8080.

5869738f0e9ec386.png

Dovrebbe aprirsi una nuova finestra in cui puoi vedere Fancy Store in azione.

9ed25c3f0cbe62fa.png

Puoi chiudere la finestra dopo aver visualizzato il sito web. Premi Control+C (Windows o Mac) nella finestra del terminale per arrestare il processo del server web.

5. crea il container in Docker con Cloud Build

Ora che i file sorgente sono pronti per l'uso, puoi "dockerizzare" l'applicazione.

Normalmente, useresti un approccio in due fasi che comprende la creazione di un container Docker e il relativo push a un registry per archiviare l'immagine da cui GKE esegue il pull. Tuttavia, puoi semplificare la procedura utilizzando Cloud Build per creare il container Docker e inserire l'immagine in Container Registry con un unico comando. Per visualizzare il processo manuale di creazione di un file Docker e del relativo push, consulta la Guida rapida per Container Registry.

Cloud Build comprime i file della directory e li sposta in un bucket Cloud Storage. Il processo di compilazione preleva quindi i file dal bucket e utilizza il Dockerfile per eseguire il processo di compilazione Docker. Poiché hai specificato il flag --tag con l'host gcr.io per l'immagine Docker, viene eseguito il push dell'immagine Docker risultante in Container Registry.

Innanzitutto, devi abilitare l'API Cloud Build eseguendo il comando seguente:

gcloud services enable cloudbuild.googleapis.com

Una volta abilitata l'API, esegui il comando seguente in Cloud Shell per avviare il processo di compilazione:

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

Il processo richiede alcuni minuti, ma al termine puoi visualizzare il seguente output nel terminale:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                  IMAGES                              STATUS
1ae295d9-63cb-482c-959b-bc52e9644d53  2019-08-29T01:56:35+00:00  33S       gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

Per visualizzare la cronologia delle build o per osservare lo svolgimento del processo in tempo reale, puoi andare alla console Google Cloud. Fai clic sul pulsante del menu nell'angolo in alto a sinistra, scorri verso il basso fino a CI/CD, fai clic su Cloud Build e infine su Cronologia. Qui puoi vedere un elenco delle build precedenti, ma dovrebbe essere presente solo quella che hai creato.

4c753ede203255f6.png

Se fai clic su ID build, puoi visualizzare tutti i dettagli relativi a quella build, incluso l'output del log.

Nella pagina dei dettagli della build, puoi visualizzare l'immagine del container creato facendo clic sul nome dell'immagine nella sezione delle informazioni sulla build.

6e88ed1643dfe629.png

6. Esegui il deployment del container in GKE

Ora che hai containerizzato il sito web ed eseguito il push del container in Container Registry, puoi eseguirne il deployment su Kubernetes.

Per eseguire il deployment e gestire applicazioni su un cluster GKE, devi comunicare con il sistema di gestione dei cluster di Kubernetes. In genere, puoi eseguire questa operazione utilizzando lo strumento a riga di comando kubectl.

Kubernetes rappresenta le applicazioni come Pod, che corrispondono a unità che rappresentano un container (o gruppo di container strettamente associati). Il Pod è l'unità più piccola di cui è possibile eseguire il deployment in Kubernetes. Qui, ogni pod contiene solo il container del tuo monolite.

Per eseguire il deployment dell'applicazione, devi creare un Deployment. Un deployment gestisce più copie della tua applicazione, chiamate repliche, e ne pianifica l'esecuzione sui singoli nodi del tuo cluster. In questo caso, il Deployment eseguirà soltanto un pod della tua applicazione. I deployment assicurano questa funzionalità creando un ReplicaSet. Il ReplicaSet assicura che sia sempre in esecuzione il numero di repliche specificato.

Il comando kubectl create deployment fa sì che Kubernetes crei sul tuo cluster un Deployment denominato monolith con 1 replica.

Esegui questo comando per eseguire il deployment della tua applicazione:

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

Verifica il deployment

Per verificare che il deployment sia stato creato correttamente, esegui questo comando (potrebbero essere necessari alcuni minuti prima che lo stato del pod diventi "In esecuzione"):

kubectl get all

Output:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-htm7z   1/1     Running   0          6m21s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           20m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       20m

L'output mostra quanto segue: Puoi vedere il tuo deployment corrente, il tuo ReplicaSet con un numero di pod desiderato pari a 1 e il tuo pod in esecuzione. Sembra che tu abbia creato tutto correttamente.

Per visualizzare singolarmente le risorse, puoi eseguire i seguenti comandi:

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

#You can also combine them
kubectl get pods,deployments

Per sperimentare appieno i vantaggi offerti da Kubernetes, puoi simulare un arresto anomalo del server, eliminare il pod e osservare i risultati.

Copia il nome del pod dal comando precedente ed esegui questo comando per eliminarlo:

kubectl delete pod/<POD_NAME>

Se sei abbastanza veloce, puoi eseguire il comando precedente per visualizzare di nuovo tutto e dovresti vedere due pod, uno in fase di arresto e l'altro in fase di creazione o in esecuzione:

kubectl get all

Output:

NAME                            READY   STATUS        RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running       0          4s
pod/monolith-7d8bc7bf68-htm7z   1/1     Terminating   0          9m35s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           24m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       24m

Perché è successo? Il set di repliche ha rilevato che il pod era in fase di arresto e ha attivato un nuovo pod per fare in modo che il numero di repliche continui a essere quello desiderato. Più avanti vedremo come fare lo scale out per assicurare che ci siano diverse istanze in esecuzione, in modo tale che, se una di queste ultime diventa non disponibile, gli utenti non noteranno tempi di inattività.

7. esponi il deployment GKE

Hai eseguito il deployment dell'applicazione su GKE, ma non hai modo di accedervi al di fuori del cluster. Per impostazione predefinita, i container che esegui su GKE non sono accessibili da internet perché non hanno un indirizzo IP esterno. Devi esporre esplicitamente la tua applicazione al traffico di internet tramite una risorsa di tipo Servizio. Un servizio fornisce il supporto IP e di networking per i pod della tua app. GKE crea un indirizzo IP esterno e un bilanciatore del carico (soggetto a fatturazione) per la tua app.

Per esporre il sito web su internet, esegui questo comando:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

Output:

service/monolith exposed

Accedi al servizio

GKE assegna l'indirizzo IP esterno alla risorsa Servizio, non a quella Deployment. Se vuoi trovare l'indirizzo IP esterno di cui GKE ha eseguito il provisioning per la tua applicazione, puoi utilizzare il comando kubectl get service per esaminare il servizio:

kubectl get service

Output:

NAME         CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
monolith     10.3.251.122    203.0.113.0     80:30877/TCP     3d

Dopo aver determinato l'indirizzo IP esterno della tua app, copialo. Accedi con il browser all'URL (ad esempio http://203.0.113.0) per verificare se la tua app è accessibile.

9ed25c3f0cbe62fa.png

Dovresti vedere lo stesso sito web di cui hai eseguito il test in precedenza. Complimenti! Il sito web viene eseguito interamente su Kubernetes.

8. configura la scalabilità del deployment GKE

Ora che hai un'istanza in esecuzione della tua app in GKE e l'hai esposta a internet, il tuo sito web è diventato estremamente popolare. Devi quindi assicurare che l'applicazione sia scalabile su più istanze, in modo che possa gestire il traffico. Scopri come scalare la tua applicazione fino a tre repliche.

Esegui questo comando per scalare il deployment fino a tre repliche:

kubectl scale deployment monolith --replicas=3

Output:

deployment.apps/monolith scaled

Verifica il deployment scalato

Per verificare che lo scale del deployment sia stato eseguito correttamente, esegui questo comando:

kubectl get all

Output:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running   0          36m
pod/monolith-7d8bc7bf68-7ds7q   1/1     Running   0          45s
pod/monolith-7d8bc7bf68-c5kxk   1/1     Running   0          45s

NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.27.240.1    <none>         443/TCP        25h
service/monolith     LoadBalancer   10.27.253.64   XX.XX.XX.XX   80:32050/TCP   6m7s

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   3         3         3            3           61m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   3         3         3       61m

Dovresti vedere tre istanze del pod in esecuzione. Inoltre, tieni presente che il numero desiderato di deployment e set di repliche è ora pari a tre.

9. apporta modifiche al sito web

Il team di marketing ti ha chiesto di modificare la home page del sito web. Secondo il team, dovrebbe essere più ricca di informazioni relative all'azienda e a ciò che commercializza. In questa sezione, aggiungerai del testo alla home page per soddisfare la richiesta del team di marketing. Uno dei nostri sviluppatori ha già creato le modifiche in un file denominato index.js.new. Puoi copiare il file in index.js e le modifiche verranno applicate. Segui le istruzioni riportate di seguito per applicare le modifiche appropriate.

Esegui i comandi seguenti, copia il file aggiornato nel file corretto e stampane il contenuto per controllare le modifiche:

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

Il codice risultante dovrebbe avere l'aspetto seguente:

/*
Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

Hai aggiornato i componenti React, ma devi creare la build dell'app React per generare i file statici. Esegui questo comando per creare la build dell'app React e copiarla nella directory pubblica del monolite:

cd ~/monolith-to-microservices/react-app
npm run build:monolith

Ora che il codice è stato aggiornato, devi ricreare il container Docker e pubblicarlo in Container Registry. Puoi usare lo stesso comando di prima, aggiornando però l'etichetta della versione.

Esegui questo comando per attivare un nuovo processo Cloud Build con una versione aggiornata 2.0.0 dell'immagine:

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

Premi Control+C (Windows o Mac) nella finestra del terminale per arrestare il processo del server web.

Nella sezione successiva, userai questa immagine per aggiornare l'applicazione senza tempi di inattività.

10. aggiorna il sito web senza tempi di inattività

Le modifiche sono state completate e il team di marketing è molto soddisfatto dei tuoi aggiornamenti. Ora è il momento di aggiornare il sito web senza interruzioni per gli utenti. Segui le istruzioni riportate sotto per aggiornare il sito web.

Gli aggiornamenti in sequenza di GKE assicurano che l'applicazione rimanga disponibile anche quando il sistema sostituisce le istanze della vecchia immagine container con quella nuova in tutte le repliche in esecuzione.

Dalla riga di comando, puoi comunicare a Kubernetes che vuoi aggiornare l'immagine del deployment a una nuova versione con il comando seguente:

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

Output:

deployment.apps/monolith image updated

Verifica il deployment

Puoi convalidare l'aggiornamento del deployment eseguendo questo comando:

kubectl get pods

Output:

NAME                        READY   STATUS              RESTARTS   AGE
monolith-584fbc994b-4hj68   1/1     Terminating         0          60m
monolith-584fbc994b-fpwdw   1/1     Running             0          60m
monolith-584fbc994b-xsk8s   1/1     Terminating         0          60m
monolith-75f4cf58d5-24cq8   1/1     Running             0          3s
monolith-75f4cf58d5-rfj8r   1/1     Running             0          5s
monolith-75f4cf58d5-xm44v   0/1     ContainerCreating   0          1s

Vedi tre nuovi pod in fase di creazione e i vecchi pod in fase di arresto. Puoi distinguere i nuovi pod da quelli precedenti guardando il valore della colonna AGE (Durata). Al termine del processo, vedrai nuovamente solo tre pod, ossia quelli che hai aggiornato.

Per verificare le modifiche, torna all'IP esterno del bilanciatore del carico e nota che l'app è stata aggiornata.

Esegui questo comando per elencare i servizi e visualizzare l'indirizzo IP se lo hai dimenticato:

kubectl get svc

Nel sito web dovrebbe essere presente il testo che hai aggiunto al componente della home page.

8006c9938dbd5aa5.png

11. Esegui la pulizia

Elimina repository Git

cd ~
rm -rf monolith-to-microservices

Elimina le immagini Container Registry

NOTA: se hai creato altre versioni, puoi utilizzare la stessa sintassi per eliminare anche queste immagini. Questo codelab presuppone che tu abbia solo due tag.

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

Elimina gli artefatti di Cloud Build da Cloud Storage

NOTA: se hai utilizzato Cloud Build per artefatti diversi da questo codelab, dovrai eliminare manualmente l'origine dal bucket Cloud Storage gs://<PROJECT_ID>_cloudbuild/source.

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

Elimina il servizio GKE

kubectl delete service monolith
kubectl delete deployment monolith

Elimina il cluster GKE

gcloud container clusters delete fancy-cluster

NOTA: l'esecuzione del comando potrebbe richiedere alcuni minuti.

12. Complimenti!

Hai eseguito il deployment del sito web, lo hai reso scalabile e lo hai aggiornato su GKE. Ora hai acquisito esperienza con Docker e Kubernetes.

Risorse aggiuntive