问题标签 [amazon-ecs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - 无法将 docker 映像推送到亚马逊 ECR
我是码头工人的新手。我想使用 ECR 私有存储库来存储我的 docker 图像。所以我已经构建了我的 docker 镜像并在本地运行它。我正在使用 CLI。然后在 ECR 上创建了一个存储库,比如 artle/repo,对推/拉图像具有完全访问控制。然后登录到我的 aws 帐户,当我尝试将我的图像从本地推送到 artle/repo 时,小文件被推送,但大文件(比如 349Mb)被卡在推送中间。它没有给出任何错误。它不断显示“推 [=====> ] 42.MB/349MB”。我也尝试推送一些开源图像,因为我的图像可能存在一些错误,但得到了相同的结果。
任何帮助将不胜感激。谢谢。
amazon-web-services - Kubernetes 是否整合容器/Pod 以最大程度地减少资源碎片?
我们一直在使用 AWS-ECS 来调度我们的容器。我看到的 ECS 最紧迫的问题是“资源碎片”。
假设我有以下具有相应资源要求的任务定义/pod:
(为简单起见,仅保留 CPU 要求)
如果我们考虑可用 CPU=2048 的 VM,我们至少需要 3 个 VM 才能运行上述服务。
更进一步,为了运行 Blue Green 部署,我们理论上只需要一个具有 2048 个 CPU 单元的VM 。
但是,随着部署的进行,容器将分散在所有可用的虚拟机中。由于资源不可用,这将使蓝绿部署花费太多时间(甚至失败)。
因此,要使蓝绿色部署按预期工作,我们需要在集群中增加更多额外的虚拟机(更多 $$$) 。
我想知道 Kubernetes 是否提供了这样一个功能,可以整合 pod 以保持最小的资源碎片。
amazon-web-services - 将 IAM 角色应用于 ECS 实例
有没有办法在某些 IAM 角色下运行 ECS 容器?
基本上,如果您有一个依赖 IAM 角色来访问 AWS 资源(如 S3 存储桶或 Dynamo 表)的代码/服务器,那么当您将该代码/服务器作为 ECS 容器运行时,会发生什么?你能控制每个容器的角色吗?
amazon-web-services - 限制服务/应用程序在特定 Amazon ECS 实例中运行
我正在将一些工作负载迁移到 Amazon ECS Container Service,但我发现了一个阻碍我前进的障碍。
理想情况下,在 ECS 上运行的容器化应用程序应该是无状态的,以便它们可以在任何集群实例中运行并横向扩展。但现实情况是,我有一些依赖于 EBS 数据量的应用程序。据我所知,这些卷必须手动附加到特定的集群实例,并且 ECS 应用程序应该放置在该实例中以便能够访问其数据,因此我需要有一些方法来控制这些最终运行的位置。
例如,假设我们有一个由 Amazon ECS 管理的由 3 个 EC2 实例组成的集群。
- 实例1
- 实例2
- 实例3
然后我们有 2 个容器化应用程序:
- app1,它是无状态的
- app2,这取决于 EBS 卷
app1 可以在集群的任何实例中运行,没有问题。
对于 app2,假设我们在 instance2 中附加和挂载 EBS 卷。
现在,问题是:我可以在定义或启动 app2 时限制仅放置在 instance2 中,以便它可以访问 EBS 卷吗?
提前非常感谢!
编辑:
我进一步阅读并在亚马逊的文档中找到了一种方法。文档“<a href="http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html" rel="noreferrer">在任务中使用数据卷”中有一条说明:
重要的
Amazon ECS 不会跨容器实例同步您的数据卷。使用持久数据卷的任务可以放置在集群中具有可用容量的任何容器实例上。如果您的任务在停止和重新启动后需要持久数据卷,您应该始终在任务启动时使用 AWS CLI start-task 命令指定相同的容器实例。
因此,查看 CLI 上的start-task命令,我发现它正是我要寻找的:
开始任务
从指定容器实例或实例上的指定任务定义启动新任务。要使用默认 Amazon ECS 计划程序来放置您的任务,请改用 run-task。
它有两个必需参数,即您要启动的任务定义和应在其上运行任务的容器实例ID(最多 10 个)。
所以调用命令看起来像这样:
我试过了,效果很好。
目前,这似乎是唯一的方法,因为 AWS Web UI 没有在启动任务时提供指定容器实例的字段。
我希望它对某人有用。
amazon-web-services - 对于 AWS ASG,如何为新实例设置自定义就绪检查?
我们有一个运行容器(使用 ECS)的 AutoScaling 组。当我们在 ASG 中添加或替换 EC2 实例时,它们上没有我们想要的 docker 映像。因此,我们使用 cloud-init 运行一些docker pull
命令来在它们启动时获取图像。
但是,ASG 认为新实例已准备好,并终止旧实例。但实际上,在所有 docker 镜像都被拉取之前,这个新实例还没有准备好。
例如,假设我的 ASG 的期望计数是 5,我必须使用 cloud-init 拉出 5 个容器。现在,我想替换我的 ASG 中的所有 EC2 实例。
随着新实例开始启动,ASG 将终止旧实例。但是由于docker pull
延迟,在部署过程中会有一段时间,实际有效实例会少于 3 或 2 个。
仅当 cloud-init 完成时,如何“将实例标记为就绪” ?
注意:我认为 Cloudformation 可以使用 CFN-Bootstrap 弥合这种沟通鸿沟。但我没有使用 Cloudformation。
amazon-ecs - How to read environment variables in a Python-based ECS task
Maybe this is pretty silly, but if I create a ECS task definition (see for example Step 6 of https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/), how can I read the environment variables inside my Python script?
Is it as simple as os.environ["AWS_REGION"]? or should I need to use the boto3 route, eg, http://boto3.readthedocs.org/en/latest/reference/services/ecs.html#ECS.Client.describe_task_definition?
Thanks for your help
amazon-web-services - Amazon ECS 任务和自动扩展组
我对 Amazon ECS 比较陌生,有一个困扰我的问题。
在测试最小可行集群的过程中,我发现无法创建动态大小的服务。只有一个选项可以指定通过控制台或 CLI 或 CloudFormation 更改服务参数的所需任务数量。换句话说,任务的数量是静态定义的。这与自动缩放组的性质相矛盾,因为它会根据需要动态缩放。
那么,如何动态扩展 ECS 任务呢?
amazon-web-services - aws ecs 优化 AMI 中的私有 docker 注册表身份验证不成功
我正在编写一个用于创建 ECS 自动缩放集群的 terraform 脚本。我创建了一个集群并向其中添加了 ec2 容器实例。我的任务定义文件包含一个来自私有 docker 存储库的图像。我浏览了 aws 官方文档并找到了一个私有注册表身份验证页面 并尝试了这两种方法如那里所述。
- 使用 dockercfg
- 码头工人的方式
我将我的 ecs.config 文件放在 S3 存储桶中,在实例启动期间,我将用户数据传递为
在我的第二种方法中,我将使用过的数据传递为
登录到我的容器实例时,我在 /etc/ecs/ecs.config 中找到了数据,但是当我尝试手动提取图像时,我向我显示了一个找不到图像的错误。
然后我在那里尝试 docker login 命令并手动输入我的凭据并尝试再次拉取该图像并最终成功。
我不确定是否有办法通过用户数据自动在 ecs 优化映像中实现私有 docker 注册表身份验证,或者是否做错了什么。
请帮我解决这个问题。
amazon-web-services - 同一实例主机上的多个 Amazon ECS 任务
假设我有一个初始数量为 2 个实例的自动缩放组。假设此自动缩放组的实例属于同一类型(因此具有相同数量的内存和 CPU)。在这种情况下,最大实例数无关紧要。我还有一个 ELB,它在该组的实例之间进行负载平衡。除此之外,这个自动缩放组的实例是我之前创建的一些新 ECS 集群的成员。在这种情况下,只有一个任务定义,只有一个使用 512Mb RAM 的容器。此容器还需要从主机的 80 到容器的 5000 的端口映射。
假设我已经启动了这个自动缩放组,并且现在可以使用 2 个初始实例。然后,我尝试根据上述任务定义生成 4 个任务的服务。想象一下,如果这些任务由两个实例放置(如果每个主机都有 1Gb 的 RAM),那么这个任务将完全适合这 2 个实例。
这种设置甚至是合法的吗?如果是这样,那么端口映射会发生什么,因为一台主机上会有 2 个相同的容器?
amazon-web-services - 对 Amazon Ec2 容器服务中使用的实例感到困惑
创建 Ec2 Container Engine 集群时,它会创建一个 Compute Engine 托管实例组来管理创建的实例。这些实例来自 Ec2 服务,这意味着它们是虚拟机。
但是我们知道容器代表了一种基于操作系统级虚拟化而不是硬件虚拟化(如重量级且不可移植的虚拟机)部署容器的新方法,这不是矛盾吗?如我错了请纠正我。
我们使用容器是因为与 VM 相比它们非常快(无论是在启动时间还是在任务执行方面),并且它们节省了大量空间存储。因此,如果我们有一个最多可以支持 4 个容器的节点(vm),我们的客户可以快速午餐 4 个容器,但是超过这个数量,Ec2 自动缩放器将需要午餐一个新的节点(虚拟机)来支持即将到来的容器,这会产生一些任务延迟。
在物理机器上启动容器是不可能的吗?
对于运行关键时间执行任务,您有什么建议?