我正在EKS集群中运行web服务器部署。部署在NodePort服务、入口资源和亚马逊网络服务负载均衡器控制器后面公开。此部署配置为使用节点选择器在"always- on“节点上运行。
EKS集群运行额外的自动扩展工作负载,如果需要,这些工作负载也可以使用spot实例(在相同的名称空间中)。
由于Node-Port服务跨集群中的所有节点公开静态端口,因此在所述目标组中有许多目标,每当向集群添加/从集群中删除新节点时,都会注册和注销这些目标。
如果来自客户端的请求被导航到驻留在即将缩小的节点中的服务,那么到底会发生什么?
我之所以问这个问题,是因为我从ALB获得了许多504网关超时。具体地说,这些请求不会到达我们的FE/BE pods,并在ALB级别终止。
发布于 2021-05-04 21:38:00
欢迎来到社区@gil-shelef!
根据AWS文档,应该使用额外的处理程序来增加恢复能力和节省成本。
让我们从理解这是如何工作的开始:有一个特定的node termination handler
DaemonSet,它将pod添加到每个spot实例并侦听spot实例中断通知。这提供了一种可能性,可以优雅地终止该节点上任何正在运行的pod,从负载均衡器中排空该节点,并让Kubernetes调度程序在不同实例上重新调度已删除的pod。
工作流程如下所示(摘自亚马逊网络服务文档- Spot Instance Interruption Handling。此链接还有一个示例):
工作流程可以概括为:
从端点移除pod后,kube-proxy将在iptables中触发更新。这需要一点时间。为了使最终用户更流畅,您应该考虑添加大约5-10秒的停止前暂停。有关这种情况如何发生以及如何缓解的更多信息,您可以在my answer here中找到。
下面是这些处理程序的链接:
对于您的最后一个问题,请查看how to troubleshoot EKS and 504 errors上的这篇AWS文章
https://stackoverflow.com/questions/67356011
复制