Simula un errore di zona nei cluster GKE a livello di regione


Un requisito normativo comune è che un'azienda sia in grado di dimostrare la propria calamità di ripristino (RE). Per le applicazioni eseguite nel cloud, include l'affidabilità e la disponibilità dei servizi quando i server ospitati in una zona diventano non disponibili per un determinato periodo di tempo. Questo documento è rivolto a Amministratori e architetti, operatori e amministratori di backup e ripristino di emergenza (RE) che vogliono imparare a simulare il failover di una zona Cluster regionale Google Kubernetes Engine (GKE) Standard.

Cluster regionali di GKE vengono creati in una regione scelta dall'utente ed eseguono il piano di controllo sulle VM in più zone all'interno della regione scelta. GKE I cluster Autopilot sono sempre a livello di regione e GKE I cluster standard possono essere a livello di regione o zona. Questo tutorial utilizza un a livello di regione GKE Standard. I nodi del cluster comunicano con il piano di controllo attraverso un bilanciatore del carico, il che significa che il nodo e quella della VM del piano di controllo non corrispondono sempre. Nella nella console Google Cloud, non puoi disabilitare una zona specifica quando utilizzi un a livello di regione. Per ulteriori informazioni, vedi Architettura dei cluster GKE.

Questo tutorial fornisce tre metodi diversi per simulare il guasto di una zona. Tu può simulare un errore di zona e verificare la corretta risposta dell'applicazione utilizzando a seconda del metodo richiesto per i tuoi scopi di conformità.

I metodi descritti in questo documento si applicano anche cluster di zona, incluse quelle a zona singola e multi-zona. Questi metodi hanno effetto solo sui nodi in le zone target e il piano di controllo GKE non è interessato.

Obiettivi

  • Crea un cluster GKE Standard a livello di regione utilizzando configurazione predefinita.
  • Eseguire il deployment di un'applicazione di microservizi di esempio nel cluster a livello di regione.
  • Simula un'interruzione di una zona utilizzando uno dei seguenti tre metodi:
    • Riduci le zone del pool di nodi in un cluster a livello di regione.
    • Utilizza un pool di nodi a zona singola.
    • Non limitare e svuotare i nodi della zona di errore di destinazione.
  • Verifica la disponibilità dei microservizi.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cluster in modalità GKE Standard

Utilizza la Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API Kubernetes Engine API, Compute Engine.

    gcloud services enable container.googleapis.com compute.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  11. Abilita le API Kubernetes Engine API, Compute Engine.

    gcloud services enable container.googleapis.com compute.googleapis.com

Crea un cluster Standard a livello di regione

Prima di simulare un errore di zona, crea un cluster a livello di regione con una multizona pool di nodi. Il piano di controllo e i nodi del cluster vengono replicati su più zone nella regione specificata.

Utilizza Google Cloud CLI per creare il cluster:

  1. Crea un nuovo cluster GKE Standard utilizzando configurazione:

    gcloud container clusters create CLUSTER_NAME \
      --region REGION \
      --num-nodes 2
    

    Sostituisci i seguenti parametri:

    • CLUSTER_NAME: il nome del cluster.
    • REGION: la regione per il cluster, ad esempio us-central1.

    GKE richiede alcuni minuti per creare il cluster e verificare tutto funzioni correttamente. Vengono creati due nodi in ciascuna zona della regione da te specificati.

  2. Controlla le zone di ciascun 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
    
  3. Connettiti al cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region REGION
    

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 basata su microservizi al tuo cluster. In questo documento, utilizzi esempio di applicazione di Cymbal Bank:

  1. Nella shell, clona il seguente repository GitHub e modifica il directory:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  2. Esegui il deployment dell'applicazione di esempio Cymbal Bank nel cluster GKE creato nella sezione precedente:

    kubectl apply -f ./extras/jwt/jwt-secret.yaml
    kubectl apply -f ./kubernetes-manifests
    
  3. Attendi che i pod siano pronti:

    kubectl get pods
    
  4. Dopo alcuni minuti, dovresti vedere i pod in 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
    
  5. Quando i pod sono tutti in stato Running, ottieni il servizio frontend Indirizzo IP esterno:

    kubectl get service frontend | awk '{print $4}'
    
  6. In una finestra del browser web, apri l'indirizzo IP mostrato nell'output del kubectl get service per accedere alla tua istanza di Cymbal Bank.

    Le credenziali predefinite vengono compilate automaticamente, quindi puoi accedere a l'app ed esplorare alcune transazioni e saldi di esempio. Esistono nessuna azione specifica da intraprendere se non per confermare che Cymbal La banca viene eseguita correttamente. Potrebbero essere necessari un paio di minuti per tutti i Servizi per avviare correttamente e consentirti di accedere. Attendi che tutti i pod siano in un Running e puoi accedere al sito di Cymbal Bank prima di passare alla sezione successiva e simulare un errore di una zona.

Simula un guasto di una zona

In questa sezione simulerai un errore in una delle zone. Esistono tre tipi di puoi simulare questo failover in vari modi. Devi solo scegliere un'opzione . Simula un errore di zona e verifica la risposta corretta dell'applicazione utilizzando il metodo richiesto per i tuoi scopi di conformità.

Riduci le zone del pool di nodi

Per impostazione predefinita, un pool di nodi di un cluster a livello di regione include nodi in tutte zone della sua regione. Nel diagramma seguente, Cloud Load Balancing distribuisce a un pool di nodi che comprende tre zone. Ogni zona ha due nodi e I pod possono essere eseguiti in nodi in una qualsiasi di queste zone.

Un bilanciatore del carico indirizza il traffico a un cluster a livello di regione in esecuzione in tre zone. Ogni zona è composta da due nodi.

