滚动更新部署时,ALB 如何分发请求到 Fargate 服务?

How does ALB distribute requests to Fargate service during rolling update deployment?

我在集群中部署 Fargate 服务,并使用滚动更新部署。我在我的服务前面配置了一个 ALB,它也在进行健康检查。在升级过程中,我可以看到我当前的任务被标记为 INACTIVE,并且部署了新任务。这两个任务都处于 运行 状态。 我了解到 ALB 正在对新部署的任务进行健康检查,但它保留了两个任务 运行 5 分钟。

关于这个部署时间段,我有几个问题。

  1. ALB 是否会在通过健康检查之前将用户请求分发到我的新任务?
  2. 如果第一个问题的答案是否定的,ALB是否会在旧服务宕机前通过健康检查后将用户请求分发到新服务?
  3. 如果第二个答案是肯定的,那么我的服务中会有两个版本的任务 运行 来为用户请求提供服务 5 分钟。这是真的?我怎样才能确保它一次只向一项服务发送请求。

我不想将部署方法更改为 BLUE/GREEN。我现在想保持滚动更新。

ALB 不会将流量发送到尚未通过健康检查的任务,因此不支持#1。 ALB 将在部署时同时向旧的和新的发送流量,所以是#2。一旦替换任务可用,ALB 将开始耗尽它正在替换的任务。默认时间为 5 分钟。在那段时间里,耗尽实例将不会接收流量,所以对#3 来说有点不对。这部分是您将有一些时间来部署服务的版本 A 和 B。多长时间取决于任务的数量以及它们开始接收流量所需的时间。

我能想到的将所有流量发送到一个版本然后硬切换到另一个版本的唯一方法是每次都创建一个全新的目标组,同时保持旧的处于活动状态。然后,一旦新目标组 运行 切换到它。您必须在执行此操作时更改 ALB 中的路由。

顺便说一句,现在发生的事情就是我所说的滚动部署。