我在项目中使用Kubernetes,特别是HPA。所以,在项目中,我们每分钟都启动check-status
请求,检查是否所有微服务都可用。可用性是由每个微服务的一个副本(不是全部(的简单响应定义的
但我有一个时刻与HPA有关。当HPA自动决定从集群中删除一些pod,并且我的check-status
请求同时到达服务器时,我的API-gateway服务经常会将其推送到已删除的pod,但没有得到任何响应。这意味着我们的服务器无法使用微服务
我的问题是,设置自动缩放器以避免这种情况的最佳方式是什么。
在这种情况下,它与HPA无关,更多的是关于如何优雅地关闭您的pod。
简而言之,你的服务/LB不知道你的pod是否准备好接受新的请求,所以在SIGTERM
信号上,你的pod应该将你的readiness probe
设置为false,并给应用程序一些时间关闭。如果您的就绪探测器不正常,服务将不会向您的吊舱发送新请求。然后,一旦所有请求都被处理完毕,你就可以关闭它,并且pod不会收到新的请求。
我建议你阅读这些来源:
- https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace
- https://pracucci.com/graceful-shutdown-of-kubernetes-pods.html