HPA 缩减 kubernetes pod

Posted

技术标签:

【中文标题】HPA 缩减 kubernetes pod【英文标题】:HPA scale-down-kubernetes pods 【发布时间】:2020-04-16 04:54:27 【问题描述】:

我的要求是在自定义指标上扩展 PODS,例如来自队列的待处理消息增加 pod 必须增加以处理作业。在 kubernetes 中,扩展与 prometheus 适配器和 prometheus 运算符一起工作正常。

我在 pod 中运行了很长时间的进程,但 HPA 检查自定义指标并尝试缩减,由于此进程终止了操作中间并丢失了该消息。我如何控制 HPA 只杀死没有进程运行的空闲 pod。

AdapterService 收集自定义指标

seriesQuery: 'namespace="default",service="hptest-service"' 资源: 覆盖: 命名空间: 资源:“命名空间” 服务: 资源:“服务” 姓名: 匹配:“msg_consumergroup_lag” metricsQuery: 'avg_over_time(msg_consumergroup_lagtopic="test",consumergroup="test"[1m])'

HPA 配置

类型:对象 目的: 描述对象: 种类:服务 名称:custommetric-service 指标: 名称:msg_consumergroup_lag 目标: 类型:值 值:2

【问题讨论】:

请分享您使用的自动缩放配置。 我已经更新了配置细节。扩大规模工作正常。当它发现队列中的消息较少时发生缩减,服务和进程消耗了 msg,以及我如何指示 HPA 检查进程是 POD 并选择空闲 POD 进行缩减。这里还有一件事是我的服务调用外部进程并等待获得响应,因此我无法使用基于 CPU/内存的验证 【参考方案1】:

KEDAScaledJobs 最适合此类场景,可以通过 Queue、Storage 等方式触发(目前可用的 scaler 可以在here 找到)。 ScaledJobs 在执行之间不会被杀死,建议用于长时间运行的执行。

【讨论】:

【参考方案2】:

我有类似的用例来根据队列长度扩展部署,我使用了 KEDA (keda.sh),它就是这样做的。只要知道它会缩减为该部署创建的额外 pod,即使该 pod 当前正在处理数据/输入 - 您必须配置冷却参数以适当缩减。

【讨论】:

【参考方案3】:

我会在这里提出建议和想法,您可以运行自定义脚本以在 HPA 扩展时立即禁用它,并且该脚本应继续检查资源和进程,并且当没有进程启用 HPA 和缩减时,或者使用杀死 pod kubectl 命令并重新启用 HPA。

【讨论】:

【参考方案4】:

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

this Kubernetes issue 中有很多关于此主题的讨论,您可能会感兴趣。 HPA 无法解决它,而且可能永远也不会。对于这种类型的工作负载,可能需要一种不同类型的自动缩放器。链接中提供了一些建议,可以帮助您定义其中之一。

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

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

kubebuilder project 有一个出色的作业控制器示例。我会从这个开始,并通过检查您发布的指标并相应地开始工作的能力来扩展它。

另请参阅 Kubernetes 文档中的 Fine Parallel Processing Using a Work Queue。

【讨论】:

以上是关于HPA 缩减 kubernetes pod的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在 Kubernetes 中由 HPA 创建的特定时间段内新扩展的 Pod 缩减?

即使使用量低于阈值,Kubernetes 部署也不会缩减

云原生之kubernetes实战kubernetes集群的HPA弹性伸缩

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩

在 Kubernetes 中为 Statefulset 应用 HPA?