本页面介绍如何自动扩缩标准 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
控制台
如需创建其中的默认节点池已启用自动扩缩功能的新集群,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
根据需要配置集群。
在导航窗格的节点池下,点击默认池 (default-pool)。
选中启用自动扩缩复选框。
根据需要更改节点数下限和节点数上限字段的值。
点击创建。
添加具有自动扩缩功能的节点池
您可以使用 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
控制台
如需将具有自动扩缩功能的节点池添加到现有集群,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击 add_box 添加节点池。
根据需要配置节点池。
在大小下,选中启用自动扩缩功能复选框。
根据需要更改节点数下限和节点数上限字段的值。
点击创建。
为现有节点池启用自动扩缩功能
您可以使用 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
。
控制台
要为现有节点池启用自动扩缩功能,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击节点标签页。
在节点池下,点击要修改的节点池的名称,然后点击 edit 修改。
在大小下,选中启用自动扩缩功能复选框。
根据需要更改节点数下限和节点数上限字段的值。
点击保存。
验证是否已为现有节点池启用自动扩缩
您可以通过 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
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要验证的集群的名称。
点击节点标签页。
在节点池下,验证节点池是否为
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
。
集群大小固定为集群的当前默认节点池大小,您可以手动更新。
控制台
要为特定节点池停用自动扩缩功能,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击节点标签页。
在节点池下,点击要修改的节点池的名称,然后点击 edit 修改。
在大小下,清除启用自动扩缩功能复选框。
点击保存。
调整节点池的大小
对于启用了自动扩缩功能的集群,集群自动扩缩器会在大小下限 (--min-nodes
) 和大小上限 (--max-nodes
) 值或总大小下限 (--total-min-nodes
) 和总大小上限 (--total-max-nodes
) 值指定的范围内自动调整节点池的大小。这两组标志是互斥的。您无法通过更改这些值来手动调整节点池的大小。
如果您要手动调整启用了自动扩缩功能的集群中的节点池的大小,请执行以下操作:
阻止在所选节点上调度 Pod
您可以使用 startup
或 status
污点来阻止 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/
前缀的污点
问题排查
如需获取问题排查建议,请参阅以下页面: