带有EC2和fargate实例的AWS混合集群



我使用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 Task的worker定义,如下所示:

// 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利用率作为容器上打包任务的度量标准?

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

:

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

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

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

  4. 运行服务时,ECS服务调度器将根据您为服务定义的缩放标准启动或停止任务。

最新更新