Skip to main content

Priority Classes

Purpose

Lumie defines three custom Kubernetes PriorityClass resources so critical platform services can preempt lower-priority work when the cluster is under pressure. The platform slice only defines the classes; individual workloads opt into them in their own Helm values or manifests.

This page is a reference document for developers changing workload scheduling priority or adding new cluster-wide priority tiers.

Source Paths

PathRole
lumie-infra/platform/priority-classes/argocd.yamlArgo CD application for the cluster-scoped PriorityClass manifests
lumie-infra/platform/priority-classes/manifests/priority-classes.yamlDefines high-priority, medium-priority, and low-priority
lumie-infra/applications/argocd/helm-values.yamlUses high-priority for Argo CD
lumie-infra/bootstrap/vault/helm-values.yamlUses high-priority for Vault
lumie-infra/bootstrap/minio/helm-values.yamlUses high-priority for MinIO
lumie-infra/storage/cnpg/helm-values.yamlUses high-priority for CloudNativePG
lumie-infra/observability/{prometheus,loki,tempo,thanos}/helm-values.yamlUse medium-priority for observability services

Defined Classes

NameValueGlobal defaultIntended workload class
high-priority1000NoCritical infrastructure such as Argo CD, Vault, MinIO, and CNPG
medium-priority500NoObservability services such as Prometheus, Loki, Tempo, and Thanos
low-priority100YesEverything else that does not set a specific class

low-priority is the only globalDefault: true class, so omission is itself a scheduling decision.

Ownership Boundaries

ResponsibilityOwner
Defining class names and numeric valuesplatform/priority-classes/manifests/priority-classes.yaml
Opting workloads into a classEach workload's Helm values or manifest
Built-in Kubernetes critical classesKubernetes itself, not lumie-infra

One important exception is platform/coredns-config/daemonset.yaml, which uses Kubernetes' built-in system-cluster-critical rather than any Lumie-defined class.

Operational Notes

  • PriorityClass is cluster-scoped, so the Argo CD Application for this slice has no destination namespace in platform/priority-classes/argocd.yaml.
  • Changing a numeric value affects every workload already referencing that class name.
  • Because low-priority is the global default, adding a new workload without a priorityClassName is equivalent to opting into the lowest custom Lumie tier.

Failure Modes

Failure pointBehavior
Workload omits priorityClassNameIt receives low-priority by default
Workload references a non-existent classPod scheduling fails until the class exists
Numeric value changeExisting workloads keep the same class name but gain new preemption behavior immediately

Verification

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