ClusterQueue는 클러스터 범위의 리소스로, 리소스 풀을 관리하고 사용 제한 및 Fair Sharing 규칙을 정의합니다. k8sGoogle Cloud Kueue의 핵심 구성 요소로서 실제 리소스 스케줄링과 할당을 담당한다.
주요 기능:
동일한 flavor에 할당되어야 하는 리소스들을 묶어서 관리하는 단위다. 노드와 연관된 리소스(CPU, 메모리, GPU)는 같은 리소스 그룹에 넣어 동일한 flavor를 사용하도록 하고, 다른 리소스들은 별도 그룹으로 분리할 수 있다. Cluster Queue | Kueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: ml-cluster-queue
spec:
resourceGroups:
# 노드 기반 리소스는 함께 관리
- coveredResources: ["cpu", "memory"]
flavors:
- name: on-demand
resources:
- name: "cpu"
nominalQuota: 100
borrowingLimit: 50
- name: "memory"
nominalQuota: 400Gi
borrowingLimit: 200Gi
# GPU는 별도 관리 (다른 flavor 전략 적용)
- coveredResources: ["nvidia.com/gpu"]
flavors:
- name: gpu-a100
resources:
- name: "nvidia.com/gpu"
nominalQuota: 8
- name: gpu-t4
resources:
- name: "nvidia.com/gpu"
nominalQuota: 16
BestEffortFIFO(기본값) - 오래된 작업이 리소스 부족으로 실행되지 못해도 새로운 작업이 사용 가능한 할당량에 맞으면 실행 가능하다. Cluster Queue | Kueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: flexible-queue
spec:
queueingStrategy: BestEffortFIFO # 기본값
resourceGroups:
- coveredResources: ["cpu", "memory"]
flavors:
- name: default-flavor
resources:
- name: "cpu"
nominalQuota: 50
같은 cohort에 속한 ClusterQueue들이 서로 사용하지 않는 할당량을 빌려서 사용할 수 있다. Concepts
# 팀 A용 ClusterQueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: team-a-cq
spec:
cohort: "research-teams"# 동일한 cohort 이름
namespaceSelector:
matchLabels:
team: team-a
resourceGroups:
- coveredResources: ["cpu", "memory"]
flavors:
- name: on-demand
resources:
- name: "cpu"
nominalQuota: 50# 기본 할당량
borrowingLimit: 30# 최대 80 CPU까지 빌려 사용 가능
- name: "memory"
nominalQuota: 200Gi
borrowingLimit: 100Gi
---
# 팀 B용 ClusterQueue
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: team-b-cq
spec:
cohort: "research-teams"# 동일한 cohort 이름
namespaceSelector:
matchLabels:
team: team-b
resourceGroups:
- coveredResources: ["cpu", "memory"]
flavors:
- name: on-demand
resources:
- name: "cpu"
nominalQuota: 50
borrowingLimit: 30
- name: "memory"
nominalQuota: 200Gi
borrowingLimit: 100Gi
lendingLimit을 설정하면 ClusterQueue가 다른 팀에게 빌려줄 수 있는 리소스량을 제한할 수 있다. 예를 들어 lendingLimit=1로 설정하면, 해당 ClusterQueue의 사용량이 nominalQuota-1 이하일 때만 다른 ClusterQueue가 리소스를 빌릴 수 있다. Support for hierarchical ClusterQueues · Issue #79 · kubernetes-sigs/kueue