模拟 GKE 区域级集群中的可用区故障


常见的监管要求是公司可以展示其灾难恢复 (DR) 功能。对于在云端运行的应用,当一个可用区中托管的服务器在一段时间内不可用时,此要求包括服务的可靠性和可用性。本文档适用于希望了解如何在使用 Google Kubernetes Engine (GKE) Standard 区域级集群时模拟可用区故障切换的管理员、架构师、运维人员以及备份和灾难恢复 (DR) 管理员。

GKE 区域级集群在用户选择的区域中创建,并在位于所选区域内多个可用区的虚拟机上运行控制平面。GKE Autopilot 集群始终为区域级集群,GKE Standard 集群可以是区域级集群或可用区级集群。本教程使用 GKE Standard 区域级集群。集群节点通过负载均衡器与控制平面通信,这意味着节点位置和控制平面虚拟机位置并非始终匹配。在 Google Cloud 控制台中,使用区域级集群时,您无法停用特定可用区。如需了解详情,请参阅 GKE 集群架构

本教程提供了三种不同的方法来模拟可用区故障。您可以模拟可用区故障,并使用自己的合规性所需的任何方法验证正确的应用响应。

本文档中的方法也适用于可用区级集群,包括单可用区和多可用区集群。这些方法仅会影响目标可用区中的节点,GKE 控制平面不受影响。

目标

  • 使用默认配置创建区域级 GKE Standard 集群。
  • 将示例微服务应用部署到区域级集群。
  • 使用以下三种方法之一模拟可用区服务中断:
    • 减少区域级集群中的节点池可用区。
    • 使用单可用区节点池。
    • 封锁并排空目标故障可用区的节点。
  • 验证微服务可用性。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Compute Engine
  • GKE Standard 模式集群

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。
  3. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  4. 创建或选择 Google Cloud 项目

    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目 名称。

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. Enable the Kubernetes Engine API, Compute Engine APIs:

    gcloud services enable container.googleapis.com compute.googleapis.com
  7. 安装 Google Cloud CLI。
  8. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  9. 创建或选择 Google Cloud 项目

    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目 名称。

  10. 确保您的 Google Cloud 项目已启用结算功能

  11. Enable the Kubernetes Engine API, Compute Engine APIs:

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

创建区域级 Standard 集群

在模拟可用区故障之前,请先创建一个具有多可用区节点池的区域级集群。集群的控制平面和节点将在指定区域的多个可用区中复制。

使用 Google Cloud CLI 创建集群:

  1. 使用默认配置创建新的 GKE Standard 集群:

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

    替换以下参数:

    • CLUSTER_NAME:您的集群的名称。
    • REGION:集群的区域,例如 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 \
        --region REGION
    

部署示例微服务应用

如需了解本文档中模拟故障切换的效果,请将基于微服务的示例应用部署到集群。在本文档中,您将使用示例 Cymbal Bank 应用

  1. 在 shell 中,克隆以下 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. 几分钟后,您应该会看到处于 Running 状态的 Pod:

    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 状态时,获取前端 Service 外部 IP 地址:

    kubectl get service frontend | awk '{print $4}'
    
  6. 在网络浏览器窗口中,打开 kubectl get service 命令输出中显示的 IP 地址,以访问您的 Cymbal Bank 实例。

    系统会自动填充默认凭据,因此您可以登录该应用并浏览一些示例交易和余额。您只需确认 Cymbal Bank 成功运行,无需执行任何其他操作。所有 Service 可能需要一两分钟才能正确启动并允许您登录。等待所有 Pod 处于 Running 状态,您可以成功登录 Cymbal Bank 网站,然后再继续下一部分并模拟可用区故障。

模拟可用区故障

在本部分中,您将模拟其中一个可用区的故障。您可以通过三种不同的方法来模拟此故障切换。您只需选择一种方法。使用您自己的合规性目的所需的任一方法,模拟可用区故障并验证正确的应用响应。

减少节点池可用区

默认情况下,区域级集群的节点池的节点跨越其区域的所有可用区。在下图中,Cloud Load Balancing 将流量分配到跨三个可用区的节点池。每个可用区有两个节点,您的 Pod 可以在上述任何可用区的节点中运行。

负载均衡器会将流量定向到在三个可用区运行的区域级集群。每个可用区均有两个节点。

在本部分中,您将模拟可用区故障,方法是将节点池更新为仅在两个可用区(共三个可用区)中运行。此方法通过将 Pod 和流量正确地重新分配到其他可用区,验证您的应用可以应对可用区丢失的情况。

如需将节点池更新为仅在特定可用区中运行并模拟故障,请完成以下步骤:

  1. 检查区域级集群和 Service 的可用性:

    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 \
        --region=REGION
    

    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 \
        --region REGION
    
    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 \
      --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
    

    ZONE_AZONE_B 替换为您希望在其中运行新的单可用区节点池的两个可用区。

  3. 如需模拟可用区故障,请删除 default-pool 区域级节点池和一个新的单可用区节点池:

    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
    

    node-pool 删除过程中,工作负载会关停并重新安排到另一个可用的节点池。发生这种情况时,Service 和 Deployment 将不可用。此行为意味着需要为灾难恢复报告或文档指定停机时间窗口。

    验证微服务的持续可用性:

    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 不再存在,因此所有 Service 都在 zonal-node-pool-2 中运行。

封锁和排空一个可用区中的节点

在本部分中,您将封锁并排空集群中的特定节点。您可以封锁并排空单个可用区中的所有节点,从而模拟在该可用区的这些节点上运行的 Pod 丢失的情况:

负载均衡器会将流量定向到在三个可用区运行的区域级集群。每个可用区包含两个节点,Cymbal Bank 示例应用 Pod 在所有可用区和节点中运行。

在此图中,您将封锁并排空第一个可用区中的节点。其他两个可用区中的节点继续运行。此方法通过将 Pod 和流量正确地重新分布到在其他可用区运行的节点之间,验证您的应用可以响应一个可用区中所有节点丢失的情况。

如需封锁并排空其中一个可用区中的节点(模拟故障),请完成以下步骤:

  1. 检查区域级集群和 Service 的可用性。查看目标故障可用区的节点名称。您希望指定运行前端 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 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