ack-kube-queue是面向ACK叢集的任務隊列系統,旨在最佳化AI/ML和批處理工作負載的管理和資源利用。它通過提供靈活的作業隊列管理、自動最佳化工作負載分配和資源配額管理,協助系統管理員提升叢集資源使用率和任務執行效率。本文將介紹如何安裝和配置ack-kube-queue任務隊列並提交任務。
使用限制
僅支援1.18及以上的ACK託管叢集、ACK Edge叢集和ACK靈駿叢集。
安裝ack-kube-queue組件
ACK託管叢集及ACK Edge叢集
未部署雲原生AI套件
登入Container Service管理主控台,在左側導覽列單擊叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在雲原生AI套件頁面下方,單擊一鍵部署。
在調度地區,選中Kube Queue,在互動方式地區,選中Arena,然後在頁面下方單擊部署雲原生AI套件。
已部署雲原生AI套件
登入Container Service管理主控台,在左側導覽列單擊叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。安裝ack-arena和ack-kube-queue。
在雲原生AI套件頁面的操作列,單擊組件ack-arena對應的部署。在參數配置頁面,單擊確定。
在雲原生AI套件頁面的操作列,單擊組件ack-kube-queue對應的部署。在彈出頁面,單擊確定。
ack-arena和ack-kube-queue安裝完成後,組件列表地區的組件狀態為已部署。
ACK靈駿叢集
登入Container Service管理主控台,在左側導覽列選擇 。
在應用市場頁面,搜尋ack-kube-queue,然後單擊該應用。
在應用詳情頁面,單擊右上方的一鍵部署,進入基本資料頁面,填寫目的地組群、命名空間和發布名稱後,單擊下一步。
在參數配置頁面, 選擇最新的chart 版本後,單擊確定。
配置ack-kube-queue組件
ack-kube-queue支援多種任務類型的排隊功能,包括TfJob、PytorchJob、MpiJob、Argo Workflow、RayJob、SparkApplication以及原生Job。預設情況下,ack-kube-queue組件僅啟用原生BatchJob的排隊功能,您可以根據需要開啟或關閉任意類型任務的排隊功能。
使用限制
TfJob、PytorchJob、MpiJob需要使用ack-arena組件中提供的Operator。
使用原生Job類型排隊功能時,叢集版本需為1.22及以上。
MpiJob當前僅支援通過Arena提交MpiJob。
Argo Workflow當前僅支援對整個工作流程進行排隊,可以通過在Annotation中聲明如下內容,指定Workflow需要的資源。
... annotations: kube-queue/min-resources: | cpu: 5 memory: 5G ...
開啟任務類型支援
登入Container Service管理主控台,在左側導覽列單擊叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。找到ack-kube-queue應用,單擊其右側操作列下的更新。
若需開啟相關工作負載的支援,請參照表格修改YAML內容。
配置項
說明
extension.argo.enable
設定為true
開啟Argo Workflow支援。
extension.mpi.enable
設定為true
開啟MpiJob支援。
extension.ray.enable
設定為true
開啟RayJob支援。
extension.spark.enable
設定為true
開啟SparkApplication支援。
extension.tf.enable
設定為true
開啟TfJob支援。
extension.pytorch.enable
設定為true
開啟PytorchJob支援。
提交任務
提交TfJob、PytorchJob、MpiJob
您需要在Job的Annotation中添加scheduling.x-k8s.io/suspend="true"
的標識。以下以TfJob為例進行說明。
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "job1"
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
提交原生Job
您需要將Job的suspend
欄位設定成true
。以下樣本將產生一個需求100m
CPU的排隊單元,當該排隊單元出隊後,Job的suspend
欄位會被改為false
,此時叢集組件將開始執行該Job。
apiVersion: batch/v1
kind: Job
metadata:
generateName: pi-
spec:
suspend: true
...
提交Argo Workflow
請提前在應用市場中安裝Argo Workflows組件。
請在Argo Workflow中添加一個名為kube-queue-suspend
的自訂模板,其類型為suspend
。同時,在提交Workflow時,將其suspend
狀態設定為true
。樣本如下。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: $example-name
spec:
suspend: true # 需要將該項設定為true。
entrypoint: $example-entrypoint
templates:
# 需要添加名為kube-queue-suspend的suspend模板。
- name: kube-queue-suspend
suspend: {}
- name: $example-entrypoint
...
提交SparkApplication
請提前在應用市場中安裝ack-spark-operator組件。
在提交SparkApplication時,請在SparkApplication
的註解中添加 scheduling.x-k8s.io/suspend="true"
標籤。
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
generateName: spark-pi-suspend-
namespace: spark-operator
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
提交RayJob
請提前在叢集組件管理中安裝託管Kuberay-Operator組件。具體操作,請參見管理組件。
在提交 RayJob 時,請將spec.suspend
欄位設定成true
。
apiVersion: ray.io/v1
kind: RayJob
metadata:
name: rayjob-sample
spec:
# Suspend specifies whether the RayJob controller should create a RayCluster instance.
# If a job is applied with the suspend field set to true, the RayCluster will not be created and we will wait for the transition to false.
# If the RayCluster is already created, it will be deleted. In the case of transition to false, a new RayCluste rwill be created.
suspend: true
...