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

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

重要

对于1.18~1.24版本集群,目前仍可以使用ECI弹性调度功能,但自202305月起,对于1.24及以上版本,ACK已停止维护该功能。强烈建议您采用以下方案进行替换。

  • 指定ECSECI的资源分配:通过Kubernetes原生调度语义(Taint、TolerationNodeAffinity)实现只调度到ECI、只调度到ECS或优先调度到ECS等。

  • 自定义弹性资源优先级调度:相比Kubernetes原生调度语义,通过ResourcePolicy可以实现更加丰富、灵活的调度策略(例如优先调度到包年包月ECS,其次按量付费ECS,最后ECI),并且额外提供了业务的逆序缩容以及业务Pod无侵入的能力。

更多关于虚拟节点调度方案的介绍、对比和选型建议,请参见调度Pod至虚拟节点

前提条件

  • 集群类型为ACK托管集群Pro

  • 集群及调度器版本需满足以下要求。关于调度器各版本支持的功能,请参见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组件。具体操作,请参见通过虚拟节点将Pod调度到ECI上运行

配置说明

Pod添加alibabacloud.com/burst-resourceAnnotations,可以声明弹性资源的类型。alibabacloud.com/burst-resource的取值说明如下:

说明

Annotation请添加在Podmetadata下,例如:创建Deployment时,Annotation需添加在spec.template.metadata下。

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

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

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

    重要

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

当取值不为ecieci_only,或取值为eci_only但集群中不存在虚拟节点时,Pod会调度失败。在1.22.151.24.6版本集群中,Pod调度失败原因与PodStatus中的信息对应关系为:

  • 取值不为ecieci_onlyrequesttypemustbeeci,eci_onlyorecs

  • 取值为eci_only且集群中不存在虚拟节点时: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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. 创建使用ECI弹性调度的Pod。

    kubectl apply -f nginx-deployment.yaml