ACS叢集中內建了預設調度器,Pod提交到叢集後預設會使用名稱為default-scheduler的調度器分配資源。為了滿足特殊類型資源的調度和複雜的調度策略,ACS叢集支援Pod使用自訂調度器。本文介紹在ACS叢集中使用自訂調度器的方式和約束條件。
前提條件
Pod計算類型為高效能網路GPU型(gpu-hpn)。
已安裝acs-virtual-node組件,版本為v2.12.0-acs.8及以上。
已安裝調度器組件kube-scheduler,且版本滿足以下要求。
ACS叢集版本
支援配置自訂調度器的kube-scheduler版本
1.32及以上
所有版本均可支援。
1.31
v1.31.0-aliyun-1.1.2及以上。
1.30
v1.30.3-aliyun-1.1.2及以上。
1.28
v1.28.9-aliyun-1.1.2及以上。
說明GPU-HPN型Pod使用自訂調度器時,需要在Pod上配置
spec.schedulerName。詳細操作,請參見Specify schedulers for pods。
注意事項
不同計算類型的Pod在ACS叢集使用的節點類型不同,對於使用普通虛擬節點的Pod類型,ACS不支援其配置自訂調度器,具體如下。
計算類型 | 對應節點類型 | 使用自訂調度器 |
通用型 | 普通虛擬節點 | 不支援 |
效能型 | ||
GPU型 | ||
GPU-HPN型 | GPU-HPN預留節點 | 支援 |
操作步驟
步驟一:在ACS叢集中部署自訂調度器
參考Kubernetes文檔,在叢集中部署自訂調度器。
步驟二:修改ACS調度器配置
登入容器計算服務控制台,在左側導覽列選擇集群列表。
在集群列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇运维管理 > 组件管理。
在組件管理頁面,定位Kube Scheduler,然後在Kube Scheduler卡片中單擊配置。
在對話方塊中勾選開啟GPU-HPN節點自訂標籤、調度器配置,然後單擊确认。
該配置項開啟或關閉時,對Pod和Node的使用效果如下。
說明僅適用於GPU-HPN型Pod和Node,其他計算類型的Pod不支援使用自訂調度器。
使用預設調度器(配置關閉)
使用自訂調度器(配置開啟)
Pod調度器名稱
不支援自訂,Pod提交後
spec.schedulerName欄位會被覆蓋為default-scheduler。支援自訂,Pod的
spec.schedulerName可以配置為任意欄位,提交後不會被修改。Pod調度過程
所有Pod都由ACS預設調度器負責分配資源。
ACS預設調度器僅調度
spec.schedulerName為default-scheduler的Pod,其他Pod由自訂調度器負責分配資源。GPU-HPN類型Node標記約束
節點Label、Annotation、Taint的增加、修改和刪除操作會受到ACS的配置約束。詳細內容,請參見節點標籤和汙點管理。
節點Label、Annotation、Taint的增加、修改和刪除操作不再受到ACS的配置約束。
Pod親和性調度約束
親和性欄位配置會受到ACS的配置約束。詳細內容,請參見節點親和性調度。
親和性欄位配置不再受到ACS的配置約束。
步驟三:為Pod配置自訂調度器
使用以下內容建立名稱為
dep-with-koordinator.yaml的檔案。檔案中描述了一個Deployment應用,Pod模板中指定了名稱為
koord-scheduler的自訂調度器。apiVersion: apps/v1 kind: Deployment metadata: name: dep-with-koordinator labels: app: dep-with-koordinator spec: replicas: 1 selector: matchLabels: app: dep-with-koordinator template: metadata: labels: app: dep-with-koordinator # 指定compute class為gpu-hpn,其他計算類型不支援自訂調度器 alibabacloud.com/compute-class: gpu-hpn spec: containers: - name: demo image: registry.cn-hangzhou-finance.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" restartPolicy: Always # 指定調度器名稱為koord-scheduler,具體名稱應與步驟一部署配置一致 schedulerName: koord-scheduler將Pod提交到ACS叢集。
kubectl apply -f dep-with-koordinator.yaml查看Pod配置的
schedulerName。kubectl get pod -lapp=dep-with-koordinator -o custom-columns=NAME:.metadata.name,schedulerName:.spec.schedulerName預期輸出:
# pod指定了名稱為koord-scheduler的自訂調度器 NAME schedulerName dep-with-koordinator-xxxxx-xxxxx koord-scheduler
常見問題
當Pod使用PVC資源時,在自訂調度器調度過程中出現了Insufficient attachable-volumes-xxx資源不足的提示
該問題在Kubernetes社區預設調度器中不會出現。原因在於某些自訂調度器在處理PVC資源時,會強制要求節點的CSI Node對象必須存在,或已上報對應CSI驅動的容量資訊。若節點未滿足上述條件,調度器會強制判定為資源不足。
解決方案可以通過配置調度器忽略特定CSI驅動。以Volcano調度器為例,可在啟動參數中添加--ignored-provisioners=${csi-driver-name},例如:
# 支援配置多個,使用逗號分隔
--ignored-provisioners=povplugin.csi.alibabacloud.com請根據實際使用的CSI驅動名稱調整配置參數。