通过ElasticResource实现ECI弹性调度(停止维护)

ECI弹性调度是阿里云提供的弹性调度策略。您可以在部署服务时通过添加Annotations来声明只使用ECS或ECI弹性资源,或者是在ECS资源不足时自动申请ECI资源。通过ECI弹性调度可以满足您在不同工作负载的场景下对弹性资源的不同需求。本文介绍如何使用ECI弹性调度。

重要
  • ECI弹性调度功能目前依然支持,计划在后续版本废弃。后续ACK将通过原生语义方式提供ECI弹性伸缩支持。详细信息,请参见指定ECS和ECI的资源分配

  • ECI弹性调度功能已升级到自定义弹性资源优先级功能。原有场景均可支持,且自定义资源优先级策略更加丰富、灵活。

  • 推荐使用自定义弹性资源优先级功能。相比ECI弹性伸缩,该功能将额外提供业务的逆序缩容以及业务Pod无侵入的能力。详细信息,请参见自定义弹性资源优先级调度

前提条件

  • 已创建1.18及以上版本的ACK集群Pro版,请参见创建ACK托管集群

  • 对于不同ACK版本的集群,调度器版本需要满足以下要求。关于调度器各版本支持的功能,请参见kube-scheduler

    ACK版本

    调度器版本

    1.18

    v1.18-ack-3.0及以上

    1.20

    v1.20.4-ack-4.0及以上

    1.22

    v1.22.3-ack-1.0及以上

    1.24

    v1.24.3-ack-2.0及以上

  • 已在集群中部署ack-virtual-node。具体操作,请参见ACK使用ECI

  • Annotation alibabacloud.com/burst-resource: ecialibabacloud.com/fluid-sidecar-target: eci 不能同时使用。alibabacloud.com/fluid-sidecar-target: eci的使用文档,请参见Serverless数据访问概述

操作步骤

说明

在Deployment对象的template.metadata下配置Pod的Annotations,声明弹性资源的类型。alibabacloud.com/burst-resource的取值有以下选择:

  • 默认不填Annotations时:只使用集群现有的ECS资源。

  • eci:当前集群ECS资源不足时,使用ECI弹性资源。

  • eci_only: 只使用ECI弹性资源,不使用集群的ECS资源。

当取值不为ecieci_only,或取值为eci_only但集群中不存在Virtual node时,Pod将会调度失败。在1.22.15及1.24.6版本集群中,Pod调度失败原因与PodStatus中的信息对应关系为:

  • 取值不为ecieci_onlyrequesttypemustbeeci,eci_onlyorecs

  • 取值为eci_only且集群中不存在Virtualnode:doesn'tfitecitype:eci_only

  1. 创建并拷贝以下内容到nginx-deployment.yaml文件中。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            alibabacloud.com/burst-resource: eci # 添加注解,选择弹性调度的资源类型。
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. 执行以下命令,创建使用ECI弹性调度的Pod。

    kubectl apply -f nginx-deployment.yaml