본문으로 건너뛰기

우선순위 클래스

목적

Lumie는 클러스터에 부하가 걸릴 때 중요한 플랫폼 서비스가 낮은 우선순위 작업을 선점할 수 있도록 세 개의 커스텀 Kubernetes PriorityClass 리소스를 정의합니다. 플랫폼 영역은 클래스만 정의하고, 개별 워크로드는 각자 Helm values나 매니페스트에서 이를 선택합니다.

이 페이지는 워크로드 스케줄링 우선순위를 변경하거나 새로운 클러스터 전역 우선순위 티어를 추가하는 개발자를 위한 reference 문서입니다.

소스 경로

경로역할
lumie-infra/platform/priority-classes/argocd.yaml클러스터 범위 PriorityClass 매니페스트용 Argo CD 애플리케이션
lumie-infra/platform/priority-classes/manifests/priority-classes.yamlhigh-priority, medium-priority, low-priority 정의
lumie-infra/applications/argocd/helm-values.yamlArgo CD에 high-priority 사용
lumie-infra/bootstrap/vault/helm-values.yamlVault에 high-priority 사용
lumie-infra/bootstrap/minio/helm-values.yamlMinIO에 high-priority 사용
lumie-infra/storage/cnpg/helm-values.yamlCloudNativePG에 high-priority 사용
lumie-infra/observability/{prometheus,loki,tempo,thanos}/helm-values.yamlobservability 서비스에 medium-priority 사용

정의된 클래스

이름전역 기본값의도한 워크로드 클래스
high-priority1000아니오Argo CD, Vault, MinIO, CNPG 같은 중요 인프라
medium-priority500아니오Prometheus, Loki, Tempo, Thanos 같은 observability 서비스
low-priority100특정 클래스를 설정하지 않은 나머지 모든 것

low-priorityglobalDefault: 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