当我在 Amazon Elastic Container Service (ECS) 上更新我的应用程序时,我希望在正在运行的服务不停机或不中断的情况下部署新任务。
解决方法
要在零停机时间的情况下启动新任务,请执行以下操作。
将您的部署参数配置为使用滚动更新部署类型
要在 Amazon ECS 中进行零停机时间部署,最佳做法是将最小运行正常百分比设置为 100%,将最大百分比设置为 200%。有关最小运行正常完美值和最大百分比参数的详细信息,请参阅部署配置。
要配置部署参数,请完成以下步骤:
- 打开 Amazon ECS 控制台。
- 选择 Cluster(集群)。
- 在 Clusters details(集群详细信息)页面的 Services(服务)下,选择要更新的服务。然后,选择 Update(更新)。
- 在 Deployment configuration(部署配置)下,配置 Min running tasks %(最小运行任务数(百分比))和 Max running tasks %(最大运行任务数(百分比))值。
- 选择 Update service(更新服务)。
**重要事项:**Amazon ECS 管理容器部署过程,但不处理流量路由。如果您使用负载均衡器,请将负载均衡器配置为将流量路由到 Amazon ECS 任务。如果您通过 AWS CodeDeploy 使用蓝绿部署,请检查流量管理配置。
在任务定义中配置容器实例的 stopTimeout 参数
设置 stopTimeout 参数以确保您的应用程序在部署期间有足够的缓冲时间来完成任务请求。更新 Amazon ECS 任务定义,然后在 Create new task definition revision(创建新任务定义修订)的 Container timeouts - optional(容器超时 - 可选)下,配置 Stop timeout(停止超时)值。
配置 ELB 目标组设置
要配置弹性负载均衡 (ELB) 目标组设置,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 选择 Target groups(目标组),然后选择与您的 Amazon ECS 服务关联的目标组。
- 选择 Group details(组详细信息)选项卡。然后,使用您的值配置 Health check path(运行状况检查路径)、Health check protocol(运行状况检查协议)、Health check port(运行状况检查端口)、Healthy threshold(运行状况正常阈值)和 Unhealthy threshold(运行状况不正常阈值)。
- 选择 Attributes(属性)选项卡,然后配置 Deregistration delay(取消注册延迟)值以满足应用程序需求。
**注意:**最佳做法是将取消注册延迟属性设置为应用程序响应时间的两倍左右。
- (可选)为负载均衡器设置粘性会话,以便正在进行的应用程序请求会话随现有任务一起完成。
要使用高级部署策略,请使用 CodeDeploy
在部署之前,请使用 CodeDeploy 验证 Amazon ECS 服务的状态。
注意:****一次性蓝绿部署流量转移可能会导致服务中断。
为竞价型实例设置自动耗尽
为容器实例开启竞价型实例耗尽以自动耗尽实例。