编排单个容器主机

0

【以下的问题经过翻译处理】 我们拥有一批EC2实例,每个实例用于运行一个Docker容器。这些实例相当大,并且由于存储IO需求相当高,使用AWS EBS作为存储后端。在EC2实例上使用基本的Docker-compose运行docker容器,并且这些Docker-compose文件由全局的ansible管理。工作负载需要相当多的CPU和IOPS,因此存储需要使用EBS。

这是一个传统的设置,但在某些时候我们需要弃用Docker-compose,转向更灵活和现代的工具。工作负载使用特定的一个巨大容器用于每个主机的情况让我认为这并不是一个适合Kubernetes或ECS的例子,尤其是当EBS也涉及到时。

有人能指点一下我正确的方向吗?

1 回答
0

【以下的回答经过翻译处理】 如果您在容器中运行应用程序,但具有应用程序和主机的1对1映射的要求,其实在主机上直接运行应用程序更合适,而不是使用容器层,并使用像“ code-deploy”这样的工具来完成版本控制等功能。

但是,如果您想坚持使用容器,我也认为是用K8s的方案偏重,使用ECS则比较合适。

您可以在ECS中创建一个容量提供者(Capacity Provider),该容量提供者将使用ASG,该ASG本身将使用启动模板。在该启动模板中,您可以预定义所需的EBS挂载,根据需要进行脚本连接,如果您的磁盘需要与EC2实例分别保留,则设置容量提供程序的ECS服务为仅使用该容量提供程序。否则,如果您愿意与其他工作负载共享主机,则可以定义放置策略或仅使用“ DAEMON”模式,该模式将在每个主机上运行1个容器,且仅运行一个。

另外,如果您需要这些EBS磁盘的主要原因是IOps,并且没有巨大的存储(>200GB),那么您可以通过在AWS Fargate上每个主机运行1个任务来实现。在fargate中,您可以免费获得21GB的NVMe驱动器,并且您可以提高到200GB。您不需要支付这些IOPS的费用,但您可能需要支付使用的GP2 / GP3或IO EBS磁盘的费用。

如果需要持久性的磁盘超出容器的寿命,那么EC2就是您唯一的选择。 EFS可能无法提供您需要的性能。

至于如何执行所有这些操作,考虑到您使用了 docker-compose,我建议您保留它。它非常知名,对开发人员友好,并且有一些工具可以使从 "compose 到 ECS" 的部署变得容易,例如 ECS Compose-X。

尽管我还没有像您这样的使用案例提交,但如果您愿意,可以在 Slack 上与我联系,以查看如何修改您的 compose 文件以简化部署,并将其添加到我的测试案例中 :)

以下两个文档供您参考:

[x-ecs.CapacityProviders](https://docs.compose-x.io/syntax/compose_x/ecs.details/ecs.html#capacityproviderstrategy) Fargate 临时存储(如果计划使用 Fargate)。

profile picture
专家
已回答 3 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则