在Knative中同时使用ECS和ECI资源

使用Knative时,如果您希望在业务流量稳定时段使用已有的ECS节点,而在突发流量时段将应用调度至自动扩容的ECI Pod,您可以基于ResourcePolicy来声明资源的扩容顺序。此外,ResourcePolicy还支持逆序缩容,优先缩容ECI Pod。

前提条件

使用限制

  • 本功能与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。

  1. 创建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"
  2. 创建ResourcePolicy,定义弹性资源优先级及资源的maxPod数量、nodeSelector等。

    示例YAML如下。该示例中,系统会根据YAML中声明的资源先后顺序指定Knative Pod优先使用ECS节点进行扩容。当超过了maxPod数量或者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定义弹性资源优先级的更多信息,请参见自定义弹性资源优先级调度