地区级集群

本页面介绍地区级集群在 Google Kubernetes Engine (GKE) 中的工作原理。您可以创建地区级集群或详细了解不同的集群类型

概览

默认情况下,集群的控制层面(主服务器)和节点均在您创建集群时指定的单个计算区域中运行。通过在地区的多个区域中复制集群的控制层面(主服务器)及其节点,地区级集群可以提高它们的可用性。这不仅提供了多区域集群的优势,而且提供了以下额外的优势:

  • 如果地区中的一个或多个(但不是全部)区域发生服务中断,那么只要有一个控制层面副本可用,集群的控制层面便仍可供使用。
  • 在集群升级这样的集群维护期间,某个时刻只有一个控制层面副本不可用,而集群仍然正常运行。

默认情况下,系统会在地区的三个区域中复制控制层面和每个节点池,但您可以自定义副本的数量。

集群一旦创建,其类型便不可修改,无论是区域级集群、多区域集群还是地区级集群均是如此。

地区级集群的工作原理

地区级集群会将集群主服务器和节点复制到一个地区内的多个区域中。例如,us-east1 地区中的地区级集群会在以下三个 us-east1 区域中创建控制层面和节点的副本:us-east1-bus-east1-cus-east1-d。如果基础架构发生服务中断,工作负载将继续运行,并且您可以通过手动方式或使用集群自动扩缩程序重新平衡节点。

使用地区级集群的好处如下:

  • 能够从单个区域故障恢复。地区级集群可用于整个地区,而不是某个地区内的单个区域。如果单个地区不可用,您的 Kubernetes 控制层面和资源并不会受到影响。
  • 主服务器持续升级、主服务器可调整大小且主服务器故障停机时间减少。由于控制层面的冗余副本,地区级集群提供了可用性更高的 Kubernetes API,因此即使在升级期间,您也可以访问控制层面。

限制

  • 默认情况下,地区级集群由 9 个节点组成(每个区域三个),这些节点均匀分布在一个地区中的三个区域中。这会使用 9 个 IP 地址。如果需要,您可以将节点数减少到每个区域一个。对于新创建的 Google Cloud 帐号,每个地区仅分配八个 IP 地址,因此您可能需要针对地区级已用 IP 地址申请增加配额,具体取决于您的地区级集群的大小。如果可用的已用 IP 地址太少,则创建集群的操作将失败。

  • 对于运行 GPU 的地区级集群,您必须选择在三个区域中配备了 GPU 的地区,或者使用 --node-locations 标志指定区域。否则,您可能会看到如下错误:

    ERROR: (gcloud.container.clusters.create) ResponseError: code=400, message=
      (1) accelerator type "nvidia-tesla-k80" does not exist in zone us-west1-c.
      (2) accelerator type "nvidia-tesla-k80" does not exist in zone us-west1-a.
    

    如需查看提供 GPU 的地区和区域的完整列表,请参阅 Compute Engine 上的 GPU

  • 您无法在集群区域之外的区域中创建节点池。不过,您可以更改集群的区域,这将导致所有新节点和现有节点跨越这些区域。

价格

与类似的区域级集群或多区域集群相比,使用地区级集群需要更多的项目地区配额。在使用地区级集群之前,请务必了解您的配额和 GKE 价格。如果遇到 Insufficient regional quota to satisfy request for resource 错误,则表示您的请求超出了当前地区的可用配额。

此外,您需要为跨区域的节点间流量付费。例如,如果在一个区域中运行的工作负载需要与另一个区域中的工作负载通信,则跨区域的流量会产生费用。如需了解详情,请参阅 Compute Engine 价格页面上的同一地区内不同区域之间的出站流量(每 GB)

地区级集群中的永久性存储

区域永久性磁盘是区域资源,而地区永久性磁盘是多区域资源。在添加永久性存储空间时,除非指定了区域,否则 GKE 会将磁盘分配给单个随机区域。如需了解如何控制区域,请参阅永久性磁盘中的区域

自动扩缩地区级集群

使用集群自动扩缩程序来自动扩缩地区级集群中的节点池时,请牢记以下注意事项。

您还可以详细了解地区级集群的自动扩缩限制,或者集群自动扩缩程序如何在各个区域之间实现平衡

超额预配扩缩限制

为在发生罕见区域性故障的情况下保持容量,您可以允许 GKE 超额预配扩缩限制,即使当某些区域不可用时也能保证最低程度的可用性。

例如,如果为跨越三个区域的集群超额预配 150% 的容量(其中 50% 为多余容量),您可以确保在集群的三分之一容量丢失时,所有流量都会路由到可用区域。在上述示例中,您可以通过为每个区域指定最多六个节点(而不是四个节点)来实现这一点。如果一个区域发生故障,则集群将在其余区域中扩容到 12 个节点。

同样,如果为跨越两个区域的集群超额预配 200% 的容量,则可以确保在集群的一半容量丢失时,所有流量都会重新路由。

您可以详细了解集群自动扩缩程序,或者阅读 Kubernetes 文档中的自动扩缩常见问题解答

后续步骤