在具有spot实例的EKS集群中运行的Web服务器



我正在EKS集群中运行web服务器部署。部署暴露在NodePort服务、入口资源和AWS负载均衡器控制器后面。该部署被配置为在";"始终打开";节点,使用节点选择器。

EKS集群运行额外的自动扩展工作负载,如果需要,也可以使用spot实例(在同一命名空间中(。

由于节点端口服务在集群中的所有节点上公开一个静态端口,因此在所述目标组中有许多目标,每当从集群中添加/删除新节点时,这些目标都会被注册和注销。

如果来自客户端的请求被导航到驻留在即将缩减的节点中的服务,会发生什么?

我在问,因为我从ALB收到了很多504网关超时。具体而言,这些请求不会到达我们的FE/BE吊舱,并在ALB级别终止。

欢迎来到社区@gil shelef!

根据AWS文档,应该使用额外的处理程序来增加弹性和成本节约。

让我们先了解一下这是如何工作的:有一个特定的node termination handlerDaemonSet,它向每个spot实例添加pod并侦听spot实例中断通知。这提供了一种可能性,可以优雅地终止该节点上任何正在运行的pod,从负载均衡器中耗尽节点,并让Kubernetes调度器在不同的实例上重新安排已删除的pod。

工作流程如下(取自aws文档-Spot Instance Interruption Handling。此链接还有一个示例(:

工作流可以概括为:

  • 确定Spot实例将在两分钟后中断
  • 使用两分钟的通知窗口为节点的终止做好准备
  • 污染节点并将其封锁,以防止新的吊舱被放置在上面
  • 排空运行舱上的连接

一旦从端点删除pod,kube代理将触发iptables中的更新。这需要一点时间。为了让最终用户更顺利,您应该考虑添加大约5-10秒的停止前暂停。关于这种情况是如何发生的以及如何缓解的更多信息,你可以在我的回答中找到。

这里还有这些处理程序的链接:

  • 节点终止处理程序
  • AWS上的群集自动缩放器

对于您的最后一个问题,请查看这篇关于如何排除EKS和504错误的AWS KB文章

相关内容

最新更新