kubernetes - 防止K8S HPA在减少负载后删除pod

标签 kubernetes kubernetes-hpa

我有来自 prometheus 适配器的 sidekiq 自定义指标。使用普罗米修斯的队列指标我已经设置了 HPA。当 sidekiq 队列中的作业超过 1000 个作业时,HPA 会触发 10 个新 pod。然后每个 pod 将在队列中执行 100 个作业。当工作减少到 400 个时。HPA 将按比例缩小。但是当缩减发生时,hpa 杀死 pod 说 4 个 pod 被杀死。 Thoes 4 pods 仍在运行作业,说每个 pod 正在运行 30-50 个作业。现在,当 hpa 删除这 4 个 pod 时,在它们上运行的作业也会终止。并且这些工作在 sidekiq 中被标记为失败。

所以我想要实现的是阻止 hpa 删除正在执行作业的 pod。此外,我希望 hpa 即使在负载降至最低后也不会缩小,而是在 sidekiq 指标中队列中的作业为 0 时删除 pod。

有什么办法可以做到这一点?

最佳答案

老实说,奇怪的用法:即使您的流量处于冷却阶段,您也在浪费资源,但是由于您没有提供更多详细信息,所以在这里。

实际上,不可能实现您想要的,因为常见的行为是支持您的工作负载不断增长的负载。实现这一目标的唯一等待(,不推荐 )是更改 horizontal-pod-autoscaler-downscale-stabilization Kubernetes Controller 管理器的 flag到更高的值(value)。

JFI,文档警告您:

Note: When tuning these parameter values, a cluster operator should be aware of the possible consequences. If the delay (cooldown) value is set too long, there could be complaints that the Horizontal Pod Autoscaler is not responsive to workload changes. However, if the delay value is set too short, the scale of the replicas set may keep thrashing as usual.

关于kubernetes - 防止K8S HPA在减少负载后删除pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527783/

相关文章:

http - 如何从 Kubernetes 服务背后的 HTTP 请求中读取客户端 IP 地址?

kubernetes - 恢复Rancher时出错:该群集当前不可用;在API准备就绪之前,与之直接交互的区域将不可用

kubernetes - 将 list 文件应用于已应用水平自动缩放器的部署时,最有效的方式来保持 “idempotentcy”?

kubernetes - 无法使用服务名访问kubernetes服务

azure - 部署使用 istio 的服务时应创建/使用哪些角色?

kubernetes - 停用广告连播的自动重新安排

go - 如何使用go-lang提取Kubernetes中的事件HPA

kubernetes - Kubernetes Horizo​​ntal Pod Autoscaler 中的 Pod 副本缩减是如何工作的?

google-kubernetes-engine - Helm stable/nginx-ingress 具有自动缩放功能,HPA 无法读取 CPU 或内存指标

kubernetes - 多个副本/Pod 如何扩展 Kubernetes?