ECI弹性调度是阿里云提供的弹性调度策略。您可以在部署服务时通过添加Annotations来声明只使用ECS或ECI弹性资源,或者是在ECS资源不足时自动申请ECI资源。通过ECI弹性调度可以满足您在不同工作负载的场景下对弹性资源的不同需求。本文介绍如何使用ECI弹性调度。
对于1.18~1.24版本集群,目前仍可以使用ECI弹性调度功能,但自2023年05月起,对于1.24及以上版本,ACK已停止维护该功能。强烈建议您采用以下方案进行替换。
指定ECS和ECI的资源分配:通过Kubernetes原生调度语义(Taint、Toleration和NodeAffinity)实现只调度到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-resource
的Annotations,可以声明弹性资源的类型。alibabacloud.com/burst-resource
的取值说明如下:
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec.template.metadata
下。
默认不配置Annotations时:只使用集群现有的ECS资源。
eci_only
: 只使用ECI弹性资源,不使用ECS资源。eci
:当前集群ECS资源不足时,使用ECI弹性资源。|重要alibabacloud.com/burst-resource: eci
与alibabacloud.com/fluid-sidecar-target: eci
不能同时使用。关于alibabacloud.com/fluid-sidecar-target: eci
的使用文档,请参见Serverless数据访问加速。
当取值不为eci
、eci_only
,或取值为eci_only
但集群中不存在虚拟节点时,Pod会调度失败。在1.22.15及1.24.6版本集群中,Pod调度失败原因与PodStatus中的信息对应关系为:
取值不为
eci
、eci_only
:requesttypemustbeeci,eci_onlyorecs
。取值为
eci_only
且集群中不存在虚拟节点时:doesn'tfitecitype:eci_only
。
配置示例
创建并拷贝以下内容到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
创建使用ECI弹性调度的Pod。
kubectl apply -f nginx-deployment.yaml