自动扩缩集群


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

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

使用集群自动扩缩器

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

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

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 | --zone COMPUTE_ZONE]

请替换以下内容:

  • CLUSTER_NAME:要创建的集群的名称。
  • NUM_NODES:要在每个位置创建的节点数。
  • MIN_NODES:指定节点池自动扩缩的节点数下限。
  • MAX_NODES:指定节点池自动扩缩的节点数上限。
  • COMPUTE_REGION:如果要创建区域级集群,请指定要在其中创建集群的区域
  • COMPUTE_ZONE:如果要创建可用区级集群,请指定要在其中创建集群的可用区

示例:创建启用节点自动扩缩功能的集群

以下命令会创建一个包含 30 个节点的集群。该集群已启用节点自动扩缩功能,可根据集群负载调整节点数量。集群自动扩缩器可以将默认节点池缩减到 15 个节点,也可以将节点池扩容到最多 50 个节点。

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 30 \
    --min-nodes 15 --max-nodes 50 \
    --zone us-central1-c

控制台

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

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据需要配置集群。

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

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

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

  7. 点击创建

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

gcloud

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

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --zone COMPUTE_ZONE

请替换以下内容:

  • POOL_NAME:所需节点池的名称。
  • CLUSTER_NAME:在其中创建节点池的集群的名称。
  • MIN_NODES:指定节点池自动扩缩的节点数下限。
  • MAX_NODES:指定节点池自动扩缩的节点数上限。
  • COMPUTE_ZONE:自动扩缩器应在其中创建新节点的可用区

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

以下命令创建大小为 3(默认值)的节点池,它具有基于集群负载的节点自动扩缩功能,可将该节点池扩容到最多 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. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

  3. 点击 添加节点池

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

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

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

  7. 点击创建

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

gcloud

如需为现有节点池启用自动扩缩功能,请使用 --enable-autoscaling 标志,如以下命令所示:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool POOL_NAME \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    [--region COMPUTE_REGION | --zone COMPUTE_ZONE]

请替换以下内容:

  • CLUSTER_NAME:要更新的集群的名称。
  • POOL_NAME:所需节点池的名称。如果您只有一个节点池,请提供 default-pool 作为值。
  • MIN_NODES:指定节点池自动扩缩的节点数下限。
  • MAX_NODES:指定节点池自动扩缩的节点数上限。
  • COMPUTE_REGION:对于区域级集群,指定集群的区域
  • COMPUTE_ZONE:对于可用区级集群,指定集群的可用区

控制台

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

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

  3. 点击节点标签页。

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

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

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

  7. 点击保存

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

gcloud

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

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool POOL_NAME \
   [--region COMPUTE_REGION | --zone COMPUTE_ZONE]

请替换以下内容:

  • CLUSTER_NAME:要更新的集群的名称。
  • POOL_NAME:所需节点池的名称。
  • COMPUTE_REGION:对于区域级集群,指定集群的区域
  • COMPUTE_ZONE:对于可用区级集群,指定集群的可用区

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

控制台

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

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

  3. 点击节点标签页。

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

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

  6. 点击保存

调整节点池的大小

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

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

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

问题排查

请参阅以下有关集群自动扩缩器的问题排查信息:

  • 您可能会遇到集群自动扩缩器的限制之一。
  • 如果您在缩减集群时遇到问题,请参阅 Pod 调度和中断。您可能需要为 kube-system Pod 添加 PodDisruptionBudget。如需详细了解如何为 kube-system Pod 手动添加 PodDisruptionBudget,请参阅 Kubernetes 集群自动扩缩器常见问题解答
  • 进行缩减时,集群自动扩缩器会遵循对 Pod 设置的安排和删除规则。这些限制可以防止自动扩缩器删除节点。如果节点包含满足以下任意条件的 Pod,则可以阻止删除该节点:
    • Pod 的亲和性或反亲和性规则阻止重新安排。
    • Pod 具有本地存储空间。
    • Pod 不受控制器(如 Deployment、StatefulSet、Job 或 ReplicaSet)管理。

如需详细了解集群自动扩缩器以及如何防止中断,请参阅集群自动扩缩器常见问题解答中的以下问题:

后续步骤