自动扩缩集群


本页面介绍如何自动扩缩标准 Google Kubernetes Engine (GKE) 集群。如需了解集群自动扩缩器的工作原理,请参阅集群自动扩缩器

借助 Autopilot 集群,您无需担心预配节点或节点池,因为节点池通过节点自动预配自动预配;并自动扩缩以满足工作负载的要求。

使用集群自动扩缩器

以下部分介绍如何使用集群自动扩缩器。

创建具有自动扩缩功能的集群

您可以使用 Google Cloud CLI 或 Google Cloud 控制台创建启用了自动扩缩功能的集群。

gcloud

如需创建启用了自动扩缩功能的集群,请使用 --enable-autoscaling 标志并指定 --min-nodes--max-nodes

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --region=COMPUTE_REGION

替换以下内容:

  • CLUSTER_NAME:要创建的集群的名称。
  • NUM_NODES:要在每个位置创建的节点数。
  • MIN_NODES:为每个可用区中指定节点池自动扩缩的节点数下限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数下限,请使用 --total-min-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • MAX_NODES:为每个可用区中指定节点池自动扩缩的节点数上限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数上限,请使用 --total-max-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • COMPUTE_REGION:新集群的 Compute Engine 区域。对于区域级集群,请使用 --zone=COMPUTE_ZONE

示例:创建启用节点自动扩缩功能的集群并设置节点数下限和上限

以下命令会创建一个包含 90 个节点的集群;或者如果区域内有 3 个可用区,则每个可用区内 30 个节点。该集群已启用节点自动扩缩功能,可根据集群负载调整节点数量。集群自动扩缩器可以将默认节点池缩减到每个可用区 15 个节点,也可以将节点池扩容到每个可用区最多 50 个节点。

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --region=us-central

示例:创建启用节点自动扩缩功能的集群并设置节点总数

以下命令会创建一个包含 30 个节点的集群;或者如果区域内有 3 个可用区,则每个可用区内 10 个节点。该集群已启用节点自动扩缩功能,可根据集群负载调整节点数量。在此示例中,集群的总大小介于 10 到 60 个节点之间,无论这些节点在各个可用区之间的分布如何。

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --region us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

控制台

如需创建其中的默认节点池已启用自动扩缩功能的新集群,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据需要配置集群。

  4. 在导航窗格的节点池下,点击默认池 (default-pool)。

  5. 选中启用自动扩缩复选框。

  6. 根据需要更改节点数下限节点数上限字段的值。

  7. 点击创建

添加具有自动扩缩功能的节点池

您可以使用 gcloud CLI 或 Google Cloud 控制台创建启用了自动扩缩功能的节点池。

gcloud

如需将具有自动扩缩功能的节点池添加到现有集群,请使用以下命令:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

替换以下内容:

  • POOL_NAME:所需节点池的名称。
  • CLUSTER_NAME:在其中创建节点池的集群的名称。
  • MIN_NODES:为每个可用区中指定节点池自动扩缩的节点数下限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数下限,请使用 --total-min-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • MAX_NODES:为每个可用区中指定节点池自动扩缩的节点数上限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数上限,请使用 --total-max-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • COMPUTE_REGION:新集群的 Compute Engine 区域。对于区域级集群,请使用 --zone=COMPUTE_ZONE

示例:添加启用了节点自动扩缩功能的节点池

以下命令会创建一个节点池,该节点池已启用节点自动扩缩功能,可将节点池的节点数量扩缩至最多 5 个节点,最少 1 个节点:

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --zone us-central1-c

控制台

如需将具有自动扩缩功能的节点池添加到现有集群,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击 添加节点池

  4. 根据需要配置节点池。

  5. 大小下,选中启用自动扩缩功能复选框。

  6. 根据需要更改节点数下限节点数上限字段的值。

  7. 点击创建

为现有节点池启用自动扩缩功能

您可以使用 gcloud CLI 或 Google Cloud 控制台为现有节点池启用自动扩缩功能。

gcloud

如需为现有节点池启用自动扩缩功能,请使用以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

