亚马逊网络服务 – 宽限期? – AWS EC2容器服务和弹性负载均衡器

当弹性负载平衡器(ELB)与自动缩放组关联时,可以指定宽限期,在此期间,即使ELB将其标记为不健康,新的EC2实例也不会终止.是否可以指定类似的宽限期,在此期间,即使正在运行任务的ECS实例已被ELB标记为不健康,新的ECS任务也不会被其关联的ECS服务终止并重新启动?

更新:

在我们当前的用例中,作为ECS任务运行的docker容器包含一个JBoss实例,该实例在启动时加载了许多缓存.这些缓存可能需要几分钟才能加载.但是,一旦容器启动,ECS服务就会使用ELB注册容器实例.这意味着可以在准备好接受流量之前将流量路由到新容器.我们可以在ELB上增加运行状况检查间隔和“健康/不健康阈值”,以防止ELB将流量路由到实例,并防止ECS服务重新启动容器,直到缓存已加载.但是,不希望增加运行状况检查间隔和阈值,因为如果在加载高速缓存后将实例标记为运行状况不佳,则ECS服务应尽快重新启动容器(这需要更短的运行状况检查间隔和更小的阈值).

因此,是否可以应用宽限期,在此期间ELB不会将流量路由到新容器,并且ECS服务不会重新启动容器(即使它未通过运行状况检查)?或者没有,对于我们的用例解决方案是否有任何建议?

最佳答案
在与支持团队讨论后,事实证明ECS不能支持我们当前的用例.

有一种解决方法可以解决我们面临的一个问题.解决方法是创建一个单独的,必要的运行状况检查容器,并在与实际应用程序容器相同的ECS任务中.运行状况检查容器的目的是监视应用程序容器以确定应用程序何时完全启动.如果它检测到应用程序无法启动,则退出,导致ECS服务循环任务.然后,ELB被配置为对健康检查容器执行健康检查,健康检查容器将始终通过相关端口报告它已启动.此解决方法将阻止ECS服务因健康检查失败而循环ECS任务.

但是,ELB将立即开始将流量路由到应用程序容器.即使应用程序容器尚未准备好接收流量(例如,因为它仍在等待加载缓存),它也会这样做.目前,没有办法延迟ELB将流量发送到应用程序容器,因为ECS服务不提供支持宽限期.我们已经设法通过SQS向我们的应用程序容器提供消息来解决这个问题,并且只有当它们的高速缓存完全加载时才让它们从队列中拉出来.但是,我们有未来的用例(例如服务Web请求),这不是一个可行的选择.为此,我打算提出宽限期的功能请求.

另外,Kubernetes(http://kubernetes.io/v1.0/docs/user-guide/walkthrough/k8s201.html#application-health-checking)和Marathon(https://mesosphere.github.io/marathon/docs/health-checks.html)已经支持这个健康检查选项,如果有人读到这个选项很高兴不使用托管服务.

转载注明原文:亚马逊网络服务 – 宽限期? – AWS EC2容器服务和弹性负载均衡器 - 代码日志