使用Knative时,如果您希望在业务流量稳定时段使用已有的ECS节点,而在突发流量时段将应用调度至自动扩容的ECI Pod,您可以基于ResourcePolicy来声明资源的扩容顺序。此外,ResourcePolicy还支持逆序缩容,优先缩容ECI Pod。
前提条件
已在集群中部署Knative。具体操作,请参见在ACK集群中部署Knative、在ACK Serverless集群中部署Knative。
kube-scheduler组件版本满足以下要求:
集群版本
组件版本
1.20
1.20.4-ack-7.0及以上
1.22
1.22.15-ack-2.0及以上
1.24
v1.24.3-ack-2.0及以上
1.26
v1.26.3-ack-4.0及以上
1.26以上
均可支持
已部署使用ECI资源所需的ack-virtual-node组件,请参见部署ack-virtual-node组件。
使用限制
本功能与pod-deletion-cost冲突,不能同时使用。关于pod-deletion-cost的更多信息,请参见pod-deletion-cost。
本功能暂不支持与使用ECI弹性调度混合使用。关于ECI弹性调度的更多信息,请参见使用ECI弹性调度。
本功能目前使用的是BestEffort策略,无法保证一定按照逆序缩容。
max字段仅在集群版本为1.22及以上,且调度器版本为5.0及以上的版本中开启。
与弹性节点池同时使用时,可能导致弹性节点池无效弹出节点。使用时请将弹性节点池包含在某个Unit中,且弹性节点池的Unit不要设置max字段。
若您的调度器为5.0版本以下或集群版本为1.20及以下,请注意在ResourcePolicy创建前存在的Pod会在缩容时最先缩容。
若您的调度器为6.1版本以下或集群版本为1.20及以下,在与ResourcePolicy关联的Pod未完全删除时,请不要对ResourcePolicy进行修改。
操作步骤
您可以创建ResourcePolicy,定义弹性资源的优先级,优先使用ECS节点进行扩容,并在ECS资源不足或超额时将应用调度至ECI Pod。缩容时,系统也会根据调度节点的顺序逆序缩容,优先缩容在ECI上的Pod。
创建Knative Service。
示例YAML如下。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
创建ResourcePolicy,定义弹性资源优先级及资源的
max
Pod数量、nodeSelector
等。示例YAML如下。该示例中,系统会根据YAML中声明的资源先后顺序指定Knative Pod优先使用ECS节点进行扩容。当超过了
max
Pod数量或者ECS资源不足时,会将Pod调度至自动扩容的ECI Pod上。apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: xxx namespace: xxx spec: selector: serving.knative.dev/service: helloworld-go # 此处指定Knative Service名称 strategy: prefer units: - resource: ecs max: 10 nodeSelector: key2: value2 - resource: ecs nodeSelector: key3: value3 - resource: eci
相关文档
关于基于ResourcePolicy定义弹性资源优先级的更多信息,请参见自定义弹性资源优先级调度。