在 GKE 區域叢集中模擬可用區故障

常見的法規要求是公司必須證明具備災難復原 (DR) 能力。對於在雲端執行的應用程式,這項規定包括當某個可用區中託管的伺服器在一段時間內無法使用時,服務的可靠性和可用性。這份文件適用於管理員和架構師、營運人員,以及備份與災害復原 (DR) 管理員,說明如何在使用 Google Kubernetes Engine (GKE) Standard 區域叢集時,模擬可用區容錯移轉。

GKE 區域叢集是在使用者選擇的區域中建立,並在所選區域內多個可用區的 VM 上執行控制層。GKE Autopilot 叢集一律為區域叢集,而 GKE Standard 叢集可以是區域叢集或可用區叢集。本教學課程使用 GKE Standard 區域叢集。叢集節點會透過負載平衡器與控制層通訊,因此節點位置和控制層 VM 位置不一定會相符。使用區域叢集時,您無法在 Google Cloud 控制台中停用特定可用區。詳情請參閱 GKE 叢集架構

本教學課程提供三種模擬可用區故障的方法。您可以模擬區域故障,並使用符合自身法規遵循需求的方法,驗證應用程式是否做出正確回應。

本文中的方法也適用於區域叢集,包括單一可用區和多可用區。這些方法只會影響目標區域中的節點,不會影響 GKE 控制層。

目標

  • 使用預設設定建立地區 GKE Standard 叢集。
  • 將範例微服務應用程式部署至區域叢集。
  • 使用下列三種方法之一,模擬區域中斷:
    • 縮減地區叢集中的節點集區可用區。
    • 使用單一可用區節點集區。
    • 隔離並排空目標故障區域的節點。
  • 確認微服務是否可用。

費用

本教學課程使用下列 Google Cloud計費元件:

  • Compute Engine
  • GKE Standard 模式叢集

使用 Pricing Calculator 可根據您的預測使用量來產生費用預估。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 啟用 Kubernetes Engine API、Compute Engine API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable container.googleapis.com compute.googleapis.com
  8. 安裝 Google Cloud CLI。

  9. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  10. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  11. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  12. 確認專案已啟用計費功能 Google Cloud

  13. 啟用 Kubernetes Engine API、Compute Engine API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

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

建立區域標準叢集

模擬可用區故障前,請先建立具有多可用區節點集區的區域叢集。叢集的控制層和節點會複製到指定區域的多個可用區。

使用 Google Cloud CLI 建立叢集:

  1. 使用預設設定建立新的 GKE Standard 叢集:

    gcloud container clusters create CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION \
      --num-nodes 2
    

    替換下列參數:

    • CLUSTER_NAME:叢集名稱。
    • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 區域,例如 us-central1

    GKE 需要幾分鐘的時間建立叢集,並確認一切正常運作。系統會在您指定的區域中,於每個可用區建立兩個節點。

  2. 檢查上一個步驟中建立的每個節點的區域:

    kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
    

    輸出內容如下列範例所示:

    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. 連線至叢集:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION
    

部署範例微服務應用程式

如要查看模擬容錯移轉在本文件中的效果,請將範例微服務型應用程式部署至叢集。本文將使用Cymbal Bank 範例應用程式

  1. 在殼層中,複製下列 GitHub 存放區並變更為該目錄:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  2. 將 Cymbal Bank 範例應用程式部署至您在前一節建立的 GKE 叢集:

    kubectl apply -f ./extras/jwt/jwt-secret.yaml
    kubectl apply -f ./kubernetes-manifests
    
  3. 等待 Pod 準備就緒:

    kubectl get pods
    
  4. 幾分鐘後,您應該會看到 Pod 處於 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. 當所有 Pod 都處於 Running 狀態時,請取得前端服務外部 IP 位址:

    kubectl get service frontend | awk '{print $4}'
    
  6. 在網路瀏覽器視窗中,開啟 kubectl get service 指令輸出內容中顯示的 IP 位址,存取 Cymbal Bank 執行個體。

    系統會自動填入預設憑證,方便您登入應用程式,並查看一些範例交易和餘額。您不需採取任何特定行動,只要確認 Cymbal Bank 順利運作即可。所有服務可能需要一到兩分鐘才能正確啟動,讓您登入。請等到所有 Pod 都處於 Running 狀態,且您能順利登入 Cymbal Bank 網站,再前往下一個部分並模擬可用區故障。

