我已经配置了一个 AWS ECS 集群,包含 3 个实例(m5.large),每个可用区(A、B 和 C)一个实例。服务的配置如下:
- 服务类型:REPLICA
- 任务数量:3
- 最小健康百分比:30
- 最大百分比:100
- 放置模板:AZ 平衡传播
- 服务自动扩展:否。
在任务定义中,我使用了以下内容:
- 网络模式:awsvpc
- 任务内存:--
- 任务 CPU:--
在容器级别上,我仅配置了 Memory Soft Limit 如下:
- 软限制:2048 MB
- 硬限制:--
我使用 awslogs 来进行日志记录。以上配置是可行的,当我启动服务时,每个实例都有一个 Docker 运行。其中一个实例中的 'docker stats' 显示如下:
MEM USAGE / LIMIT
230MiB / 7.501GiB
容器实例(ECS 控制台)显示如下:
Resources Registered Available
CPU 2048 2048
Memory 7680 5632
Ports 5 ports
以上结果在所有3个实例中都相同--已保留2 GB的内存(软限制),上限内存几乎为8 GB(没有设置硬限制)的实例内存。到目前为止一切正常运作。
但是当我从Jenkins重新部署代码(使用force deploy)时,Jenkins日志中会出现以下错误:
"message": "(service App-V1-Service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 90d4ba21-4b19-4e31-c42d-d7223b34f17b) has insufficient memory available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.
在Jenkins中,该作业显示为“成功”,但运行的是旧代码版本。三个实例上都有足够的内存可用。此外,我已将最小健康百分比更改为30,希望ECS可以停止容器并重新部署新容器。任何解决方案或进一步调试的提示都将非常有帮助。