ack-kube-queue是面向ACK集群的任务队列系统,旨在优化AI/ML和批处理工作负载的管理和资源利用。它通过提供灵活的作业队列管理、自动优化工作负载分配和资源配额管理,帮助系统管理员提升集群资源利用率和任务执行效率。本文将介绍如何安装和配置ack-kube-queue任务队列并提交任务。
使用限制
仅支持1.18及以上的ACK托管集群、ACK Edge集群和ACK灵骏集群。
安装ack-kube-queue组件
ACK托管集群及ACK Edge集群
未部署云原生AI套件
已部署云原生AI套件
ACK灵骏集群
登录容器服务管理控制台,在左侧导航栏选择 。
在应用市场页面,搜索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 ...
开启任务类型支持
登录容器服务管理控制台,在左侧导航栏单击集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。找到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
...