我正在尝试不仅通过自定义指标而且通过与here所述算法不同的算法来水平自动缩放工作负载
1 /有可能吗?
2 /如果不是,并且假设我不介意创建一个为我而不是HPA进行自动缩放的容器,那么我应该调用什么API来完成kubectl scale deployments/<name> --replicas=<newDesired>
的作用?
这是用例:
1 /工作负载只消耗一个队列中的单个请求,对其进行处理,完成后会删除它处理的项目,并消耗下一条消息。
2/2,当准备好多于0的消息时-我想扩大到准备好的消息数(或更大的最大比例)。 当有0条消息正在处理时-我想缩小为0。
准备好消息/将消息处理到度量服务器不是问题。
通过“消息准备就绪”使HPA扩展也不是问题。
但是...
HPA算法逐渐扩展... 当我将10个项目放入队列时-首先是4,然后是8,然后是10。
它也逐渐缩小,缩小时可以终止正在处理的吊舱-这样就增加了“就绪”并导致放大。
如果我知道要调用的api(HPA集成),我将要运行的node.js代码:
let desiredToSet = 0;
if (!readyMessages && !processingMessages) {
//if we have nothing in queue and all workers completed their work - we can scale down to minimum
//we like it better than reducing slowly as this way we are not risking killing a worker that's working
desiredToSet = config.minDesired;
}
else {
//messages ready in the queue, increase number of workers up to max allowed
desiredToSet = Math.max(Math.min(readyMessages + processingMessages, config.maxDesired), currentDeploymentReplicas);
}
//no point in sending a request to change, if nothing changed
if (desiredToSet !== currentDeploymentReplicas) {
<api to set desiredToSet of deployment to come here>;
}
答案 0 :(得分:3)
1)我认为不可能。 HPA控制器内置在Kubernetes中,我认为它的算法不能扩展/替换。
2)是,您可以创建一个自定义控制器,该控制器使用您自己的算法来完成HPA的工作。要通过Kubernetes API上下扩展部署,请manipulate the Scale sub-resource部署。
具体地,为了将Deployment扩展到新的副本数,请发出以下请求:
my_array = np.array([(0.9, 0.95), (0.8, 0.96)], dtype=[('score', np.float64), ('confidence', np.float64)])
print(my_array)
>>> array([(0.9, 0.95), (0.8, 0.96)],
dtype=[('score', '<f8'), ('confidence', '<f8')])
print(my_array['score'])
>>> array([0.9, 0.8])
使用Scale资源(包含所需的副本数)作为主体参数,如API参考中所述。