模擬區域故障

在本節中,您將模擬其中一個可用區發生故障。您可以透過三種不同方式模擬容錯移轉。您只需要選擇一種方法。模擬區域故障,並使用符合自身法規遵循目的的方法,驗證應用程式是否正確回應。

減少節點集區區域

根據預設,區域叢集的節點集區會包含區域內所有可用區的節點。在下圖中,Cloud Load Balancing 會將流量分配到橫跨三個可用區的節點集區。每個可用區都有兩個節點,而 Pod 可在任何可用區的節點中執行。

負載平衡器會將流量導向跨三個區域執行的區域叢集。每個可用區都有兩個節點。

在本節中,您將更新節點集區,只在三個區域中的兩個區域執行,藉此模擬區域故障。這個方法可驗證應用程式是否能正確地在其他可用區重新分配 Pod 和流量,以因應可用區中斷。

如要更新節點集區,使其只在特定區域中執行並模擬失敗,請完成下列步驟:

  1. 檢查區域叢集和服務的可用性:

    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'
    

    結果類似下列範例輸出內容:

    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
    

    在本例中,所有 Cymbal Bank 工作負載都會部署在所有可用區。如要模擬故障,請停用其中一個區域,例如部署前端服務的 asia-southeast1-c

  2. 模擬區域服務中斷情形。更新現有節點集區 (default-pool),只指定三個區域中的兩個:

      gcloud container node-pools update default-pool \
        --cluster=CLUSTER_NAME \
        --node-locations=ZONE_A, ZONE_B \
        --location=CONTROL_PLANE_LOCATION
    

    ZONE_A, ZONE_B 替換為您希望節點集區繼續執行的兩個區域。

  3. 更新節點集區後,請確認微服務是否可用:

    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'
    

    輸出內容應如下列範例所示:

    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
    

    在這個範例輸出內容中,asia-southeast1-c 已停用。您仍可透過網址 http://EXTERNAL_IP,從瀏覽器存取前端服務。即使其中一個區域不再適用,使用者仍可執行存款和付款動作。

使用單一區域節點集區

在本節中,您將刪除兩個節點集區,模擬區域故障情形。這個方法會驗證應用程式是否能正確地在其他可用區的節點集區中重新分配 Pod 和流量,以回應節點集區的損失。如要在地區叢集上模擬可用區中斷,請展開先前建立的基本叢集,在多個節點集區中執行 Cymbal Bank 應用程式。與第一個範例 (更新節點集區中的現用可用區) 相比,這個模擬可用區中斷的方法更能反映實際的可用區故障情形,因為叢集中通常會有多個節點集區:

負載平衡器會將流量導向在三個節點集區中執行的區域叢集。預設節點集區會跨所有可用區執行,另外兩個節點集區則分別在單一可用區中執行。

您在本節中建立的叢集會模擬單一可用區節點集區故障,並包含下列元件:

  • 預設節點集區:通常在您建立地區 GKE Standard 叢集時建立,是多區域節點集區 (default-pool)。

    這個叢集 (含單一 default-pool) 是您稍早在此文件中建立的。

  • 額外的節點集區 (zonal-node-pool-1zonal-node-pool-2),同樣會執行範例 Cymbal Bank 應用程式的服務。

圖中的虛線顯示,只有在模擬 default-poolzonal-node-pool-1 發生故障後,流量才會只提供 zonal-node-pool-2

