Kubernetes /编译器-自动缩放器:如何配置网络布局以最大限度地提高资源利用率?

nr7wwzry  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(78)

还是有点K8的菜鸟,希望有人能在这里提供一些指导。

设置:

  • 负责运行CI作业的k8s集群。这些作业最多可运行20分钟。
  • 集群中也有一个代理pod在运行,它负责声明作业并启动运行作业的pod(每个作业示例一个pod)
  • 集群中有一个正在运行的cluster-autoscaler Pod。由于CI的周期性/可变性,我们需要能够动态扩展可用节点的数量以满足需求。

问题一:

  • 在缩小规模的过程中,我们看到工作舱在工作中被杀死。这显然是不可取的。

尝试解决方案:

  • 根据CA常见问题解答,我已将CA的scale-down-utilization-threshold配置为0
  • 我还将scale-down-unneeded-time缩短为从10m1m,希望增加空节点保持空状态足够长时间以触发缩减的概率。

问题二:

  • 虽然上面的内容似乎解决了问题#1,但我现在有一个新的问题,即集群资源利用率要低得多。

为什么会这样?

我相信在默认情况下,k8的工作负载放置类似于所有合格节点之间的循环调度(如果我错了请纠正我)。这意味着,一旦集群扩展,节点将运行至少一个作业的概率非常高。这将防止CA缩减节点,即使利用率很低并且作业可以轻松地打包到更少数量的节点中。

期望行为

我正在寻找一种方法来配置k8s,以便在集群配置的其他约束条件下,以更有利于提高资源利用率的方式放置pod。
到目前为止,我能想到的唯一方法是使用配置好的标签+节点亲和性的多层节点,在第2层开始接收pod之前,第1层会被填满,等等。虽然我认为这会起作用,但它似乎很混乱,应该有更好的方法。

wnvonmuf

wnvonmuf1#

你需要看看Karpenter。与cluster-autoscaler相比,它直接与EC2示例一起操作,而不是通过ASG。
在您的情况下,当您有一个新的CI任务时,它将创建一个仅适合所需POD的示例,从而使您有更多的机会在其上不运行其他POD。因此,当工作完成时,整个节点将被终止。我们已经在我们所有的项目中使用了一年多,它工作得很好。

相关问题