Un requisito normativo comune è che un'azienda possa dimostrare la propria capacità di ripristino di emergenza. Per le applicazioni eseguite nel cloud, questo requisito include l'affidabilità e la disponibilità dei servizi quando i server ospitati in una zona non sono disponibili per un periodo di tempo. Questo documento è destinato ad amministratori e architetti, operatori e amministratori di backup e ripristino di emergenza RER) che vogliono imparare a simulare un failover di zona quando utilizzano un cluster regionale Google Kubernetes Engine (GKE) Standard.
I cluster regionali GKE vengono creati in una regione scelta dall'utente ed eseguono il control plane su VM situate in più zone all'interno della regione scelta. I cluster GKE Autopilot sono sempre regionali, mentre i cluster GKE Standard possono essere regionali o a livello di zona. Questo tutorial utilizza un cluster regionale GKE Standard. I nodi del cluster comunicano con il control plane tramite un bilanciatore del carico, il che significa che la posizione del nodo e la posizione della VM del control plane non corrispondono sempre. Nella console Google Cloud , non puoi disattivare una zona specifica quando utilizzi un cluster regionale. Per maggiori informazioni, consulta la pagina Architettura dei cluster GKE.
Questo tutorial fornisce tre metodi diversi per simulare l'errore di una zona. Puoi simulare un errore di zona e verificare la risposta corretta dell'applicazione utilizzando il metodo richiesto per i tuoi scopi di conformità.
I metodi descritti in questo documento si applicano anche ai cluster zonali, inclusi quelli a zona singola e multi-zona. Questi metodi influiscono solo sui nodi nelle zone di destinazione e il piano di controllo GKE non è interessato.
Obiettivi
- Crea un cluster GKE Standard regionale utilizzando la configurazione predefinita.
- Esegui il deployment di un'applicazione di microservizi di esempio nel cluster regionale.
- Simula un'interruzione di zona utilizzando uno dei seguenti tre metodi:
- Riduci le zone del pool di nodi in un cluster regionale.
- Utilizza un pool di nodi a zona singola.
- Contrassegna i nodi della zona di errore di destinazione come non pianificabili e svuota i relativi contenuti.
- Verifica la disponibilità dei microservizi.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cluster in modalità GKE Standard
Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API, Compute Engine APIs:
gcloud services enable container.googleapis.com
compute.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine API, Compute Engine APIs:
gcloud services enable container.googleapis.com
compute.googleapis.com Crea un nuovo cluster GKE Standard utilizzando la configurazione predefinita:
gcloud container clusters create CLUSTER_NAME \ --region REGION \ --num-nodes 2
Sostituisci i seguenti parametri:
CLUSTER_NAME
: il nome del cluster.REGION
: la regione del cluster, ad esempious-central1
.
GKE impiega alcuni minuti per creare il cluster e verificare che tutto funzioni correttamente. Vengono creati due nodi in ogni zona della regione che specifichi.
Controlla le zone di ogni nodo creato nel passaggio precedente:
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
L'output è simile all'esempio seguente:
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-c 10.128.0.37 regional-cluster-1-default-pool-node2 asia-southeast1-c 10.128.0.36 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.128.0.38 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.128.0.33 regional-cluster-1-default-pool-node5 asia-southeast1-a 10.128.0.35 regional-cluster-1-default-pool-node6 asia-southeast1-a 10.128.0.34
Connettiti al cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --region REGION
Nella shell, clona il seguente repository GitHub e passa alla directory:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git cd bank-of-anthos/
Esegui il deployment dell'applicazione di esempio Cymbal Bank nel cluster GKE che hai creato nella sezione precedente:
kubectl apply -f ./extras/jwt/jwt-secret.yaml kubectl apply -f ./kubernetes-manifests
Attendi che i pod siano pronti:
kubectl get pods
Dopo qualche minuto, dovresti vedere i pod nello stato
Running
:NAME READY STATUS RESTARTS AGE accounts-db-0 1/1 Running 0 16s balancereader-7dc7d9ff57-sstm5 0/1 Running 0 15s contacts-7ddc76d94-rr28x 0/1 Running 0 14s frontend-747b84bff4-2mtlv 0/1 Running 0 13s ledger-db-0 1/1 Running 0 13s ledgerwriter-f6cc7889d-9qjfg 0/1 Running 0 13s loadgenerator-57d4cb57cc-zqvqb 1/1 Running 0 13s transactionhistory-5dd7c7fd77-lwkv8 0/1 Running 0 12s userservice-cd5ddb4bb-wwhml 0/1 Running 0 12s
Quando tutti i pod sono nello stato
Running
, recupera l'indirizzo IP esterno del servizio frontend:kubectl get service frontend | awk '{print $4}'
In una finestra del browser web, apri l'indirizzo IP mostrato nell'output del comando
kubectl get service
per accedere alla tua istanza di Cymbal Bank.Le credenziali predefinite vengono compilate automaticamente, così puoi accedere all'app ed esplorare alcune transazioni e saldi di esempio. Non devi intraprendere azioni specifiche, se non confermare che Cymbal Bank venga eseguito correttamente. Potrebbe essere necessario un minuto o due prima che tutti i servizi vengano avviati correttamente e ti consentano di accedere. Attendi che tutti i pod siano nello stato
Running
e che tu possa accedere correttamente al sito di Cymbal Bank prima di passare alla sezione successiva e simulare un errore di zona.Controlla la disponibilità del cluster regionale e dei servizi:
kubectl get po -o wide \ kubectl get node -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 riportato di seguito:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 6m30s 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 6m30s 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 6m29s 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-xvjxq 1/1 Running 0 6m29s 10.28.3.6 regional-cluster-1-default-pool-node6 ledger-db-0 1/1 Running 0 6m29s 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 6m29s 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 6m29s 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-cmc2w 1/1 Running 0 6m29s 10.28.3.7 regional-cluster-1-default-pool-node6 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 6m28s 10.28.5.8 regional-cluster-1-default-pool-node1 NAME ZONE INT_IP regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4
In questo esempio, tutti i carichi di lavoro di Cymbal Bank vengono implementati in tutte le zone. Per simulare un errore, disattiva una delle zone, ad esempio
asia-southeast1-c
, in cui è stato eseguito il deployment del servizio frontend.Simula un'interruzione del servizio a livello di zona. Aggiorna il pool di nodi esistente (
default-pool
) per specificare solo due zone su tre:gcloud container node-pools update default-pool \ --cluster=CLUSTER_NAME \ --node-locations=ZONE_A, ZONE_B \ --region=REGION
Sostituisci
ZONE_A, ZONE_B
con le due zone in cui vuoi che il pool di nodi continui a essere eseguito.Verifica la disponibilità dei microservizi dopo aver aggiornato il pool di nodi:
kubectl get po -o wide kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
L'output dovrebbe essere simile all'esempio seguente:
NAME ZONE INT_IP regional-cluster-1-default-pool-node2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1 asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-default-pool-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-default-pool-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-default-pool-node1 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-default-pool-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-default-pool-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-default-pool-node1
In questo output di esempio,
asia-southeast1-c
non è più in uso. Il servizio frontend a cui accedi da un browser con l'URLhttp://EXTERNAL_IP
è ancora accessibile. Un utente potrebbe comunque effettuare azioni di deposito e pagamento, anche se una delle zone non è più disponibile.Il pool di nodi predefinito, in genere creato quando crei un cluster GKE Standard regionale, è un pool di nodi multizona (
default-pool
).Questo cluster con il singolo
default-pool
è quello che hai creato in precedenza in questo documento.Pool di nodi aggiuntivi (
zonal-node-pool-1
ezonal-node-pool-2
) che eseguono anche i servizi per l'applicazione di esempio Cymbal Bank.Controlla la disponibilità del cluster regionale:
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --region REGION kubectl get node -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 riportato di seguito:
NAME: default-pool MACHINE_TYPE: e2-medium DISK_SIZE_GB: 100 NODE_VERSION: 1.27.8-gke.1067004 NAME ZONE. INT_IP regional-cluster-1-default-pool-node5-pzmc asia-southeast1-c 10.148.0.6 regional-cluster-1-default-pool-node6-qf1l asia-southeast1-c 10.148.0.7 regional-cluster-1-default-pool-node2-dlk2 asia-southeast1-a 10.148.0.8 regional-cluster-1-default-pool-node1-pkfd asia-southeast1-a 10.148.0.9 regional-cluster-1-default-pool-node3-6b6n asia-southeast1-b 10.148.0.5 regional-cluster-1-default-pool-node4-h0lc asia-southeast1-b 10.148.0.4
In questo output di esempio, tutti i pod di Cymbal Bank vengono implementati in tutte le zone dello stesso cluster ed eseguiti nel
default-pool
esistente.Crea due nuovi node pool a zona singola:
gcloud beta container node-pools create zonal-node-pool-1 \ --cluster CLUSTER_NAME \ --region REGION \ --num-nodes 4 \ --node-locations ZONE_A gcloud beta container node-pools create zonal-node-pool-2 \ --cluster CLUSTER_NAME \ --region REGION \ --num-nodes 4 \ --node-locations ZONE_B
Sostituisci
ZONE_A
eZONE_B
con le due zone in cui vuoi eseguire i nuovi node pool a zona singola.Per simulare un errore di zona, elimina il pool di nodi regionale
default-pool
e uno dei nuovi node pool a zona singola:gcloud container node-pools delete default-pool \ --cluster=CLUSTER_NAME \ --region=REGION gcloud container node-pools delete zonal-node-pool-1 \ --cluster=CLUSTER_NAME \ --region=REGION
Durante il processo di eliminazione di
node-pool
, i carichi di lavoro vengono arrestati e riprogrammati in un altro pool di nodi disponibile. Quando si verifica questo processo, i servizi e le implementazioni non sono disponibili. Questo comportamento significa che le finestre di inattività devono essere specificate per la documentazione o i reportREa.Verifica la disponibilità continua dei microservizi:
kubectl get po -o wide \ kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
L'output dovrebbe essere simile all'esempio seguente:
NAME ZONE INT_IP regional-cluster-1-node-pool3-node1 asia-southeast1-b 10.148.0.8 regional-cluster-1-node-pool3-node2 asia-southeast1-b 10.148.0.9 regional-cluster-1-node-pool3-node3 asia-southeast1-b 10.148.0.5 regional-cluster-1-node-pool3-node4 asia-southeast1-b 10.148.0.4 NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 28m 10.28.1.5 regional-cluster-1-zonal-node-pool-2-node3 balancereader-7dc7d9ff57-shwg5 1/1 Running 0 28m 10.28.5.6 regional-cluster-1-zonal-node-pool-2-node1 contacts-7ddc76d94-qv4x5 1/1 Running 0 28m 10.28.4.6 regional-cluster-1-zonal-node-pool-2-node2 frontend-747b84bff4-mdnkd 1/1 Running 0 9m21s 10.28.1.7 regional-cluster-1-zonal-node-pool-2-node3 ledger-db-0 1/1 Running 0 28m 10.28.5.7 regional-cluster-1-zonal-node-pool-2-node4 ledgerwriter-f6cc7889d-mttmb 1/1 Running 0 28m 10.28.1.6 regional-cluster-1-zonal-node-pool-2-node3 loadgenerator-57d4cb57cc-7fvrc 1/1 Running 0 28m 10.28.4.7 regional-cluster-1-zonal-node-pool-2-node2 transactionhistory-5dd7c7fd77-w2vqs 1/1 Running 0 9m20s 10.28.4.8 regional-cluster-1-zonal-node-pool-2-node2 userservice-cd5ddb4bb-zfr2g 1/1 Running 0 28m 10.28.5.8 regional-cluster-1-zonal-node-pool-2-node1
In questo output di esempio, poiché
default-pool
ezonal-node-pool-1
non esistono più, tutti i servizi vengono eseguiti inzonal-node-pool-2
.Controlla la disponibilità del cluster regionale e dei servizi. Esamina i nomi dei nodi della zona di errore di destinazione. Vuoi specificare una zona in cui vengono eseguiti i pod frontend:
kubectl get pods -o wide
L'output dovrebbe essere simile all'esempio seguente:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node2 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node1 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node1 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node2 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node2 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node1
Associa i pod elencati nell'output precedente alla zona del nodo:
kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
L'output dovrebbe essere simile all'esempio seguente:
NAME ZONE INT_IP regional-cluster-1-default-pool-node1 asia-southeast1-b 10.148.0.41 regional-cluster-1-default-pool-node2 asia-southeast1-b 10.148.0.42 regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39
Nell'output dell'esempio precedente, i pod frontend si trovano in
regional-cluster-1-default-pool-node1
nella zonaasia-southeast1-b
.Nel passaggio successivo, traccia tutti i nodi nella zona
asia-southeast1-b
, che in questo output di esempio sonoregional-cluster-1-default-pool-node1
eregional-cluster-1-default-pool-node2
.Isola e svuota i nodi di destinazione in una delle zone. In questo esempio, si tratta dei due nodi in
asia-southeast1-b
:kubectl drain regional-cluster-1-default-pool-node1 \ --delete-emptydir-data --ignore-daemonsets kubectl drain regional-cluster-1-default-pool-node2 \ --delete-emptydir-data --ignore-daemonsets
Questo comando contrassegna i nodi come non pianificabili e simula gli errori dei nodi. Kubernetes ripianifica i pod su altri nodi nelle zone funzionanti.
Guarda dove sono stati riprogrammati i nuovi pod di frontend e altri pod di esempio di Cymbal Bank che in precedenza erano in esecuzione sul nodo nella zona di errore:
kubectl get po -o wide kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
L'output dovrebbe essere simile all'esempio seguente:
NAME READY STATUS RESTARTS AGE IP NODE accounts-db-0 1/1 Running 0 4m7s 10.96.4.4 regional-cluster-1-default-pool-node4 balancereader-7dc7d9ff57-lv4z7 1/1 Running 0 4m7s 10.96.1.5 regional-cluster-1-default-pool-node6 contacts-7ddc76d94-wxvg5 1/1 Running 0 4m7s 10.96.6.11 regional-cluster-1-default-pool-node3 frontend-747b84bff4-gvktl 1/1 Running 0 4m7s 10.96.1.4 regional-cluster-1-default-pool-node3 ledger-db-0 1/1 Running 0 4m7s 10.96.4.5 regional-cluster-1-default-pool-node6 ledger-db-1 1/1 Running 0 3m50s 10.96.0.13 regional-cluster-1-default-pool-node5 ledgerwriter-f6cc7889d-4hqbm 1/1 Running 0 4m6s 10.96.0.12 regional-cluster-1-default-pool-node5 loadgenerator-57d4cb57cc-fmq52 1/1 Running 0 4m6s 10.96.4.6 regional-cluster-1-default-pool-node4 transactionhistory-5dd7c7fd77-72zpx 1/1 Running 0 4m6s 10.96.6.12 regional-cluster-1-default-pool-node3 userservice-cd5ddb4bb-b7862 1/1 Running 0 4m6s 10.96.1.6 regional-cluster-1-default-pool-node3 NAME ZONE INT_IP regional-cluster-1-default-pool-node3 asia-southeast1-a 10.148.0.37 regional-cluster-1-default-pool-node4 asia-southeast1-a 10.148.0.38 regional-cluster-1-default-pool-node5 asia-southeast1-c 10.148.0.40 regional-cluster-1-default-pool-node6 asia-southeast1-c 10.148.0.39
In questo output di esempio, non sono presenti pod Cymbal Bank di esempio in esecuzione su nodi isolati e tutti i pod vengono eseguiti solo nelle altre due zone.
I budget per l'interruzione dei pod (PDB) sui nodi potrebbero bloccare lo svuotamento dei nodi. Valuta le norme PDB prima dell'azione di isolamento e svuotamento. Per saperne di più su PDB e sul suo rapporto con la gestione delle interruzioni, scopri come garantire l'affidabilità e l'uptime del tuo cluster GKE.
- 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.
- Scopri come simulare un'interruzione del servizio in una zona per un gruppo di istanze gestite (MIG) regionale.
- Scopri di più sul disaster recovery su Google Cloud.
- Configura PostgreSQL ad alta disponibilità in più zone.
- Considerazioni sul budget di interruzione dei pod.
- Scopri di più sui dischi permanenti zonali e regionali.
- Scopri come eseguire database ad alta disponibilità in GKE.
- Scopri di più sulle best practice per il disaster recovery su Google Cloud.
- Scopri di più su Backup per GKE.
Crea un cluster standard regionale
Prima di simulare un errore di zona, crea un cluster regionale con un pool di nodi multizona. Il control plane e i nodi del cluster vengono replicati in più zone della regione specificata.
Utilizza Google Cloud CLI per creare il cluster:
Esegui il deployment di un'applicazione di microservizi di esempio
Per vedere l'effetto del failover simulato in questo documento, esegui il deployment di un'applicazione di esempio basata su microservizi nel tuo cluster. In questo documento utilizzi l'applicazione di esempio Cymbal Bank:
Simula un errore di zona
In questa sezione, simula un errore con una delle zone. Esistono tre modi diversi per simulare questo failover. Devi scegliere un solo metodo. Simula un errore di zona e verifica la risposta corretta dell'applicazione utilizzando il metodo richiesto per i tuoi scopi di conformità.
Ridurre le zone pool di nodi
Per impostazione predefinita, un pool di nodi di un cluster regionale ha nodi che si estendono a tutte le zone della regione. Nel seguente diagramma, Cloud Load Balancing distribuisce il traffico a un pool di nodi che si estende su tre zone. Ogni zona ha due nodi e i tuoi pod possono essere eseguiti nei nodi di una qualsiasi di queste zone.
In questa sezione, simulerai un errore nella zona aggiornando il pool di nodi in modo che venga eseguito solo in due zone su tre. Questo approccio verifica che la tua applicazione possa rispondere alla perdita di una zona ridistribuendo correttamente i pod e il traffico in altre zone.
Per aggiornare il pool di nodi in modo che venga eseguito solo in determinate zone e simulare un errore, completa i seguenti passaggi:
Utilizza un pool di nodi a zona singola
In questa sezione simulerai un errore nella zona eliminando due dei node pool. Questo approccio verifica che la tua applicazione possa rispondere alla perdita di un pool di nodi ridistribuendo correttamente i pod e il traffico in un pool di nodi in un'altra zona. Per simulare un'interruzione di zona su un cluster regionale, espandi il cluster di base creato in precedenza, eseguendo l'applicazione Cymbal Bank in più pool di nodi. Questo metodo di simulazione dell'interruzione della zona riflette più da vicino un errore effettivo della zona rispetto al primo esempio di aggiornamento delle zone attive in un pool di nodi, in quanto è più comune che in un cluster esistano più node pool:
Il cluster che crei in questa sezione per simulare un errore pool di nodi a zona singola include i seguenti componenti:
Le linee tratteggiate nel diagramma mostrano come il traffico viene gestito solo da zonal-node-pool-2
dopo aver simulato un errore in default-pool
e zonal-node-pool-1
.
Per creare pool di nodi aggiuntivi e simulare l'errore, completa i seguenti passaggi:
Isola e svuota i nodi in una zona
In questa sezione, isolerai e svuoterai nodi specifici nel cluster. Isola e svuota tutti i nodi in una singola zona, il che simula la perdita dei pod che vengono eseguiti su questi nodi nella zona:
In questo diagramma, isoli e svuoti i nodi nella prima zona. I nodi nelle altre due zone continuano a essere eseguiti. Questo approccio verifica che la tua applicazione possa rispondere alla perdita di tutti i nodi in una zona ridistribuendo correttamente i pod e il traffico tra i nodi eseguiti in altre zone.
Per isolare e svuotare i nodi in una delle zone, simulando un errore, completa i seguenti passaggi:
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial:
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto creato per il tutorial.