2

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

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

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

我可以想到一些解决方案,但我都不喜欢:

  1. 向调用者添加重试机制,保持集群不变。
  2. 不要将 HPA 用于 Web 请求 pod(似乎它违背了目的)。
  3. 尝试创建某种自定义指标,看看我是否可以将该指标导入 Kubernetes(例如https://kubernetes.io/docs/tasks/run-application/horizo ​​ntal-pod-autoscale/#support-for-custom-metrics )

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

4

1 回答 1

3

优雅关闭 Pod

您必须设计您的应用程序以支持正常关机。首先,您的 pod 将收到一个SIGTERM信号,30 秒后(可以配置)您的 pod 将收到一个SIGKILL信号并被移除。请参阅Pod 的终止

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

幂等性设计

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

于 2019-11-11T15:32:59.967 回答