集群自动扩缩器

本页面介绍如何自动扩缩集群。如需了解集群自动扩缩器的工作原理,请参阅集群自动扩缩器

集群自动扩缩功能会根据工作负载的需求自动调整给定节点池中的节点数量。您可以为集群中的每个节点池指定 minReplicasmaxReplicas 值。

对于单个节点池,minReplicas 必须 ≥ 1。但是,在任何给定时间,未设置污点的用户集群节点的总和必须至少为 3。这意味着所有自动扩缩的节点池的 minReplicas 值之和,加上所有非自动扩缩节点池的 replicas 值之和的总和必须至少为 3。

创建启用自动扩缩功能的用户集群

如需创建启用自动扩缩功能的用户集群,请将 autoscaling 字段添加到用户集群配置文件中的 nodePools 部分。

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

此配置会创建一个包含 3 个副本的节点池,并应用最小节点池大小为 1 且最大节点池大小为 5 的自动扩缩功能。

minReplicas 值必须 ≥ 1。

添加启用自动扩缩功能的节点池

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

  1. 修改用户集群配置文件以添加新节点池,并添加 autoscaling 字段。根据需要调整 minReplicasmaxReplicas 的值。

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. 运行以下命令:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

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

如需为现有集群中的节点池启用自动扩缩功能,请执行以下操作:

  1. 修改用户集群配置文件中的特定 nodePool,并添加 autoscaling 字段。根据需要调整 minReplicasmaxReplicas 的值。

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. 运行以下命令:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

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

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

  1. 修改用户集群配置文件并移除该节点池的 autoscaling 字段。

  2. 运行 gkectl update cluster 命令。

检查集群自动扩缩器的行为

您可以通过多种方式确定集群自动扩缩器正在执行的操作。

检查集群自动扩缩器日志

首先,找到集群自动扩缩器 Pod 的名称。运行以下命令,注意将 USER_CLUSTER_NAME 替换为用户集群名称:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler

如需检查集群自动扩缩器 Pod 上的日志,请将 POD_NAME 替换为该 Pod 的名称:

kubectl --kubeconfig ADMIN_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler ADMIN_KUBECONFIG

检查配置映射

集群自动扩缩器会发布 kube-system/cluster-autoscaler-status 配置映射。如需查看此映射,请运行以下命令:

kubectl --kubeconfig USER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

检查集群自动扩缩事件。

您可以检查以下对象上的集群自动扩缩事件

  • pod 上(特别是无法调度的 pod 或未充分利用的节点上)
  • 节点上
  • kube-system/cluster-autoscaler-status 配置映射。

问题排查

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

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

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