如要建立其他節點集區並模擬故障,請完成下列步驟:

  1. 檢查區域叢集的可用性:

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION
    
    kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
    

    結果類似下列範例輸出內容:

    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
    

    在這個範例輸出內容中,所有 Cymbal Bank Pod 都部署在同一叢集下的所有區域,並在現有的 default-pool 中執行。

  2. 建立兩個新的單一區域節點集區:

    gcloud beta container node-pools create zonal-node-pool-1 \
      --cluster CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION \
      --num-nodes 4 \
      --node-locations ZONE_A
    
    gcloud beta container node-pools create zonal-node-pool-2 \
        --cluster CLUSTER_NAME \
        --location CONTROL_PLANE_LOCATION \
        --num-nodes 4 \
        --node-locations ZONE_B
    

    ZONE_AZONE_B 替換為要執行新單一區域節點集區的兩個區域。

  3. 如要模擬區域故障,請刪除 default-pool 區域節點集區和其中一個新的單一區域節點集區:

    gcloud container node-pools delete default-pool \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    
    gcloud container node-pools delete zonal-node-pool-1 \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    node-pool 刪除程序期間,工作負載會關閉,並重新排定至其他可用的節點集區。在此期間,您無法使用服務和部署作業。這表示您需要為 DR 報告或文件指定停機時間範圍。

    確認微服務是否持續可用:

    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'
    

    輸出內容應如下列範例所示:

    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
    

    在本範例輸出內容中,由於 default-poolzonal-node-pool-1 不再存在,因此所有服務都會在 zonal-node-pool-2 中執行。

隔離並排空可用區中的節點

在本節中,您將封鎖並排空叢集中的特定節點。您會封鎖並清空單一區域中的所有節點,模擬該區域中節點上執行的 Pod 遺失情況:

負載平衡器會將流量導向跨三個區域執行的區域叢集。每個可用區包含兩個節點,而 Cymbal Bank 範例應用程式 Pod 會在所有可用區和節點中執行。

在這張圖中,您會隔離並排空第一個可用區中的節點。其他兩個區域中的節點會繼續執行。這個方法會驗證應用程式是否能正確地在其他區域執行的節點之間重新分配 Pod 和流量,以因應區域中所有節點的損失。

如要封鎖並排空其中一個可用區中的節點,模擬失敗情況,請完成下列步驟:

  1. 檢查區域叢集和服務的可用性。查看目標故障區域的節點名稱。您想指定前端 Pod 執行的可用區:

    kubectl get pods -o wide
    

    輸出內容應如下列範例所示:

    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. 將先前輸出內容中列出的 Pod 與節點的可用區建立關聯:

    kubectl get node -o=custom-columns='NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,INT_IP:.status.addresses[0].address'
    

    輸出內容應如下列範例所示:

    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
    

    在上一個範例輸出內容中,前端 Pod 位於可用區 asia-southeast1-bregional-cluster-1-default-pool-node1

    在下一個步驟中,您會追蹤可用區 asia-southeast1-b 中的所有節點,在本例輸出內容中為 regional-cluster-1-default-pool-node1regional-cluster-1-default-pool-node2

  3. 在其中一個可用區中,隔離並排空目標節點。在本範例中,這是 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
    

    這個指令會將節點標示為不可排程,並模擬節點故障。Kubernetes 會將 Pod 重新排程至正常運作的區域中的其他節點。

  4. 查看先前在故障可用區節點上執行的前端 Pod 和其他 Cymbal Bank 範例 Pod,現在重新排定的位置:

    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'
    

    輸出內容應如下列範例所示:

    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
    

    在這個範例輸出內容中,沒有任何 Cymbal Bank Pod 在封鎖節點上執行,所有 Pod 現在只在其他兩個區域中執行。

    節點上的 Pod 中斷預算 (PDB) 可能會封鎖節點排空作業。在執行封鎖和排空動作前,請先評估 PDB 政策。如要進一步瞭解 PDB 及其與管理中斷的關係,請參閱如何確保 GKE 叢集的可靠性和正常運作時間。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請按照下列步驟操作:

刪除專案

如要避免系統向您收費,最簡單的方法就是刪除您在教學課程中建立的專案。

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