AWS 混合集群与 EC2 和 fargate 实例

AWS mixed cluster with EC2 and fargate instances

我正在将 AWS CDK 用于我的基础设施即代码(下面的 C# .NET 中的 CDK 代码片段)。

我创建了一个 VPC,如下所示:

        // vpc (testing)
        this.vpc = new Vpc(this, "vpc", new VpcProps() {
            MaxAzs = 1,
            NatGateways = 1
        });

我创建的集群如下:

        // cluster
        this.cluster = new Cluster(this, "cluster", new ClusterProps() {
            Vpc = this.vpc
        });

我有一个 Fargate 任务的工人定义如下:

        // worker
        this.workerDefinition = new FargateTaskDefinition(this, 
            "worker-definition", 
            new FargateTaskDefinitionProps() {
                Cpu = 256,
                MemoryLimitMiB = 512
            }
        );

我有 Fargate worker 服务,它通过实例计数和任务定义将 worker 服务绑定到集群:

            var worker = new FargateService(this, "worker", new FargateServiceProps() {
                Cluster = this.cluster,
                DesiredCount = k,       // up to k worker instances
                TaskDefinition = this.workerDefinition
            });

问题:

  1. 我想在集群中至少使用 k 个保留的 EC2 实例。我应该创建这些 EC2 实例并将它们添加到集群吗?
  2. 如果我使用 FARGATE 启动类型调用 ecs.runTask(),Fargate 服务是否会在其中一个预旋转 EC2 实例上启动,直到达到 k 的限制(然后,我打算使用基于工作负载的自动缩放规则来按需启动 FARGATE_SPOT 个实例)?
  3. 我对预先创建并添加到集群的 EC2 实例将用于 运行 FARGATE 任务的理解是否正确?
  4. 调度程序如何决定将任务放置在何处?假设我的任务是可重入的(即,我可以在同一台机器上 运行 多个实例),Fargate 如何知道(或者我如何指示它以便它知道)它可以将多个实例放在同一台机器(即,Fargate 是否自动使用 CPU/IO 利用率作为容器上打包任务的指标)?

您 运行 将 永远不会 运行 在您创建和管理的 EC2 实例上执行的 Fargate 任务,它们将 运行 在管理的计算容量上执行通过 AWS。使用 Fargate 的好处之一是您不必担心管理 EC2 实例。

回答您的问题:

  1. 如果您想 运行 您创建的 EC2 实例上的任务,您将需要使用 EC2 启动模式启动任务。

  2. 如果您使用 FARGATE 启动类型,Fargate 将 运行 您在 AWS 管理的计算能力上的任务。您 运行 的任何 EC2 实例都不会 用于这些任务。

  3. 不,您创建并添加到集群的 EC2 实例仅用于使用 EC2 启动类型启动的任务。

  4. 运行 一个服务,ECS Service Scheduler 将根据您为服务定义的扩展标准启动或停止任务。