Questo insieme di tutorial è rivolto ad amministratori IT e operatori che vogliono eseguire il deployment, eseguire e gestire ambienti di applicazioni moderni che funzionano su Google Kubernetes Engine (GKE). Man mano che procedi in questa serie di tutorial, imparerai a configurare monitoraggio e avvisi, scalare i carichi di lavoro e simulare in errore, il tutto utilizzando l'applicazione di microservizi di esempio di Cymbal Bank:
- Crea un cluster ed esegui il deployment di un'applicazione di esempio
- Monitoraggio con Google Cloud Managed Service per Prometheus
- Scala i carichi di lavoro
- Simula un errore (questo tutorial)
Panoramica e obiettivi
Le applicazioni devono essere in grado di tollerare interruzioni e guasti. Questa funzionalità consente agli utenti di continuare ad accedere alle tue applicazioni anche in caso di problemi. L'applicazione di esempio Cymbal Bank è progettata per gestire gli errori e continuare a funzionare, senza che tu debba risolvere i problemi. Per fornire questa resilienza, i cluster regionali GKE distribuiscono i nodi di calcolo tra le zone e il controller Kubernetes risponde automaticamente ai problemi di servizio all'interno del cluster.
In questo tutorial imparerai a simulare un errore in Google Cloud e a vedere come rispondono i servizi di applicazione nel tuo cluster GKE. Imparerai a completare le seguenti attività:
- Esamina la distribuzione di nodi e servizi.
- Simula un errore di un nodo o di una zona.
- Verifica che i servizi continuino a essere eseguiti sui nodi rimanenti.
Costi
È in corso l'abilitazione di GKE e il deployment dell'applicazione di esempio di Cymbal Bank per Questa serie di tutorial prevede l'addebito di costi per cluster GKE su Google Cloud come elencato Pagina dei prezzi fino a quando non disabiliterai GKE o eliminerai il progetto.
Sei inoltre responsabile di altri costi di Google Cloud sostenuti durante l'esecuzione dell'applicazione di esempio Cymbal Bank, ad esempio gli addebiti per le VM Compute Engine.
Prima di iniziare
Per scoprire come simulare un errore, devi completare la primo tutorial per creare un cluster GKE che utilizzi Autopilot ed eseguire il deployment l'applicazione di esempio basata su microservizi di Cymbal Bank.
Ti consigliamo di completare questa serie di tutorial per le app scalabili in ordine. Man mano che procedi nella serie di tutorial, acquisisci nuove competenze e utilizzi e altri prodotti e servizi Google Cloud.
Rivedi la distribuzione di nodi e servizi
In Google Cloud, una regione è una posizione geografica specifica in cui puoi
ospitare le tue risorse. Le regioni includono tre o più zone. Ad esempio,
La regione us-central1
indica una regione del Midwest degli Stati Uniti
con più zone, ad esempio us-central1-a
, us-central1-b
e
us-central1-c
. Le zone hanno connessioni di rete a bassa latenza e a larghezza di banda elevata
nella stessa regione.
Per eseguire il deployment di applicazioni a tolleranza di errore con disponibilità elevata, Google consiglia di eseguire il deployment delle applicazioni in più zone regioni. Questo approccio aiuta a proteggerti da errori imprevisti dei componenti, fino a una zona o una regione.
Quando hai creato il tuo cluster GKE nel primo tutorial, alcune sono stati utilizzati i valori predefiniti di configurazione. Per impostazione predefinita, un cluster GKE che utilizza Autopilot crea ed esegue nodi che si estendono su più zone della regione specificata. Questo approccio significa che l'applicazione di esempio Cymbal Bank è già dispiegamento in più zone, il che contribuisce a proteggerti da guasti imprevisti.
Controlla la distribuzione dei nodi nel tuo cluster GKE:
kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
Il risultato è simile all'output di esempio seguente che mostra i nodi sono distribuite in tutte e tre le zone della regione:
NAME ZONE INT_IP scalable-apps-pool-2-node5 us-central1-c 10.148.0.6 scalable-apps-pool-2-node6 us-central1-c 10.148.0.7 scalable-apps-pool-2-node2 us-central1-a 10.148.0.8 scalable-apps-pool-2-node1 us-central1-a 10.148.0.9 scalable-apps-pool-2-node3 us-central1-b 10.148.0.5 scalable-apps-pool-2-node4 us-central1-b 10.148.0.4
Controlla la distribuzione dei servizi dell'applicazione di esempio di Cymbal Bank su dei nodi del tuo cluster GKE:
kubectl get pods -o wide
L'esempio di output seguente mostra che i servizi sono distribuiti tra i nodi del cluster. Dal passaggio precedente per controllare la distribuzione dei nodi, questo output mostra che i servizi vengono eseguiti nelle zone della regione:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 6m30s 10.28.1.5 scalable-apps-pool-2-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 6m30s 10.28.5.6 scalable-apps-pool-2-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 6m29s 10.28.4.6 scalable-apps-pool-2-node2 frontend-747b84bff4-xvjxq 1/1 Running 0 6m29s 10.28.3.6 scalable-apps-pool-2-node6 ledger-db-0 1/1 Running 0 6m29s 10.28.5.7 scalable-apps-pool-2-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 6m29s 10.28.1.6 scalable-apps-pool-2-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 6m29s 10.28.4.7 scalable-apps-pool-2-node2 transactionhistory-5dd7c7fd77-cmc2w 1/1 Running 0 6m29s 10.28.3.7 scalable-apps-pool-2-node6 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 6m28s 10.28.5.8 scalable-apps-pool-2-node1
Simulare un'interruzione del servizio
Google progetta le zone per ridurre al minimo il rischio di guasti correlati causati da interruzioni dell'infrastruttura fisica come alimentazione, raffreddamento o reti. Tuttavia, possono verificarsi problemi imprevisti. Se un nodo o una zona non sono disponibili, vuoi che i servizi continuino a essere eseguiti su altri nodi o in zone della stessa regione.
Il controller Kubernetes monitora lo stato di nodi, servizi e deployment nel tuo cluster. Se si verifica un'interruzione imprevista, riavvia le risorse interessate e il traffico viene indirizzato ai nodi funzionanti.
Per simulare un'interruzione in questo tutorial, isola e svuota i nodi in una delle tue zone. Questo approccio simula cosa succede quando un nodo si guasta o quando si verifica un problema in un'intera zona. Il controller Kubernetes dovrebbe riconoscere che alcuni Servizi non sono più disponibili e devono essere riavviati sui nodi di altre zone:
Isola e scollega i nodi in una delle zone. L'esempio seguente ha come target i due nodi in
us-central1-a
:kubectl drain scalable-apps-pool-2-node1 \ --delete-emptydir-data --ignore-daemonsets kubectl drain scalable-apps-pool-2-node2 \ --delete-emptydir-data --ignore-daemonsets
Questo comando contrassegna i nodi come non pianificabili in modo che i pod non possano più essere eseguiti su questi nodi. Kubernetes ripianifica i pod in altri nodi in funzione zone.
Controlla la risposta all'errore simulata
In un tutorial precedente di questa serie, hai imparato a configurare l'istanza Prometheus gestita per il tuo cluster GKE in modo da monitorare alcuni dei servizi e generare avvisi in caso di problemi. Se i pod erano in esecuzione su nodi nella zona in cui simula un'interruzione, ricevi messaggi di notifica Slack dagli avvisi generate da Prometheus. Questo comportamento mostra come puoi creare un ambiente di applicazioni moderno che monitora lo stato dei deployment, ti avvisa in caso di problemi e può adeguarsi automaticamente a modifiche o errori di caricamento.
Il cluster GKE risponde automaticamente all'interruzione simulata. Tutti i servizi sui nodi interessati vengono riavviati sui nodi rimanenti.
Controlla la distribuzione dei nodi nel tuo cluster GKE di nuovo:
kubectl get nodes -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
Il risultato è simile all'output di esempio seguente che mostra i nodi ora sono distribuiti solo in due delle zone della regione:
NAME ZONE INT_IP scalable-apps-pool-2-node5 us-central1-c 10.148.0.6 scalable-apps-pool-2-node6 us-central1-c 10.148.0.7 scalable-apps-pool-2-node3 us-central1-b 10.148.0.5 scalable-apps-pool-2-node4 us-central1-b 10.148.0.4
Il controller Kubernetes riconosce che due nodi non sono più disponibili e ridistribuisce i servizi tra i nodi disponibili. Tutti i servizi dovrebbero continuare a funzionare.
Controlla la distribuzione dei servizi dell'applicazione di esempio Cymbal Bank tra i nodi del tuo cluster GKE:
kubectl get pods -o wide
L'esempio di output seguente mostra che i servizi sono distribuiti tra i nodi rimanenti del cluster. Dal passaggio precedente per controllare come di nodi sono distribuiti, questo output mostra che ora i servizi vengono eseguiti in due zone della regione:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 scalable-apps-pool-2-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 9m21s 10.28.5.6 scalable-apps-pool-2-node5 contacts-7ddc76d94-qv4x5 1/1 Running 0 9m20s 10.28.4.6 scalable-apps-pool-2-node4 frontend-747b84bff4-xvjxq 1/1 Running 0 28m 10.28.3.6 scalable-apps-pool-2-node6 ledger-db-0 1/1 Running 0 9m24s 10.28.5.7 scalable-apps-pool-2-node3 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 scalable-apps-pool-2-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 9m21s 10.28.4.7 scalable-apps-pool-2-node5 transactionhistory-5dd7c7fd77-cmc2w 1/1 Running 0 28m 10.28.3.7 scalable-apps-pool-2-node6 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 9m20s 10.28.5.8 scalable-apps-pool-2-node1
Guarda i
AGE
dei Servizi. Nell'output dell'esempio precedente, alcuni dei servizi hanno un'età inferiore rispetto ad altri nell'applicazione di esempio di Cymbal Bank. Questi servizi più recenti venivano eseguiti in precedenza su uno dei nodi in cui hai simulato l'errore. Il controller Kubernetes ha riavviato questi servizi in data nodi disponibili.
In uno scenario reale, dovresti risolvere il problema o attendere che la risposta di manutenzione. Se hai configurato Prometheus per inviare Slack in base agli avvisi, riceverai queste notifiche. Se vuoi, puoi anche ripetere i passaggi del tutorial precedente per scalare le risorse per vedere come il tuo cluster GKE risponde con un aumento del carico quando sono disponibili solo due zone nella regione. Il cluster deve fare lo scale up le due zone rimanenti disponibili.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate. In questo tutorial, elimina il progetto che hai creato.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
Prima di iniziare a creare il tuo ambiente cluster GKE simile a quello che hai imparato in questa serie di tutorial, esaminare alcune considerazioni sulla produzione.