活性探测能阻止集群规模缩小吗?

活性探测能阻止集群规模缩小吗?

我有一个活性探测器,配置为检查端点的可用性:

livenessProbe:
   httpGet:
      path: /path_example/
      port: 8000
   initialDelaySeconds: 10
   periodSeconds: 60

集群已按照此处的说明启用自动缩放功能 -https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler 最小值为 1,最大值为 3

尽管已经过去了十多分钟,但集群始终显示“当前总大小 - 3”。除了活跃度探测之外,没有任何东西在使用该应用程序。

这是否会导致节点保留并且永远不会缩小?

我看不出节点永远不会宕机的任何其他原因。

更新: 我已经为 CPU 设置了资源,并在部署中设置了自动缩放器,因此现在对于“kubectl get hpa”,我得到:

NAME                   REFERENCE                         TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

one-deployment         Deployment/one-deployment         34%/80%   1         3         1          2m8s

two-deployment         Deployment/two-deployment         47%/80%   1         3         1          8m16s

three-deployment       Deployment/three-deployment       35%/80%   1         3         1          3m29s

four-deployment        Deployment/four-deployment        33%/80%   1         3         1          2m48s

five-deployment        Deployment/five-deployment        47%/80%   1         3         1          2m24s

但我仍然保持最多 3 个节点。

另一个更新: 我很感激任何关于我认为是我学习总结的反馈。我对 Kubernetes 和 GKE 还很陌生,所以请原谅我。

首先,我现在更好地理解了集群上的节点的自动缩放,然后节点上的 pod 的自动缩放。

我首先需要正确完成的部分是集群上节点的自动缩放。当在集群上启用自动缩放时,例如 --enable-autoscaling --no-of-nodes 2 --min-nodes 1 --max-nodes 3。然后,我将部署运行在 2 个节点上,如果所需资源很少,并且 pod 可以移动节点,那么它可能会减少到 1 个。如果指定的 --num-of-nodes 为 3,那么我将部署到 3 个节点,这可能会导致不可移动的 pod 分布在所有三个节点上,从而阻止缩减到 2 个或 1 个节点的能力。

由于从 1 开始导致我的应用程序无法完全部署,因此我将其设置为 2。

现在扩展我的部署以潜在地增加 pod 的数量:在 GCP GKE 控制台中,我选择了“工作负载”,然后在 pod 列表中选择了我的一个部署。然后从这里,我从顶部的菜单中选择“操作”,然后选择“自动缩放”,我保留了默认值 1 最小值和 3 最大值并确认。我对其他 4 个部署重复了此操作。这是我第一次开始研究集群扩展时混淆的水平 pod 扩展。这是我运行“kubectl get hpa”时获得的详细信息。据我所知,这与集群的节点扩展完全无关。

现在我的应用程序正在运行,当我的 pod 上有足够的负载时,hpa 自动缩放将启动并创建新的 pod。这些 pod 将在我现有的两个节点中运行,除非空间不足,此时集群(配置为最多 3 个)将添加第三个节点并将新 pod 分配给此节点。

所以希望我的最后一个问题是 - 我把两个加两个得到 5 了吗?

答案1

欢迎加入 Stack!以下几点可能对您有帮助:

集群自动扩缩器当某些节点长期处于低利用率状态时,集群规模将减小。当节点利用率较低时,该节点将不再需要,并且其所有重要 pod 都可以移至其他地方。

如果没有关于您的环境的更多信息(你是如何创建集群的,集群中运行着什么,你的利用率如何等等)很难猜测,但这里有一些 Pod 类型可以阻止你的集群缩小(如果你的利用率很低,我猜是那些无法被驱逐的 Pod):

  • 正在使用你的集群的 Pod
  • 具有限制性 PodDisruptionBudget 的 Pod。
  • Kube 系统 Pod 可以:
    • 默认情况下不在节点上运行,*
    • 没有 pod 中断预算 设置或其 PDB 过于严格(自 CA 0.6 起)。
  • 不受控制器对象支持的 Pod(因此不是由部署、副本集、作业、状态集等创建的)。*
  • 具有本地存储的 Pod。*
  • 由于各种限制(缺乏资源、节点选择器或亲和性不匹配、反亲和性匹配等)而无法移动到其他地方的 Pod
  • 设置了以下注释的 Pod:
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

*除非 pod 有以下注释(CA 1.0.3 或更高版本支持):

"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"

或者 您已使用相关标志之一覆盖了此行为。 请参阅下文以了解有关这些标志的更多信息。

那么如何扩展集群以仅拥有一个节点呢?

在 0.6 版之前,Cluster Autoscaler 不会触及运行重要 kube-system pod(如 DNS、Metrics Server、Dashboard 等)的节点。如果这些 pod 位于不同的节点上,CA 无法缩小集群,用户最终可能会得到一个完全空的 3 节点集群。在 0.6 版中,我们添加了一个选项来告诉 CA 一些系统 pod 可以移动。如果用户配置 PodDisruptionBudget 对于 kube-system pod,则不接触运行此 pod 的节点的默认策略将被 PDB 设置覆盖。因此,要启用 kube-system pod 迁移,应设置 最低可用 为 0(如果有 N+1 个 pod 副本,则 <= N。)

为了解决此问题,你可能还需要检查 我有几个利用率较低的节点,但它们没有缩减规模。为什么?

相关内容