우선순위 클래스
목적
Lumie는 클러스터에 부하가 걸릴 때 중요한 플랫폼 서비스가 낮은 우선순위 작업 을 선점할 수 있도록 세 개의 커스텀 Kubernetes PriorityClass 리소스를 정의합니다. 플랫폼 영역은 클래스만 정의하고, 개별 워크로드는 각자 Helm values나 매니페스트에서 이를 선택합니다.
이 페이지는 워크로드 스케줄링 우선순위를 변경하거나 새로운 클러스터 전역 우선순위 티어를 추가하는 개발자를 위한 reference 문서입니다.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/platform/priority-classes/argocd.yaml | 클러스터 범위 PriorityClass 매니페스트용 Argo CD 애플리케이션 |
lumie-infra/platform/priority-classes/manifests/priority-classes.yaml | high-priority, medium-priority, low-priority 정의 |
lumie-infra/applications/argocd/helm-values.yaml | Argo CD에 high-priority 사용 |
lumie-infra/bootstrap/vault/helm-values.yaml | Vault에 high-priority 사용 |
lumie-infra/bootstrap/minio/helm-values.yaml | MinIO에 high-priority 사용 |
lumie-infra/storage/cnpg/helm-values.yaml | CloudNativePG에 high-priority 사용 |
lumie-infra/observability/{prometheus,loki,tempo,thanos}/helm-values.yaml | observability 서비스에 medium-priority 사용 |
정의된 클래스
| 이름 | 값 | 전역 기본값 | 의도한 워크로드 클래스 |
|---|---|---|---|
high-priority | 1000 | 아니오 | Argo CD, Vault, MinIO, CNPG 같은 중요 인프라 |
medium-priority | 500 | 아니오 | Prometheus, Loki, Tempo, Thanos 같은 observability 서비스 |
low-priority | 100 | 예 | 특정 클래스를 설정하지 않은 나머지 모든 것 |
low-priority만 globalDefault: true이므로, 명시하지 않는 것 자체가 하나의 스케줄링 결정입니다.
소유권 경계
| 책임 | 소유자 |
|---|---|
| 클래스 이름과 숫자 값 정의 | platform/priority-classes/manifests/priority-classes.yaml |
| 워크로드를 특정 클래스에 연결 | 각 워크로드의 Helm values 또는 매니페스트 |
| Kubernetes 내장 critical 클래스 | lumie-infra가 아니라 Kubernetes 자체 |
중요한 예외로, platform/coredns-config/daemonset.yaml은 Lumie 정의 클래스가 아니라 Kubernetes 내장 system-cluster-critical을 사용합니다.
운영 메모
PriorityClass는 클러스터 범위 리소스이므로platform/priority-classes/argocd.yaml의 Argo CD 애플리케이션에는 대상 네임스페이스가 없습니다.- 숫자 값을 변경하면 이미 해당 클래스 이름을 참조하는 모든 워크로드에 영향이 갑니다.
low-priority가 전역 기본값이므로priorityClassName없이 새 워크로드를 추가하는 것은 가장 낮은 커스텀 Lumie 티어를 선택하는 것과 같습니다.
장애 지점
| 장애 지점 | 동작 |
|---|---|
워크로드가 priorityClassName을 생략 | 기본적으로 low-priority를 받음 |
| 존재하지 않는 클래스를 참조 | 클래스가 생길 때까지 pod 스케줄링 실패 |
| 숫자 값 변경 | 기존 워크로드는 같은 클래스 이름을 유지하지만 선점 동작은 즉시 바뀜 |
검증
cd lumie-infra
rg -n "priorityClassName|high-priority|medium-priority|low-priority" \
platform bootstrap storage observability applications
kubectl get priorityclass
kubectl get application priority-classes -n argocd -o yaml