节点升级和配额

概览

已创建的所有节点均受项目资源配额的限制。所创建的具有特定预留亲和性的任何节点池在其整个生命周期内都会受到预留容量的限制。

超额配置升级会在排空和删除旧节点之前创建额外的虚拟机,因此如果您的项目没有充足的资源配额或预留容量(“配额”在本文中指代这两者),升级可能会失败。

如果可用配额小于 maxSurge 中指定的节点数,则并行升级的数量小于 maxSurge + maxUnavailable。如果您的可用配额不足以创建一个节点且 maxUnavailable 设置为 0,升级就会失败。

下表介绍了表现出不同升级行为的示例:

升级设置 配额允许的额外节点数 结果
maxSurge:5 maxUnavailable:0 5 并行升级 5 个节点。
maxSurge:5 maxUnavailable:0 2 仅并行升级 2 个节点。
maxSurge:5 maxUnavailable:0 0 升级失败,因为无法启用额外的节点,而且升级设置禁止重启现有节点。
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/[ZONE]/clusters/[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. 检查项目中是否有任何占用配额且不再需要的 Compute Engine 资源。如果发现了此类资源,请将其移除,然后再次尝试升级。
  2. 经过第 1 步操作后,如果您仍然无法正常升级,请申请增加配额增加特定预留的容量
  3. 如果由于某种原因而无法增加配额,请将 maxUnavailable 更改为 1,以允许升级进行。此选项只能作为最后的手段,因为最佳做法是保持 maxUnavailable = 0,这可以最大程度地减少因升级导致的中断。

后续步骤