本页面介绍了如何确保使用节点升级策略对集群的节点进行更改。我们建议您根据所选的策略,验证您的项目是否有足够的资源来更新 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."
如果失败原因在于容量不足,您将看到资源可用性错误消息。
解决升级错误
如果由于资源不足而导致升级失败,请尝试以下步骤:
- 考虑使用资源消耗较少的升级策略。如果您当前使用的是蓝绿升级,请考虑超额配置升级。
- 检查项目中是否有任何正在消耗资源且不再需要的 Compute Engine 资源。如果发现了此类资源,请将其移除,然后再次尝试升级。
- 如果前两个步骤无法取消对升级的阻止,请申请增加配额或增加特定预留的容量。
- 如果您在资源受限的环境中执行操作(例如,有特殊机器类型要求和容量限制的环境),请参阅下一部分,了解用于取消对升级的阻止的步骤。
在资源受限的环境中升级
对于您的节点池正在使用的特定资源(例如 GPU 或 TPU),如果 Google Cloud 拥有的容量有限,我们建议您使用预留以确保有足够的资源。如果无足够的资源,并且没有对现有容量进行预留,则在可以访问更多容量之前,可能无法升级节点。
如果您无法获得任何额外的容量,则不能使用蓝绿升级。对于超额配置升级,maxSurge
需要额外的节点。使用 maxUnavailable
时,如果容量不是来自预留,GKE 会在升级节点时暂时释放节点的容量,这意味着,如果容量有限,您就有失去容量的风险。
根据您是否对需要升级的节点池进行预留,按照以下指导信息进行操作。
在没有预留且容量有限的情况下进行升级
如果您没有对节点池的节点进行预留,我们建议创建预留。但是,如果您无法做到这一点,我们建议您使用默认配置为 maxSurge=1;maxUnavailable=0
的超额配置升级。采用此配置,您不会有失去现有容量的风险。但是,超额配置升级仅在容量可用时才创建超额配置节点。因此,如果没有可用的容量,升级可能需要更长的时间,并且节点池可能会一直处于部分升级状态,直到您获得容量来升级每个节点为止。
在具有预留且容量有限的情况下进行升级
如果您对节点池的节点进行预留,则可以在容量受限的环境中升级节点池,调整超额配置升级设置以提升速度和可靠性。
如果您在预留中有额外容量,则可以使用 maxSurge
来创建超额配置节点。根据您一次要中断的节点数以及拥有的额外容量,设置 maxSurge
。例如,如果您只想一次中断一个节点,或仅拥有可创建一个额外节点的容量,那么请设置 maxSurge=1;maxUnavailable=0
。
如果您没有任何额外的容量,则可以将 maxUnavailable
与 maxSurge=0;maxUnavailable=1
等配置搭配使用,因为该容量已被预留。此配置一次中断一个节点,并重新创建节点来更新它。