我对Prometheus完全陌生,并试图为用例实现HPA。
我们的用例是application/pod将异步处理队列中的作业。每个吊舱将尽可能多地拉动作业,一旦达到限制,就必须开始自动缩放。
要做到这一点,有两种方法,
-
Pod将暴露一个Gauge度量;状态";默认情况下,它将为0(可自由处理作业(,一旦它提取了尽可能多的可处理作业,它将被设置为1。因此,在任何时间点,指标都只有0或1,可以取过去10分钟的平均值来确定吊舱上的负载。如果平均值高于0.7,那么我们可以假设吊舱在过去10分钟内被占用了70%以上,必须进行缩放。
-
Pod将暴露直方图度量"0";状态";具有两个桶0&1.每次吊舱完全被占用时,都会观察到该状态,其常数值为1。为了确定何时缩放,我们可以考虑过去10分钟的第90个百分位数,即如果过去10分钟中的第90百分位数不为零,则吊舱在90%的时间内被完全占用,必须放大。
第一种方法更简单,对我来说更有意义,但平均值可能会产生误导。关于直方图,我不太确定它们是否可以用于这样的用例。
如果我需要选择您的方法之一,我可能会选择第一种方法。
但我可能会改变这里的道路。
我可能会使用队列的度量,而不是使用应用程序的度量来决定需要多少个作业/pod。
为此,我使用了KEDA,并推荐它。使用KEDA可以帮助您扩展解决方案,并继续使用普罗米修斯来跟踪正在发生的事情。
KEDA支持作业或部署。在某些情况下,作业(Scaled Job(比部署(Scaled Object(更有优势。例如,如果您可以使用作业,您还可以利用扩展临时节点或从零节点扩展到所需的节点数。