抢占式实例是一种低成本竞价型实例,您可以对阿里云当前闲置的资源出价,获得资源后运行容器,直到因为其他客户的更高出价而被回收容器资源,从而降低部分场景下使用ECI实例的成本。本文介绍如何使用抢占式。

背景信息

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

抢占式实例创建成功后拥有一小时的保护周期,即在创建成功后第一个小时内,即使市场价格浮动超过了出价,抢占式实例也不会被释放,您可以在该抢占式实例上正常运行业务。超过保护周期后,每5分钟检测一次实例规格的当前市场价格和库存,如果某一时刻的市场价格高于出价或实例规格库存不足,抢占式实例会被释放。

  • 抢占式ECI实例运行1小时后将会因为价格的波动、库存等原因被系统回收。
  • 系统回收会提前3分钟产生准备释放的事件。
  • 释放的ECI的资源会被回收,但是实例信息会依然保留,回收后实例不再收费并且状态变为Expired(已过期)。
说明 抢占式实例不支持备案服务。

在使用抢占式实例时,您需要遵循以下建议:

  • 选择一个合理的出价,您的出价应该足够高,而且要充分考虑到市场价格的波动。之后您的抢占请求才会被接受处理,而且创建后才不会因为价格因素被释放。另外,出价还必须符合您根据自身业务评估后的预期。
  • 建议您使用不受抢占式实例释放影响的存储介质来保存您的重要数据。例如,您可以使用独立创建的云盘(不能设置为随实例一起释放)存储数据,或者NAS等外部存储。

抢占式ECI实例依然支持两种创建方式:

  • ECS InstanceType形式。

    计费会以该规格的按量市场价以及实时折扣为准。

  • CPU/内存形式。

    ECI会自动匹配满足价格要求的ECS InstanceType,并以此规格作为计费的原始市场价,即实例的计费折扣都是基于该规格的市场价,而非对应的ECI的CPU/Memory的按量价格。该方式等效于传入InstanceType方式创建。

应用场景

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

您可以在抢占式实例上部署以下业务:

  • 实时分析业务
  • 大数据计算业务
  • 可弹性伸缩的业务站点
  • 图像和媒体编码业务
  • 科学计算业务
  • 地理空间勘测分析业务
  • 网络爬虫业务
  • 测试业务

使用方法

您可以通过在Pod层面设置annotations: k8s.aliyun.com/eci-spot-strategyannotations: k8s.aliyun.com/eci-spot-price-limit

  • SpotAsPriceGo:系统自动出价,跟随当前市场实际价格。
  • SpotWithPriceLimit:设置抢占实例价格上限。

具体配置方式:

  • 设置k8s.aliyun.com/eci-spot-strategy"SpotAsPriceGo"
  • 只有k8s.aliyun.com/eci-spot-strategy设置为"SpotWithPriceLimit"时,k8s.aliyun.com/eci-spot-price-limit才会有效。
    设置实例每小时最高价格,支持最多3位小数。
    • k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"
    • k8s.aliyun.com/eci-spot-price-limit: "0.250"

Deployment示例

  • SpotAsPriceGo策略
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
          annotations:
            k8s.aliyun.com/eci-use-specs : "2-4Gi"  #根据需要替换您接受的ECS规格k8s.aliyun.com/eci-spot-strategy: "SpotAsPriceGo"  #随市场出价策略spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
  • SpotWithPriceLimit策略
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx
      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" #小时最高单价spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80