使用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定義彈性資源優先級的更多信息,請參見自定義彈性資源優先級調度。