全部产品
Search
文档中心

创建抢占式实例

更新时间: 2021-09-29

抢占式实例是一种低成本竞价型实例,您可以对阿里云当前闲置的资源出价,获得资源后运行容器并持续到资源被回收(出价低于市场价格、库存不足等原因)。在部分场景下,使用抢占式ECI实例,可以极大降低成本。

背景信息

抢占式实例适用于无状态的应用场景,例如可弹性伸缩的Web站点服务、图像渲染、大数据分析和大规模并行计算等。应用程序的分布度、可扩展性和容错能力越高,越适合使用抢占式实例节省成本和提升吞吐量。更多信息,请参见抢占式实例概述

基本概念

创建抢占式实例前,您需要了解以下信息:

  • 计费方式

    抢占式实例的市场价格随供需变化而浮动,您需要在创建抢占式实例时指定出价模式,当指定实例规格的实时市场价格低于出价且库存充足时,就能成功创建抢占式实例。创建成功后,在保护期内按照成交时的市场价格计费。超过保护期后,按照实时的市场价格计费。

    说明

    抢占式实例相对于按量付费实例价格有一定的折扣,实际价格随供求波动,并按实际使用时长进行收费。更多信息,请参见抢占式实例计费

  • 保护期

    抢占式实例默认有1小时的保护期,通过K8s方式或者OpenAPI方式创建抢占式ECI实例时,可以设置保护期。保护期的取值范围为0~6小时,当保护期设置为0时(即无保护期),抢占式实例随时可能被自动释放。保护期设置越小,价格可能越低。

  • 回收机制

    超过保护期后,系统每隔5分钟将自动检测一次实例规格的市场价格和库存。如果某一时刻的市场价格高于出价或实例规格库存不足,抢占式实例会被释放。

    说明

    • 资源回收前3分钟,系统会产生准备释放的事件。

    • 资源回收后,实例不再收费,但会保留实例信息,且状态会变更为已过期(Expired)。

注意事项

基于抢占式实例的特点,使用抢占式实例时,您需要注意以下信息:

  • 选择一个合适的实例规格和一个合理的出价。

    您可以通过ECS的openAPI接口查询抢占式实例近30天的信息,以便选择实例规格和出价。相关接口如下:

    说明

    您的出价应该足够高,同时充分考虑了市场价格的波动,并且符合您对自身业务评估后的预期。这样才能成功创建抢占式实例,且实例不会因为价格因素被释放,在满足业务需求的同时实现成本节约。

  • 使用不受抢占式实例释放影响的存储介质来保存您的重要数据,例如:云盘(关闭随实例释放)、NAS等。

创建方式

支持指定ECS规格,或者指定vCPU和内存来创建抢占式ECI实例:

注意

指定vCPU和内存时,仅支持2 vCPU及以上规格。如果想要创建小于2 vCPU的抢占式ECI实例,请使用指定ECS规格的方式,此时推荐使用t5、t6规格族。

  • 指定ECS规格

    计费以指定规格的按量市场价格和实时折扣为准。

    如果要设置保护期,且保护期取值为2~6时,仅支持以下ECS规格:

    • ecs.c5.large

    • ecs.c6.large

    • ecs.g5.large、ecs.g5.xlarge、ecs.g5.2xlarge、ecs.g5.4xlarge、ecs.g5.8xlarge

    • ecs.g6.large、ecs.g6.xlarge、ecs.g6.2xlarge、ecs.g6.4xlarge、ecs.g6.8xlarge

    • ecs.gn6e-c12g1.3xlarge、ecs.gn6e-c12g1.12xlarge、ecs.gn6e-c12g1.24xlarge

    • ecs.gn5-c4g1.xlarge、ecs.gn5-c8g1.2xlarge、ecs.gn5-c8g1.4xlarge、ecs.gn5-c28g1.7xlarge

    • ecs.gn6v-c8g1.2xlarge、ecs.gn6v-c8g1.8xlarge、ecs.gn6v-c8g1.16xlarge、ecs.gn6v-c10g1.20xlarge

  • 指定vCPU和内存

    该方式与指定ECS规格方式的效果相同。系统会自动匹配满足规格和价格要求的ECS规格,并以此规格的市场价格作为计费的原始市场价格,即折扣是基于该ECS规格的市场价,而非对应ECI的vCPU和内存的按量价格。

