LocalQueue는 단일 네임스페이스에 속한 밀접하게 관련된 Workload들을 그룹화하는 네임스페이스 범위 객체다. 네임스페이스는 일반적으로 조직의 테넌트(팀 또는 사용자)에게 할당된다.
LocalQueue는 Workload를 실행하기 위해 리소스가 할당되는 하나의 ClusterQueue를 가리킨다. 서로 다른 네임스페이스의 LocalQueue들이 동일한 ClusterQueue를 가리킬 수 있어 리소스 할당량을 공유할 수 있다.
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
namespace: team-a # 특정 네임스페이스에 속함
name: team-a-queue
spec:
clusterQueue: cluster-queue # ClusterQueue 참조
서로 다른 네임스페이스의 LocalQueue가 동일한 ClusterQueue를 가리켜 리소스 할당량을 공유할 수 있다.
# 팀 A용 LocalQueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
namespace: team-a
name: lq-team-a
spec:
clusterQueue: shared-cluster-queue # 공통 ClusterQueue 참조
---
# 팀 B용 LocalQueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
namespace: team-b
name: lq-team-b
spec:
clusterQueue: shared-cluster-queue # 동일한 ClusterQueue 참조
사용자는 자신의 네임스페이스에서 LocalQueue를 나열하여 작업을 제출할 수 있는 큐를 찾을 수 있다.
# LocalQueue 목록 확인
kubectl get -n my-namespace localqueues
# 또는 alias 사용
kubectl get -n my-namespace queues
kubectl get -n my-namespace queue
작업을 제출하려면 Job을 생성하고 kueue.x-k8s.io/queue-name 어노테이션을 설정한다.
apiVersion: batch/v1
kind: Job
metadata:
generateName: ml-training-
namespace: team-a
labels:
kueue.x-k8s.io/queue-name: team-a-queue # LocalQueue 이름 지정
spec:
parallelism: 3
completions: 3
suspend: true # Kueue가 관리하도록 suspended 상태로 시작
template:
spec:
containers:
- name: trainer
image: tensorflow/tensorflow:latest-gpu
args: ["python", "train.py"]
resources:
requests:
cpu: "4"
memory: "8Gi"
nvidia.com/gpu: "1"
restartPolicy: Never
Workload에서 LocalQueue에 대기시키려면 .spec.queueName 필드에 LocalQueue의 이름을 설정한다.