我正在尝试不仅通过自定义指标,而且通过与here描述的算法不同的算法来水平自动缩放工作负载
1/这可能吗?
2/如果不是,假设我不介意创建一个容器来为我做自动伸缩,而不是HPA,我应该调用什么接口来做与kubectl scale deployments/<name> --replicas=<newDesired>
等效的工作?
以下是用例:
1/工作负载使用队列中的单个请求,处理它们,完成后删除它处理的项目,并使用下一条消息。
2/当有超过0条准备好的消息时-我希望扩展到准备好的消息数量(如果它更大,则扩展到最大规模)。当有0条消息被处理时-我想缩小到0。
将消息准备就绪/正在处理的消息发送到metrics服务器不是问题。
让HPA通过“消息就绪”进行扩展也不是问题。
但是..。
HPA算法逐渐扩展..。当我在队列中放置10个项目时-它首先是4,然后是8,然后是10。
它还会逐渐缩小,当它缩小时,它可以终止正在处理的pod -从而增加“就绪”并导致规模扩大。
如果我知道要调用的node.js代码(HPA的整数),我就会运行它:
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>;
}
发布于 2019-09-13 18:18:23
1)我认为这是不可能的。HPA控制器内置在Kubernetes中,我不认为它的算法可以扩展/替换。
2)可以,您可以创建一个自定义控制器,使用您自己的算法来完成HPA的工作。要通过Kubernetes API向上和向下扩展部署,您需要对部署执行manipulate the Scale sub-resource。
具体地说,要将部署扩展到新数量的副本,您需要发出以下请求:
PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale
使用Scale资源(包含所需的副本计数)作为主体参数,如API参考中所述。
https://stackoverflow.com/questions/57926969
复制相似问题