HPA缩小kubernetes吊舱

HPA缩小kubernetes吊舱,kubernetes,Kubernetes,我的要求是根据自定义指标(如来自队列的挂起消息)放大POD,POD必须增加以处理作业。在库伯内特斯,与普罗米修斯适配器和普罗米修斯操作员一起,放大工作正常 我在pods中有一个长时间运行的流程,但HPA会检查自定义指标并尝试缩小规模,因为这个流程会扼杀中间操作并丢失该消息。如何在没有进程运行的情况下控制HPA kill only free pod AdapterService可收集自定义指标 序列查询:“{namespace=“default”,service=“hpatest service

我的要求是根据自定义指标(如来自队列的挂起消息)放大POD,POD必须增加以处理作业。在库伯内特斯,与普罗米修斯适配器和普罗米修斯操作员一起,放大工作正常

我在pods中有一个长时间运行的流程,但HPA会检查自定义指标并尝试缩小规模,因为这个流程会扼杀中间操作并丢失该消息。如何在没有进程运行的情况下控制HPA kill only free pod

AdapterService可收集自定义指标
  • 序列查询:“{namespace=“default”,service=“hpatest service”}” 资源: 覆盖: 名称空间: 资源:“名称空间” 服务: 资源:“服务” 姓名: 匹配:“msg\u consumergroup\u lag” metricsQuery:'avg_over_time(msg_consumergroup_lag{topic=“test”,consumergroup=“test”}[1m])”
HPA配置
  • 类型:对象 对象: 描述对象: 种类:服务 名称:custommetric服务 公制: 名称:msg\u consumergroup\u lag 目标: 类型:值 价值:2

目前,HPA无法配置为适应这种性质的工作负载。HPA只需根据缩放算法将部署上的副本计数设置为所需的值,然后部署选择一个或多个POD终止

关于这个话题,你可能感兴趣的地方有很多讨论。HPA无法解决这一问题,也可能永远无法解决。对于这种类型的工作负载,可能需要一种不同类型的自动缩放器。链接中给出了一些建议,可以帮助您定义其中一个

如果我自己承担这个责任,我会创建一个新的控制器,相应的CRD包含一个作业定义和扩展要求。我不会扩展部署,而是让it启动作业。我会让作业完成它们的工作(处理队列),直到它们变为空闲(队列中没有项目),然后退出。控制器只会通过添加作业来放大,而不会缩小。当队列为空时,作业本身将通过退出来缩小规模

这需要您的作业能够通过检查队列并在没有任何内容时退出来检测它们何时变为空闲。如果您的队列永久读取块,这将不起作用,您将需要一个不同的解决方案

有一个很好的作业控制器示例。我将从这一点开始,并通过检查您发布的指标并相应地开始工作来扩展它


另请参阅Kubernetes文档。

我将在此处提出建议和想法,您可以在HPA向上扩展时运行自定义脚本以禁用HPA,脚本应继续检查资源和进程,并且在没有进程启用HPA和向下扩展时,或者使用kubectl命令杀死POD并启用HPA返回。

请共享您使用的自动校准配置。我已更新了配置详细信息。按比例放大效果很好。当发现队列中的消息较少,服务和进程中的消息被消耗,以及我如何指示HPA检查进程是否为PODs并选择空闲POD进行缩放时,就会发生缩放。这里还有一件事是我的服务调用外部进程并等待得到响应,因此我无法使用基于CPU/内存的方法进行验证