【问题标题】:AWS Instance Fleets with multiple ec2 types具有多种 ec2 类型的 AWS 实例队列
【发布时间】:2022-01-10 02:48:34
【问题描述】:

我正准备将我的团队转移到 AWS 实例队列。到目前为止,在测试中,它很棒。它通过实例多样化确实有助于解决容量问题。

但是,我预计 AWS 会根据我提供给实例队列模板的类型来选择混合实例。例如,我在模板中将 15 个核心节点定位为 i3.2xlarge 或 r5d.2xlarge。因此,我希望我的队列包含一些 i3.2xlarge 和 r5d.2xlarge 实例的组合。相反,我的车队专门配备 r5d.2xlarge 机器。

也许这种行为是由于默认分配策略,r5d.2xlarge 的供应量确实比 i3.2xlarge 多,这就是没有使用 i3.2xlarge 机器的原因。

但我的问题是:对于实例队列中的核心节点,该核心节点是否可以包含不同类型的实例?

编辑:

我通过 run_job_flow() 使用 python 和 boto3 来创建集群。我正在使用boto3 docs 中描述的模板。

当我运行以下命令时,我的所有核心实例都是相同的实例类型。我尝试将AllocationStrategy 设置为diversified,但收到错误未知参数错误。阅读 boto3 文档后,听起来好像不支持。

那么我该如何调整这个模板,在同一个集群的同一个核心节点上创建不同的实例类型呢?

我在InstanceFleets 列表中提交的核心节点字典看起来像这样(记住一些关键值是变量):

'Name': 'Core Node',
'InstanceFleetType': 'CORE',
'InstanceTypeConfigs': [
    { 
        'EbsConfiguration': { 
            'EbsBlockDeviceConfigs': [ 
                { 
                    'VolumeSpecification': {
                        'SizeInGB': core_ebs_volume_gb_size,
                        'VolumeType': core_ebs_volume_type
                    },
                    'VolumesPerInstance': core_ebs_volumes
                }
            ],
            'EbsOptimized': True
        },
        'InstanceType': 'i3.2xlarge',
        'WeightedCapacity': 1
    },
    { 
        'EbsConfiguration': { 
            'EbsBlockDeviceConfigs': [ 
                { 
                    'VolumeSpecification': {
                        'SizeInGB': core_ebs_volume_gb_size,
                        'VolumeType': core_ebs_volume_type
                    },
                    'VolumesPerInstance': core_ebs_volumes
                }
            ],
            'EbsOptimized': True
        },
        'InstanceType': 'r5d.2xlarge',
        'WeightedCapacity': 1
    },
    { 
        'EbsConfiguration': { 
            'EbsBlockDeviceConfigs': [ 
                { 
                    'VolumeSpecification': {
                        'SizeInGB': core_ebs_volume_gb_size,
                        'VolumeType': core_ebs_volume_type
                    },
                    'VolumesPerInstance': core_ebs_volumes
                }
            ],
            'EbsOptimized': True
        },
        'InstanceType': 'c5d.2xlarge',
        'WeightedCapacity': 1
    },
],
'TargetOnDemandCapacity': 3,
'LaunchSpecifications': {
    'SpotSpecification': {
        'TimeoutDurationMinutes': 60,
        'TimeoutAction': 'SWITCH_TO_ON_DEMAND',
        'AllocationStrategy': 'capacity-optimized'
    }
}

【问题讨论】:

  • 我可以理解计算和内存优化的混合,但 i3 混合在一起就像那些通常用于更多利基用途的奇怪。

标签: python amazon-web-services amazon-ec2 boto3


【解决方案1】:

您可以通过设置EC2 Fleet instance weighting 来混合实例类型和设置权重。

This docs 页面显示了一些 CLI 设置示例,如下所示。

aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \
--instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \
InstanceFleetType=CORE,TargetSpotCapacity=11,InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\
'{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\
LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'}

在此设置中,WeightedCapacity=5 用于 m4.2xlarge,WeightedCapacity=3 用于 m5.xlarge。

【讨论】:

  • 这很有帮助,但我没有在帖子中提到我正在使用 python 和 boto3 通过 run_job_flow() 创建车队。看来我需要在模板中指定分配策略 = 'diversified' 以获取多个实例。这是文档:boto3.amazonaws.com/v1/documentation/api/latest/reference/…
  • 我已经更新了这个问题。
  • 抱歉,我查了一下,spot 实例和 boto3 似乎没有办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2015-11-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
相关资源
最近更新 更多