替换以下内容:

  • CLUSTER_NAME:要更新的集群的名称。
  • POOL_NAME:所需节点池的名称。如果您只有一个节点池,请提供 default-pool 作为值。
  • MIN_NODES:为每个可用区中指定节点池自动扩缩的节点数下限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数下限,请使用 --total-min-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • MAX_NODES:为每个可用区中指定节点池自动扩缩的节点数上限。如需在 GKE 1.24 及更高版本中指定整个节点池的节点数上限,请使用 --total-max-nodes。标志 --total-min-nodes--total-max-nodes 与标志 --min-nodes--max-nodes 互斥。
  • COMPUTE_REGION:新集群的 Compute Engine 区域。对于区域级集群,请使用 --zone=COMPUTE_ZONE

控制台

要为现有节点池启用自动扩缩功能,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,点击要修改的节点池的名称,然后点击 修改

  5. 大小下,选中启用自动扩缩功能复选框。

  6. 根据需要更改节点数下限节点数上限字段的值。

  7. 点击保存

验证是否已为现有节点池启用自动扩缩

您可以通过 Google Cloud CLI 或 Google Cloud 控制台来验证集群是否使用的是自动扩缩。

gcloud

描述集群中的节点池:

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

替换以下内容:

  • POOL_NAME:您选择的新节点池的名称。
  • CLUSTER_NAME:集群的名称。

如果启用了自动扩缩,则输出内容类似如下:

autoscaling:
  enabled: true

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要验证的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,验证节点池是否为 Autoscalling 状态。

创建优先优化未使用的预留的节点池

您可以在创建节点池时使用 --location_policy=ANY 标志,以指示集群自动扩缩器优先利用未使用的预留

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

替换以下内容:

  • POOL_NAME:您选择的新节点池的名称。
  • CLUSTER_NAME:集群的名称。

为现有节点池停用自动扩缩功能

您可以使用 gcloud CLI 或 Google Cloud 控制台为现有节点池停用自动扩缩功能。

gcloud

如需为特定节点池停用自动扩缩功能,请使用 --no-enable-autoscaling 标志:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --region=COMPUTE_REGION

替换以下内容:

  • CLUSTER_NAME:要更新的集群的名称。
  • POOL_NAME:所需节点池的名称。
  • COMPUTE_REGION:新集群的 Compute Engine 区域。对于区域级集群,请使用 --zone=COMPUTE_ZONE

集群大小固定为集群的当前默认节点池大小,您可以手动更新

控制台

要为特定节点池停用自动扩缩功能,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,点击要修改的节点池的名称,然后点击 修改

  5. 大小下,清除启用自动扩缩功能复选框。

  6. 点击保存

调整节点池的大小

对于启用了自动扩缩功能的集群,集群自动扩缩器会在大小下限 (--min-nodes) 和大小上限 (--max-nodes) 值或总大小下限 (--total-min-nodes) 和总大小上限 (--total-max-nodes) 值指定的范围内自动调整节点池的大小。这两组标志是互斥的。您无法通过更改这些值来手动调整节点池的大小。

如果您要手动调整启用了自动扩缩功能的集群中的节点池的大小,请执行以下操作:

  1. 停用节点池的自动扩缩功能
  2. 手动调整集群大小
  3. 重新启用自动扩缩功能并指定节点池的大小下限和上限

阻止在所选节点上调度 Pod

您可以使用 startupstatus 污点来阻止 Pod 调度到选定节点上,具体取决于应用场景。

GKE 1.28 及更高版本中提供此功能。

启动污点

如果有操作必须先完成,然后才能在节点上运行任何 Pod,请使用 startup 污点。例如,在节点上完成驱动程序安装之前,Pod 不应运行。

集群自动扩缩器会将具有 startup 污点的节点视为未就绪,但在纵向扩容逻辑期间会考虑这些节点,假设它们很快就会就绪。

启动污点定义为所有具有 startup-taint.cluster-autoscaler.kubernetes.io/ 前缀的污点

状态污染

如果 GKE 不应使用给定节点来运行 Pod,请使用 status 污点。

集群自动扩缩器会将具有 status 污点的节点视为已就绪,但在纵向扩容逻辑期间会忽略这些节点。即使污点节点已就绪,Pod 也不应运行。如果 Pod 需要更多资源,GKE 会扩容集群并忽略污染的节点。

状态污点定义为所有具有 status-taint.cluster-autoscaler.kubernetes.io/ 前缀的污点

忽略污点

忽略污点定义为所有具有 ignore-taint.cluster-autoscaler.kubernetes.io/ 前缀的污点

问题排查

如需获取问题排查建议,请参阅以下页面:

后续步骤