【问题标题】:New instances not getting added to ECS with EC2 deployment没有通过 EC2 部署将新实例添加到 ECS
【发布时间】:2021-06-02 20:14:21
【问题描述】:

我正在使用使用 CDK 的 EC2 部署来部署队列处理 ECS 服务。这是我的堆栈

from aws_cdk import core, aws_ecs_patterns, aws_ec2, aws_ecs


class EcsTestStack(core.Stack):

def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
    super().__init__(scope, construct_id, **kwargs)

    _container_image = aws_ecs.ContainerImage.from_asset(
        directory=".",
        file='Dockerfile.ECS_Test',
        exclude=["cdk.out"]
    )

    _scaling_steps = [{"upper": 0, "change": -1}, {"lower": 50, "change": +1}, {"lower": 100, "change": +2}]

    _vpc = aws_ec2.Vpc(self, "ecs-test-vpc-v4", max_azs=3)

    _cluster = aws_ecs.Cluster(self, "ecs-test-cluster-v4", vpc=_vpc)

    _cluster.add_capacity("ecs-autoscaling-capacity-v4",
                          instance_type=aws_ec2.InstanceType("t2.small"),
                          min_capacity=1,
                          max_capacity=3)

    self.ecs_test = aws_ecs_patterns.QueueProcessingEc2Service(
        self,
        "ECS_Test_Pattern_v4",
        cluster=_cluster,
        cpu=512,
        scaling_steps=_scaling_steps,
        memory_limit_mib=256,
        image=_container_image,
        min_scaling_capacity=1,
        max_scaling_capacity=5,
    )

堆栈从服务中的 1 个任务和 1 个 EC2 实例开始。根据我的_scaling_steps,当队列中的消息数 > 50 时,应该向服务添加一个新任务,并且应该向服务添加 2 个新任务。堆栈从服务中的 1 个任务和 1 个 EC2 实例开始。

但是当我向队列中添加 200 条新消息时,我可以看到有 1 个新任务添加到我的服务中,然后我什至收到此错误消息。

服务 EcsTestStackV4-ECSTestPatternv4QueueProcessingService5C84D200-c00N6R56hB0p 无法放置任务,因为没有容器实例满足所有 其要求。最接近的匹配容器实例 81e5380c718c4b558567dc6cc1fb1926 可用的 CPU 单元不足。

我还注意到没有添加新的 EC2 实例。

问题:当服务扩展时,如何将更多 EC2 实例添加到我的集群中?

【问题讨论】:

  • 进展如何?仍然不清楚您的问题发生的原因?

标签: amazon-web-services amazon-ec2 amazon-ecs aws-cdk


【解决方案1】:

我可以看到 1 个新任务添加到我的服务中,然后我收到此错误消息。

这是因为 t2.small 有 1000 个 CPU 单元。所以你的两个任务都占用了它们,没有其他实例可以放置你的额外任务。

我还注意到没有添加新的 EC2 实例。

您设置了min_capacity=1,因此您只有实例。 _scaling_steps 仅适用于任务,不适用于自动缩放组中的实例。如果你想要更多实例,你必须设置 min_capacity=2 或任何你想要的值。

我猜你认为QueueProcessingEc2Service 可以同时扩展实例和任务。遗憾的是,事实并非如此。

【讨论】:

  • 谢谢@Marcin,这就解释了。如何让 EC2 实例随任务自动扩展?
  • @DrkStr 没问题。您需要设置Auto Scaling group capacity provider。但我不知道如何在 CDK 中做到这一点。
  • 是的,想出了如何自动扩展容量提供程序。您能否将此链接添加到您的答案中,以便将来来此的人可以找到它:docs.aws.amazon.com/cdk/api/latest/docs/…
猜你喜欢
  • 2021-06-05
  • 2020-09-23
  • 2019-08-02
  • 2019-05-25
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多