Kubernetes方式

您可以在Pod metadata中添加Annotation来创建抢占式实例。相关配置项如下:

  • k8s.aliyun.com/eci-spot-strategy:设置抢占式实例的出价策略。可根据需要配置为:

    • SpotWithPriceLimit:自定义设置抢占实例价格上限。

    • SpotAsPriceGo:系统自动出价,跟随当前市场实际价格。

  • k8s.aliyun.com/eci-spot-price-limit:设置抢占式实例的每小时价格上限,最多支持精确到小数点后三位。当k8s.aliyun.com/eci-spot-strategy配置为SpotWithPriceLimit时必须设置。

  • k8s.aliyun.com/eci-spot-duration:设置抢占式实例的保护期。取值范围为0~6。

示例一:指定ECS规格,采用SpotWithPriceLimit策略,并设置保护期

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        k8s.aliyun.com/eci-use-specs : "ecs.c5.large"  #根据需要替换ECS实例规格
        k8s.aliyun.com/eci-spot-strategy: "SpotWithPriceLimit"  #采用自定义设置价格上限的策略
        k8s.aliyun.com/eci-spot-price-limit: "0.250"   #设置每小时价格上限
        k8s.aliyun.com/eci-spot-duration: "2"   #设置保护期
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80

示例二:指定vCPU和内存,采用SpotAsPriceGo策略

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        k8s.aliyun.com/eci-use-specs : "2-4Gi"  #根据需要替换vCPU和内存,仅支持2 vCPU及以上规格
        k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  #采用系统自动出价,跟随当前市场实际价格
的策略
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80

OpenAPI方式

调用CreateContainerGroup接口创建ECI实例时,您可以通过SpotStrategy参数来设置抢占式实例的出价模式,SpotPriceLimit参数来设置抢占式实例的每小时价格上限,以及SpotDuration参数来设置抢占式实例的保护期。相关参数说明如下表所示。更多信息,请参见CreateContainerGroup

名称

类型

示例值

描述

SpotStrategy

String

SpotPriceLimit

实例的抢占策略。取值范围:

  • NoSpot:正常按量付费实例。

  • SpotWithPriceLimit:设置上限价格的抢占式实例。

  • SpotAsPriceGo:系统自动出价,跟随当前市场实际价格的抢占式实例。

默认为:NoSpot。

SpotPriceLimit

Float

0.2

设置抢占式实例的每小时最高价格,最多精确到小数点后3位。当SpotStrategy取值为SpotWithPriceLimit时,必须设置SpotPriceLimit。

SpotDuration

Integer

1

抢占式实例的保护期。单位为小时。取值范围为0~6,默认为1。

注意

使用SpotAsPriceGo策略时,如果对应可用区规格资源紧张,最高价格可能会达到按量价格。

如果使用SDK来创建,Python SDK创建抢占式实例的代码示例如下:

#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkeci.request.v20180808.CreateContainerGroupRequest import CreateContainerGroupRequest
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou')
request = CreateContainerGroupRequest()
request.set_accept_format('json')
request.set_SecurityGroupId("sg-xxx")
request.set_VSwitchId("vsw-xxx")
request.set_ContainerGroupName("test-spot")
request.set_SpotStrategy('SpotAsPriceGo')
request.set_InstanceType('ecs.c5.large')
request.set_Containers([
  {
    "Image": "nginx",
    "Name": "nginx"
  }
])
response = client.do_action_with_exception(request)
print(response)

控制台方式

通过弹性容器实例售卖页创建抢占式ECI实例时,可以直接选择付费模式为抢占式实例

抢占式

相关注意事项如下:

  • 仅支持指定vCPU和内存的方式创建实例,且仅支持2 vCPU及以上规格。

    系统会自动匹配满足规格和价格要求的ECS规格,并以此规格的市场价格作为计费的原始市场价格,即折扣是基于该ECS规格的市场价,而非对应ECI的vCPU和内存的按量价格。

  • 不支持设置出价策略,默认采用SpotAsPriceGo,即系统自动出价,跟随当前市场实际价格。

  • 不支持设置保护期,默认保护期为1小时。