确保用于节点升级的资源


本页面介绍了如何确保使用节点升级策略对集群的节点进行更改。我们建议您根据所选的策略,验证您的项目是否有足够的资源来更新 Google Kubernetes Engine (GKE) Standard 节点池。

节点升级所需的资源

视您选择的节点策略和配置而定,节点升级可能需要 GKE 临时创建额外的节点。因此,GKE 在升级节点池时可能需要更多资源。

GKE 创建的所有节点(包括用于升级的节点)受项目的资源配额资源可用性以及具有特定预留亲和性的节点池的预留容量限制。

如果您有特殊的机器类型要求和容量限制,我们强烈建议您验证是否有足够的资源。您可能需要配置所需资源较少的策略,以确保可以升级节点,或执行诸如创建预留之类的其他操作。如需了解详情,请参阅在资源受限的环境中升级

不同升级策略所需的资源

以下部分介绍了使用可用的升级策略所需的额外资源。如果您遇到升级问题,请检查升级操作,并按照说明解决升级错误

超额配置升级的资源

超额配置升级是默认的节点升级策略。由于超额配置升级会在耗尽和删除旧节点之前创建额外的虚拟机(如果 maxSurge 设置为大于零),因此如果您的项目没有足够的资源,升级可能会失败。

如果可用资源小于 maxSurge 中指定的节点数,则并行升级的数量小于 maxSurge + maxUnavailable。如果您没有额外容量,请参阅如何在资源受限的环境中升级

下表介绍了各种不同升级行为的示例:

升级设置 可用资源允许的额外节点数 结果
maxSurge:5 maxUnavailable:0 5 并行升级 5 个节点。
maxSurge:5 maxUnavailable:0 2 仅并行升级 2 个节点。
maxSurge:5 maxUnavailable:0 0 升级失败,因为无法启用额外的节点,而且升级设置禁止重启现有节点。 GKE 会继续尝试自动升级,直到操作成功。
maxSurge:5 maxUnavailable:1 5 并行升级 6 个节点,同时确保节点池由于升级而暂时缺失的节点仅为 1 个。
maxSurge:5 maxUnavailable:1 2 仅并行升级 3 个节点,同时确保节点池由于升级而缺失的节点不超过 1 个。
maxSurge:5 maxUnavailable:1 0 通过滚动升级方法重新创建每个节点,每次仅升级 1 个节点。

蓝绿升级的资源

蓝绿升级会使节点池中的节点数暂时增加一倍,这意味着您的节点池暂时需要两倍的资源。如果您没有足够的可用资源,并且已将节点池配置为使用此策略,请在需要取消对升级的阻止时配置超额配置升级。配置此策略时,请确保配置超额配置升级参数,以使用节点池节点的可用资源。如需了解详情,请参阅上一部分超额配置升级的资源

检查升级操作是否存在与资源相关的故障

您可以通过检查升级操作对象详细了解升级操作,并了解升级是否失败以及失败原因。如需列出升级操作对象,请运行以下命令:

gcloud container operations list \
    --filter="STATUS=DONE AND TYPE=UPGRADE_NODES AND targetLink:https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_NAME"

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • COMPUTE_ZONE:新集群的 Compute Engine 可用区
  • CLUSTER_NAME:您的集群的名称。

如果由于资源配额不足而导致您最近的升级失败,则输出内容如下所示:

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Insufficient quota to satisfy the request: waiting on IG: instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt errors: [QUOTA_EXCEEDED] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 50.0 in region us-central1.\
...

如果失败原因在于预留不足,则输出内容如下所示:

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Reservation does not have enough resources for the request: waiting on IG:\
  \ instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt error: [CONDITION_NOT_MET] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Specified reservation 'foo' does not have available resources\
  \ for the request."

如果失败原因在于容量不足,您将看到资源可用性错误消息

解决升级错误

如果由于资源不足而导致升级失败,请尝试以下步骤:

  1. 考虑使用资源消耗较少的升级策略。如果您当前使用的是蓝绿升级,请考虑超额配置升级。
  2. 检查项目中是否有任何正在消耗资源且不再需要的 Compute Engine 资源。如果发现了此类资源,请将其移除,然后再次尝试升级。
  3. 如果前两个步骤无法取消对升级的阻止,请申请增加配额增加特定预留的容量
  4. 如果您在资源受限的环境中执行操作(例如,有特殊机器类型要求和容量限制的环境),请参阅下一部分,了解用于取消对升级的阻止的步骤。

在资源受限的环境中升级

对于您的节点池正在使用的特定资源(例如 GPU 或 TPU),如果 Google Cloud 拥有的容量有限,我们建议您使用预留以确保有足够的资源。如果无足够的资源,并且没有对现有容量进行预留,则在可以访问更多容量之前,可能无法升级节点。

如果您无法获得任何额外的容量,则不能使用蓝绿升级。对于超额配置升级,maxSurge 需要额外的节点。使用 maxUnavailable 时,如果容量不是来自预留,GKE 会在升级节点时暂时释放节点的容量,这意味着,如果容量有限,您就有失去容量的风险。

根据您是否对需要升级的节点池进行预留,按照以下指导信息进行操作。

在没有预留且容量有限的情况下进行升级

如果您没有对节点池的节点进行预留,我们建议创建预留。但是,如果您无法做到这一点,我们建议您使用默认配置maxSurge=1;maxUnavailable=0 的超额配置升级。采用此配置,您不会有失去现有容量的风险。但是,超额配置升级仅在容量可用时才创建超额配置节点。因此,如果没有可用的容量,升级可能需要更长的时间,并且节点池可能会一直处于部分升级状态,直到您获得容量来升级每个节点为止。

我们建议您创建预留增加现有预留的大小

在具有预留且容量有限的情况下进行升级

如果您对节点池的节点进行预留,则可以在容量受限的环境中升级节点池,调整超额配置升级设置以提升速度和可靠性

如果您在预留中有额外容量,则可以使用 maxSurge 来创建超额配置节点。根据您一次要中断的节点数以及拥有的额外容量,设置 maxSurge。例如,如果您只想一次中断一个节点,或仅拥有可创建一个额外节点的容量,那么请设置 maxSurge=1;maxUnavailable=0

如果您没有任何额外的容量,则可以将 maxUnavailablemaxSurge=0;maxUnavailable=1 等配置搭配使用,因为该容量已被预留。此配置一次中断一个节点,并重新创建节点来更新它。

后续步骤