amazon-ecs - 具有 ec2 计数的 ECS 自动扩展集群
问题描述
为了部署我的 docker-compose,我使用 AWS ECS。
一切正常,除了自动缩放。
创建 ECS 集群时,
我可以决定实例的数量。
所以我把它定义为1。
接下来,在我的集群上创建服务时,
也可以决定任务的数量。
我知道在实例上运行的任务,所以我将它定义为 1。
并像这样指定自动缩放策略。
如您所知,如果 cpu 百分比在 5 分钟内达到 50,它会自动添加一个任务。
所以完成配置它,我运行基准测试。
在服务描述中,期望的任务增加到 2。
但是实例没有自动添加。
在事件日志中,
也许我在集群中将实例数定义为 1,所以它无法启动新任务。
为什么自动伸缩不会自动在我的集群上添加新实例?
我的配置有问题吗?
谢谢。
解决方案
您的 ecs 集群没有自动缩放实例数量。它自动缩放在现有集群中运行的任务数量。一个 ec2 实例可以运行多个任务。要自动缩放实例计数,您需要使用 cloudwatch 警报: https ://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch_alarm_autoscaling.html
当 ECS 尝试使用“最接近的匹配容器实例”时,您收到此问题是因为端口冲突,在这种情况下,该实例以 9e5e 结尾。
当尝试在该实例上启动任务时,它会注意到该实例“已在使用您的任务所需的端口”
为了解决此问题,您需要为您的 ECS 集群使用动态移植。
亚马逊在此处提供了有关如何执行此操作的教程: https ://aws.amazon.com/premiumsupport/knowledge-center/dynamic-port-mapping-ecs/
本质上,您需要修改任务定义中的端口映射,该任务定义包含您尝试运行和扩展的 docker 容器。
主机端口的端口映射应该是 0,然后是应用程序用于容器端口的端口号。
零值将使运行的 ECS 集群中的每个 docker 实例为其主机端口使用不同的编号,从而消除您遇到的端口冲突。
推荐阅读
- azure-table-storage - 执行更新元素时是否需要考虑 Azure 表存储中的 Etag?
- amazon-s3 - 如何使用 aws-cli 确定 S3 存储桶是否具有公共访问权限
- python - 遍历 XML 标记并在该属性中获取标记 - Python
- python - 在python中使用图形索引
- swift - 在 Firebase 中将本地化日期转换为时间戳
- sql - Postgresql 比较 varchar 和 time 类型
- react-admin - 如何从菜单中删除指向资源列表视图的链接?
- java - 如何为 htmleditorkit 设置换行行为
- ruby-on-rails - 通过控制器查询拉取Activerecord连接表信息
- oracle - 为什么我的 Oracle DataSource 只有在单元测试时才会出现重放错误?