기본 개념

LocalQueue는 단일 네임스페이스에 속한 밀접하게 관련된 Workload들을 그룹화하는 네임스페이스 범위 객체다. 네임스페이스는 일반적으로 조직의 테넌트(팀 또는 사용자)에게 할당된다.

LocalQueue는 Workload를 실행하기 위해 리소스가 할당되는 하나의 ClusterQueue를 가리킨다. 서로 다른 네임스페이스의 LocalQueue들이 동일한 ClusterQueue를 가리킬 수 있어 리소스 할당량을 공유할 수 있다.

기본 구조와 설정

간단한 LocalQueue 예시

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를 나열하여 작업을 제출할 수 있는 큐를 찾을 수 있다.

# LocalQueue 목록 확인
kubectl get -n my-namespace localqueues

# 또는 alias 사용
kubectl get -n my-namespace queues
kubectl get -n my-namespace queue

Job 제출 방법

작업을 제출하려면 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와의 관계

Workload 생성 과정

Workload에서 LocalQueue에 대기시키려면 .spec.queueName 필드에 LocalQueue의 이름을 설정한다.