In questa sezione, simulerai un errore di zona aggiornando il pool di nodi vengono eseguite in due zone su tre. Questo approccio verifica che l'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 gli errori, completa i seguenti passaggi:

  1. Verifica la disponibilità di cluster e servizi a livello di regione:

    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 al seguente output di esempio:

    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, il deployment di tutti i carichi di lavoro di Cymbal Bank viene eseguito in tutte le zone. A simula un errore, disabiliti una delle zone, asia-southeast1-c, dove viene eseguito il deployment del servizio frontend.

  2. Simula un'interruzione di una zona. Aggiorna il pool di nodi esistente (default-pool) in 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 se vuoi che il pool di nodi continui a essere in esecuzione.

  3. 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. La servizio frontend a cui accedi da un browser con l'URL http://EXTERNAL_IP è ancora accessibile. Un utente potrebbe comunque eseguire il bonifico e il pagamento anche se una delle zone non è più disponibile.

Usa un pool di nodi a zona singola

In questa sezione simulerai un errore di zona eliminando due pool di nodi. Questo approccio verifica che l'applicazione possa rispondere alla perdita di un nodo ridistribuendo correttamente i pod e il traffico su un pool di nodi in un altro pool, zona di destinazione. Per simulare un'interruzione di una zona su un cluster a livello di regione, espandi la classe di base creato in precedenza, eseguendo l'applicazione Cymbal Bank su più pool di nodi. Questo metodo per simulare l'interruzione della zona in modo più preciso riflette un errore di zona effettivo rispetto al primo esempio di aggiornamento delle zone attive. in un pool di nodi, poiché è più comune che esistano più pool di nodi in un cluster:

Un bilanciatore del carico indirizza il traffico a un cluster a livello di regione in esecuzione su tre pool di nodi. Il pool di nodi predefinito viene eseguito in tutte le zone e gli altri due pool di nodi vengono eseguiti ciascuno in una singola zona.

Il cluster che crei in questa sezione per simulare un pool di nodi a zona singola l'errore include i seguenti componenti:

  • Pool di nodi predefinito, in genere creato al momento della creazione di un'area geografica un cluster GKE Standard, multi-zona pool di nodi (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 e zonal-node-pool-2) che anche i servizi per l'applicazione di esempio Cymbal Bank.

Le linee tratteggiate nel diagramma mostrano come il traffico opera solo in 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 quanto segue passaggi:

  1. Verifica la disponibilità del cluster a livello di regione:

    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 al seguente output di esempio:

    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, il deployment di tutti i pod di Cymbal Bank viene eseguito in tutte le zone in nello stesso cluster ed eseguirlo nell'ambiente default-pool esistente.

  2. Crea due nuovi pool di nodi 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 e ZONE_B con e due zone in cui eseguire i nuovi pool di nodi a zona singola.

  3. Per simulare un errore in una zona, elimina il pool di nodi a livello di regione default-pool e uno dei nuovi pool di nodi 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 riprogrammate in un altro pool di nodi disponibile. In questi casi, I servizi e i deployment non sono disponibili. Questo comportamento indica che il tempo di inattività è necessario specificare le finestre per il reporting o la documentazione di RE.

    Verifica la continua disponibilità 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, come default-pool e zonal-node-pool-1 non esiste più, tutti i servizi vengono eseguiti in zonal-node-pool-2.

Nodi cordon e svuota in una zona

In questa sezione, contrassegnate come non pianificabili nodi specifici del cluster e svuotateli. Contrassegna come non pianificabile e svuotare tutti i nodi in una singola zona, simulando la perdita dei pod in esecuzione su quei nodi nella zona:

Un bilanciatore del carico indirizza il traffico a un cluster a livello di regione in esecuzione in tre zone. Ogni zona contiene due nodi e i pod dell'applicazione di esempio di Cymbal Bank vengono eseguiti in tutte le zone e in tutti i nodi.

In questo diagramma, i nodi nella prima zona vengono contrassegnati come non pianificabili e svuotati. I nodi in le altre due zone continuano a funzionare. Questo approccio verifica che l'applicazione possa rispondere alla perdita di tutti i nodi in una zona ridistribuire pod e traffico tra i nodi in esecuzione in altre zone.

Per contrassegnare come non pianificabile e svuotare i nodi in una delle zone, simulando l'errore, completa segui questi passaggi:

  1. Verifica la disponibilità del cluster e dei servizi a livello regionale. Osserva il nodo e i nomi della zona di errore target. Vuoi specificare una zona in cui i pod di frontend vengono eseguiti:

    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
    
  2. 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 di esempio precedente, i pod di frontend si trovano in regional-cluster-1-default-pool-node1 nella zona asia-southeast1-b.

    Nel passaggio successivo, traccerai tutti i nodi nella zona asia-southeast1-b, in questo output di esempio sono regional-cluster-1-default-pool-node1 e regional-cluster-1-default-pool-node2

  3. Non configurare e svuotare i nodi di destinazione in una delle zone. In questo esempio, i 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 in altri nodi nelle zone funzionanti.

  4. Guarda dove si trovano i nuovi pod di frontend e altri pod di Cymbal Bank di esempio erano precedentemente in esecuzione sul nodo nella zona di errore riprogrammato:

    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 nodi non pianificati e tutti i pod ora vengono eseguiti solo nelle altre due zone.

    I budget di interruzione dei pod (PDB) sui nodi potrebbero bloccare lo svuotamento dei nodi. Valuta I criteri PDB prima dell'azione di blocco e svuotamento. Per saperne di più PDB e la sua relazione con la gestione delle interruzioni, scopri come garantire l'affidabilità e l'uptime per il tuo cluster GKE.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi per risorse utilizzate in questo tutorial:

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto nel tutorial.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi