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