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
});
问题:
- 我想在集群中至少使用 k 个保留的 EC2 实例。我应该创建这些 EC2 实例并将它们添加到集群吗?
- 如果我使用 FARGATE 启动类型调用 ecs.runTask(),Fargate 服务是否会在其中一个预旋转 EC2 实例上启动,直到达到 k 的限制(然后,我打算使用基于工作负载的自动缩放规则来按需启动 FARGATE_SPOT 个实例)?
- 我对预先创建并添加到集群的 EC2 实例将用于 运行 FARGATE 任务的理解是否正确?
- 调度程序如何决定将任务放置在何处?假设我的任务是可重入的(即,我可以在同一台机器上 运行 多个实例),Fargate 如何知道(或者我如何指示它以便它知道)它可以将多个实例放在同一台机器(即,Fargate 是否自动使用 CPU/IO 利用率作为容器上打包任务的指标)?
您 运行 将 永远不会 运行 在您创建和管理的 EC2 实例上执行的 Fargate 任务,它们将 运行 在管理的计算容量上执行通过 AWS。使用 Fargate 的好处之一是您不必担心管理 EC2 实例。
回答您的问题:
如果您想 运行 您创建的 EC2 实例上的任务,您将需要使用 EC2 启动模式启动任务。
如果您使用 FARGATE 启动类型,Fargate 将 运行 您在 AWS 管理的计算能力上的任务。您 运行 的任何 EC2 实例都不会 用于这些任务。
不,您创建并添加到集群的 EC2 实例仅用于使用 EC2 启动类型启动的任务。
运行 一个服务,ECS Service Scheduler 将根据您为服务定义的扩展标准启动或停止任务。
我正在将 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
});
问题:
- 我想在集群中至少使用 k 个保留的 EC2 实例。我应该创建这些 EC2 实例并将它们添加到集群吗?
- 如果我使用 FARGATE 启动类型调用 ecs.runTask(),Fargate 服务是否会在其中一个预旋转 EC2 实例上启动,直到达到 k 的限制(然后,我打算使用基于工作负载的自动缩放规则来按需启动 FARGATE_SPOT 个实例)?
- 我对预先创建并添加到集群的 EC2 实例将用于 运行 FARGATE 任务的理解是否正确?
- 调度程序如何决定将任务放置在何处?假设我的任务是可重入的(即,我可以在同一台机器上 运行 多个实例),Fargate 如何知道(或者我如何指示它以便它知道)它可以将多个实例放在同一台机器(即,Fargate 是否自动使用 CPU/IO 利用率作为容器上打包任务的指标)?
您 运行 将 永远不会 运行 在您创建和管理的 EC2 实例上执行的 Fargate 任务,它们将 运行 在管理的计算容量上执行通过 AWS。使用 Fargate 的好处之一是您不必担心管理 EC2 实例。
回答您的问题:
如果您想 运行 您创建的 EC2 实例上的任务,您将需要使用 EC2 启动模式启动任务。
如果您使用 FARGATE 启动类型,Fargate 将 运行 您在 AWS 管理的计算能力上的任务。您 运行 的任何 EC2 实例都不会 用于这些任务。
不,您创建并添加到集群的 EC2 实例仅用于使用 EC2 启动类型启动的任务。
运行 一个服务,ECS Service Scheduler 将根据您为服务定义的扩展标准启动或停止任务。