首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自定义Kubernetes HPA算法

自定义Kubernetes HPA算法
EN

Stack Overflow用户
提问于 2019-09-13 16:03:08
回答 1查看 464关注 0票数 3

我正在尝试不仅通过自定义指标,而且通过与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的整数),我就会运行它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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>;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-13 18:18:23

1)我认为这是不可能的。HPA控制器内置在Kubernetes中,我不认为它的算法可以扩展/替换。

2)可以,您可以创建一个自定义控制器,使用您自己的算法来完成HPA的工作。要通过Kubernetes API向上和向下扩展部署,您需要对部署执行manipulate the Scale sub-resource

具体地说,要将部署扩展到新数量的副本,您需要发出以下请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale

使用Scale资源(包含所需的副本计数)作为主体参数,如API参考中所述。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57926969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文