Kubernetes HPA 和缩减

Posted

技术标签:

【中文标题】Kubernetes HPA 和缩减【英文标题】:Kubernetes HPA and Scaling Down 【发布时间】:2020-03-07 05:17:50 【问题描述】:

我在集群中设置了一个 kubernetes HPA,它可以随着 CPU/内存的增加和减少而按预期扩展和缩小 Pod 实例。

唯一的问题是我的 Pod 处理 Web 请求,因此它偶尔会缩小正在处理 Web 请求的 Pod。 Web 服务器永远不会从缩小的 pod 得到响应,因此 web api 的调用者会得到一个错误。

从理论上讲,这一切都说得通。我的问题是有人知道处理这个问题的最佳实践方法吗?有什么方法可以等到所有请求都处理完毕后再缩小规模?或者通过其他方式确保请求在 HPA 缩小 pod 之前完成?

我能想到几个解决方案,我都不喜欢:

    向调用者添加重试机制,让集群保持原样。 不要将 HPA 用于 Web 请求 pod(似乎没有达到目的)。 尝试创建某种自定义指标,看看是否可以将该指标导入 Kubernetes(例如 https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-custom-metrics)

任何建议将不胜感激。提前致谢!

【问题讨论】:

【参考方案1】:

优雅关闭 pod

您必须将您的应用设计为支持优雅关机。首先,您的 pod 将收到 SIGTERM 信号,30 秒后(可以配置)您的 pod 将收到 SIGKILL 信号并被删除。见Termination of pods

SIGTERM:当您的应用收到终止信号时,您的 pod 将不会收到新请求,但您应该尝试完成已收到请求的响应。

幂等性设计

您的应用还应针对幂等性进行设计,以便您可以安全地重试失败的请求。

【讨论】:

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

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

基于Kubernetes的hpa实现pod实例数量的自动伸缩

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

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

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

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