我正在为我的应用程序使用 Amazon Web Services EC2 容器服务和应用程序负载均衡器。当我部署新版本时,我收到 503 服务暂时不可用大约 2 分钟。这比我的应用程序的启动时间要长一点。 这意味着我现在无法进行零停机部署。
是否有设置可以在新任务启动时不使用它们?或者我在这里缺少什么?
更新:
ALB目标组的健康检查编号如下:
Healthy threshold: 5
Unhealthy threshold: 2
Timeout: 5 seconds
Interval: 30 seconds
Success codes: 200 OK
健康阈值是“在考虑不健康目标健康之前所需的连续健康检查成功次数”
不健康阈值是“在考虑目标不健康之前所需的连续健康检查失败次数。”
超时是“以秒为单位的时间量,在此期间没有响应意味着运行状况检查失败。”
间隔是“单个目标的健康检查之间的大致时间量”
更新2: 因此,我的集群由两个 EC2 实例组成,但可以根据需要进行扩展。所需的最小计数为 2。我每个实例运行一个任务,因为我的应用程序需要特定的端口号。在部署之前(jenkins 运行 aws cli 脚本),我将实例数量设置为 4。如果没有这个,AWS 就无法部署我的新任务(这是另一个需要解决的问题)。组网方式为bridge。
最佳答案
因此,问题似乎在于任务定义中容器设置的端口映射。
之前我使用80作为主机,8080作为容器端口。我认为我需要使用这些,但主机端口实际上可以是任何值。如果将其设置为 0,则 ECS 将分配 32768-61000 范围内的端口,因此可以向一个实例添加多个任务。为了使其正常工作,我还需要更改我的安全组,让流量从 ALB 流向这些端口上的实例。
因此,当 ECS 可以在同一实例上运行多个任务时,50/200 最小/最大健康百分比是有意义的,并且可以部署新任务修订版,而无需添加新实例。这也保证了零停机部署。
感谢所有提问或评论的人!
关于amazon-web-services - AWS ECS 503 服务在部署时暂时不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930719/