保留实例是ASK Knative独有的功能。如果想通过Knative降低成本而不引入冷启动,可以通过低成本的保留实例来平衡成本和冷启动时长。

保留实例优势

社区的Knative默认在没有流量的时候可以把应用实例数缩容到零个,这样做的目的是降低常驻实例的运行成本。缩容到零的方式虽然降低了常驻成本,但从零到一会有一个明显的冷启动过程,这个冷启动过程会有明显的延时。分配一个新的实例首先需要分配IaaS资源,这就涉及到Kubernetes的调度。除了调度还有拉取应用镜像、启动应用等环节。而应用镜像大小以及应用启动时长与具体的开发者或者业务有很强的关联,这在通用的平台层面几乎无法控制。

如果想通过Knative降低成本而不引入冷启动,可以通过低成本的保留实例来平衡成本和冷启动时长。ASK的Knative和社区Knative不同点在于默认在没有流量的时候不把应用实例数缩容到零个,而是保留一个实例。保留的实例可以和默认规格设置不一样的配置。例如,使用比默认规格价格更低的规格,从而平衡成本和效率。背景

保留实例策略

ASK Knative的策略是在业务波谷时使用保留实例替换默认的计算型实例,当第一个请求来临时临时使用保留实例提供服务,同时也会触发默认规格实例的扩容。当默认规格实例扩容完成以后所有新请求就会都转发到默认规格上,同时保留实例则不会接受新的请求,并且等保留实例所有接收到的请求处理完成以后就会被下线。通过这种无缝替换的方式实现了成本和效率的平衡,即降低了常驻实例的成本又不会有显著的冷启动时长。

保留实例规格

阿里云的ECI有一种规格族叫做突发性能实例。突发性能实例是一种通过CPU积分来保证计算性能的实例规格,适用于平时CPU使用率低,但偶尔有突发高CPU使用率的场景。突发性能实例在创建后可以持续获得CPU积分,在性能无法满足负载要求时,通过消耗更多CPU积分来无缝提高计算性能,不会影响部署在实例上的环境和应用。较之其他实例规格,突发性能实例的CPU使用更加灵活且成本较低。通过CPU积分,您可以从整体业务角度分配计算资源,将业务平峰期的计算能力转移到高峰期使用,以节约使用成本。

突发性能的低成本、CPU积分等特性适合作为保留实例。ecs.t6-c1m1.large,ecs.t5-lc1m2.small,ecs.s6-c1m2.small,ecs.t6-c1m2.large,ecs.n1.small为ASK Knative默认的保留实例的规格配置,是满足1核2G要求的价格最低的前5个规格。您可以到云产品价格页面获取所有ECI的规格和价格信息。
说明 ECI最多只能同时配置5个规格。
您可以通过knative.aliyun.com/reserve-instance-eci-use-specsAnnotation手动配置保留实例的规格。有两种配置规格的方法:
  • 指定ECI规格列表,以下以指定ecs.t6-c1m1.large,ecs.t5-lc1m2.small规格为例。
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello-spec-1
    spec:
      template:
        metadata:
          annotations:
            knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
  • 指定CPU和内存的规格,Knative会自动根据ECS的价格从小到大搜索满足条件的规格,然后使用价格最低的5个规格创建实例。以下以指定1核2G为例,1-2Gi表示指定1核2G。
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello-spec-2
    spec:
      template:
        metadata:
          annotations:
            knative.aliyun.com/reserve-instance-eci-use-specs: "1-2Gi"
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8

这两种方式Knative都是使用一个ECI规格列表去申请ECI实例的,多个规格之间是有顺序的,当前面的规格库存不足时,后面的规格将自动申请实例。