在混合雲情境下,通過多級彈性調度,可以使您線上線下混合部署的業務能更好的發揮混合雲的優勢,實現業務高可用,並能根據波峰波穀進行彈性資源申請等。本文介紹如何通過ack-co-scheduler進行多級彈性調度。
前提條件
已建立註冊叢集,並將自建Kubernetes叢集接入註冊叢集。具體操作,請參見建立ACK One註冊叢集。
系統組件版本要求具體如下表所示。
組件
版本要求
Kubernetes
1.18.8及以上版本
Helm
3.0及以上版本
Docker
19.03.5
作業系統
CentOS 7.6、CentOS 7.7、Ubuntu 16.04和Ubuntu 18.04、Alibaba Cloud Linux
背景資訊
混合雲情境下的多級彈性調度是自訂彈性資源優先順序調度的擴充,新增了IDC彈性資源類型。自訂彈性資源優先順序調度是阿里雲提供的彈性調度策略。您可以在應用發布或擴容過程中,自訂資源策略(ResourcePolicy),設定應用執行個體Pod被調度到不同類型節點資源的順序。同時在縮容過程中按照原調度順序逆序縮容。更多資訊,請參見自訂彈性資源優先順序調度。
使用限制
本功能與pod-deletion-cost衝突,不能同時使用。關於pod-deletion-cost的更多資訊,請參見pod-deletion-cost。
本功能暫不支援與使用ECI彈性調度混合使用。關於ECI彈性調度的更多資訊,請參見通過ElasticResource實現ECI彈性調度(停止維護)。
修改ResourcePolicy的策略時,已調度的Pod將按照原ResourcePolicy的順序進行縮容,建立的Pod將按照更新後ResourcePolicy的順序進行縮容。
與彈性節點池同時使用時,可能導致彈性節點池無效彈出節點。使用時請將彈性節點池包含在某個Unit中,且彈性節點池的Unit不要設定max欄位。
與ResourcePolicy關聯的Pod未完全刪除時,請不要對ResourcePolicy進行修改。
使用方式
使用以下內容,建立ResourcePolicy定義彈性資源優先順序。
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
name: xxx
namespace: xxx
spec:
selector:
key1: value1
strategy: prefer
units:
- resource: idc
max: 3
- resource: ecs
nodeSelector:
key2: value2
- resource: ecs
nodeSelector:
key3: value3
- resource: eciselector:聲明ResourcePolicy作用於同一命名空間下label上打了key1=value1的Pod。strategy:調度策略選擇,目前只支援prefer。units:使用者自訂的調度單元。擴容時,將按照units下資源的順序進行擴容;縮容時,將按照逆序進行縮容。resource:彈性資源的類型,目前支援eci、ecs和idc三種類型。nodeSelector:用node的label標識該調度單元下的節點,只對ecs資源生效。max:在該組資源最多部署多少個執行個體。
安裝相關組件
使用多級彈性調度,您需要安裝以下組件。
ack-virtual-node:可選組件,如需使用彈性ECI能力,才需在註冊叢集中安裝ack-virtual-node組件。
ack-co-scheduler:通過該組件,您可以自訂ResourcePolicy CR對象,使用多級彈性調度功能。
通過onectl安裝
在本地安裝配置onectl。具體操作,請參見通過onectl管理註冊叢集。
執行以下命令,安裝ack-virtual-node和ack-co-scheduler組件。
onectl addon install ack-virtual-node onectl addon install ack-co-scheduler預期輸出:
Addon ack-virtual-node, version **** installed. Addon ack-co-scheduler, version **** installed.
通過控制台安裝
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面的搜尋方塊中分別搜尋ack-virtual-node和ack-co-scheduler組件,並在對應組件卡片的右下方單擊安裝。
在提示對話方塊中單擊確定。
情境一:多級優先順序調度
使用以下YAML內容,建立ResourcePolicy自訂節點池調度順序。
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: cost-balance-policy spec: selector: app: nginx strategy: prefer units: - resource: idc - resource: ecs nodeSelector: alibabacloud.com/nodepool-id=np7b30bxxxxxxa3940936c19ea42b # 請替換為實際的Node id - resource: eci使用以下YAML內容,建立Deployment,部署2個Pod。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx annotations: addannotion: "true" labels: app: nginx # 此處要與上一步建立的ResourcePolicy的selector相關聯。 spec: schedulerName: ack-co-scheduler containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: requests: cpu: 200m limits: cpu: 1執行以下命令,建立應用Nginx。
kubectl apply -f nginx.yaml執行以下命令,對Pod進行擴容。
kubectl scale deployment nginx --replicas 10預期輸出:
deployment.apps/nginx scaled執行以下命令,查看Pod狀態。
kubectl get pod -o wide預期輸出:
控制應用Nginx的副本數目後查看調度結果,可以看到其部署策略符合預期:資源調度順序為優先IDC資源,其次為ECS資源,最後是ECI資源。
情境二:線上線下混合部署
使用以下YAML內容,建立ResourcePolicy自訂節點池調度順序。
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: load-balance-policy spec: selector: app: nginx strategy: prefer units: - resource: idc max: 2 - resource: ecs nodeSelector: alibabacloud.com/nodepool-id=np7b30b52e99194275a3940936c19ea42b max: 4 - resource: eci使用以下YAML內容,建立Deployment,部署2個Pod。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx annotations: addannotion: "true" labels: app: nginx # 此處要與上一步建立的ResourcePolicy的selector相關聯。 spec: schedulerName: ack-co-scheduler containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: requests: cpu: 200m limits: cpu: 1執行以下命令,建立應用Nginx。
kubectl apply -f nginx.yaml執行以下命令,擴容Pod。
kubectl scale deployment nginx --replicas 10預期輸出:
deployment.apps/nginx scaled執行以下命令,查看Pod狀態。
kubectl get pod -o wide預期輸出:
控制應用Nginx的副本數目查看調度結果,可以看到其部署策略符合預期:在資源足夠情況下,IDC有2個Pod,ECS有4個Pod,其他副本在ECI上。