具有自动扩缩功能的 GKE 节点池不会缩减

时间:2021-03-15 17:04:07

标签: kubernetes google-kubernetes-engine autoscaling

我有一个带有两个节点池的 GKE 集群。我在我的一个节点池上打开了自动缩放,但它似乎没有自动缩小。

autoscaling enabled

我已启用 HPA 并且工作正常。当我看不到流量时,它会将 Pod 缩小到 1。

API 目前没有获得任何流量,因此我希望节点也能缩小规模。

尽管有些节点使用了不到 50% 的可分配内存/CPU,但它仍然最多运行 5 个节点。

5 nodes

我在这里错过了什么?我打算将这些 Pod 移到更大的机器上,但要做到这一点,我需要节点自动缩放来控制每月成本。

1 个答案:

答案 0 :(得分:1)

导致 CA 无法成功缩减规模的原因有很多。如果我们恢复它应该如何正常工作,它将是这样的:

  • 集群自动调节程序将定期检查(每 10 秒)节点的利用率。
  • 如果利用率小于 0.5,节点将被视为利用率不足。
  • 然后节点将被标记为删除,并在接下来的 10 分钟内受到监控,以确保利用率保持在 0.5 以下。
  • 如果即使在 10 分钟后它仍然没有得到充分利用,那么该节点将被集群自动调节程序移除。

如果上面没有完成,那么其他原因会阻止您的节点缩小规模。根据我的经验,PDB 需要应用于 kube-system pods,我认为这可能是原因;但是,发生这种情况的原因有很多,以下是可能导致缩减问题的原因:

1. PDB 不适用于您的 kube-system pod。 Kube-system pod 会阻止 Cluster Autoscaler 删除它们正在运行的节点。您可以为 kube-system pod 手动添加 Pod 中断预算 (PDB),这些 kube-system pod 可以安全地重新安排在其他地方,这可以使用下一个命令添加:

`kubectl create poddisruptionbudget PDB-NAME --namespace=kube-system --selector app=APP-NAME --max-unavailable 1`

2.容器使用本地存储(卷),甚至是空卷。 Kubernetes 可防止在具有使用本地存储的 Pod 的节点上缩减事件。寻找这种防止 Cluster Autoscaler 缩减节点的配置。

3.带有 cluster-autoscaler.kubernetes.io/safe-to-evict: true 注释的 Pod。 查找带有此注释的 Pod,以防止节点缩减

4.用 cluster-autoscaler.kubernetes.io/scale-down-disabled: true 注释的节点。 查找带有此注释的节点,这些节点可以阻止集群自动缩放。这些配置是我建议您检查的配置,以使您的集群能够缩减未充分利用的节点。 -----

您还可以看到 this 页面,其中解释了防止降级的配置,这可能是您正在发生的事情。